3 stable releases
| 1.0.2 | Sep 24, 2025 |
|---|---|
| 1.0.1 | Jul 12, 2021 |
#286 in Cryptography
4,457 downloads per month
Used in 7 crates
(2 directly)
6KB
66 lines
Tiny Rust library to create deterministic hashes regardless of architecture. This library is no-std compatible and uses no allocations or dependencies.
The default core::hash::Hasher implementation ensures a platform dependant hashing of datastructures that use #[derive(Hash)]. Most notably by:
- using
to_ne_bytesforu{8,16,32,64,128}. - using the native bytelength of
usize.
The DeterministicHasher of this library forces the use of to_le_bytes and casts usize to u64 regardless of your platform. Hence the hasher will be less efficient, but will be deterministic when using the same library in different architecture contexts. I use a common dataprotocol library both on ARM embedded systems, wasm and x64.
From any hasher make it deterministic by inserting DeterministicHasher in between:
let hasher = crc::crc32::Digest::new(crc::crc32::KOOPMAN);
let hasher = deterministic_hash::DeterministicHasher::new(hasher);
deterministic-hash
Tiny Rust library to create deterministic hashes regardless of architecture. This library is no-std compatible and uses no allocations or dependencies.
The default core::hash::Hasher implementation ensures a platform dependant hashing of datastructures that use #[derive(Hash)]. Most notably by:
- using
to_ne_bytesforu{8,16,32,64,128}. - using the native bytelength of
usize.
The DeterministicHasher of this library forces the use of to_le_bytes and casts usize to u64 regardless of your platform. Hence the hasher will be less efficient, but will be deterministic when using the same library in different architecture contexts. I use a common dataprotocol library both on ARM embedded systems, wasm and x64.
You can validate the operation of this library with cross by running:
cargo install cross
cross test --target=x86_64-unknown-linux-gnu
cross test --target=aarch64-unknown-linux-gnu
cross test --target=arm-unknown-linux-gnueabihf