2 个稳定版本
1.0.1 | 2021年7月12日 |
---|
#1262 in 加密学
1,250 每月下载量
在 5 个包 (4 个直接使用) 中使用
6KB
65 行
deterministic-hash
这是一个小巧的 Rust 库,用于创建不受架构影响的确定性哈希。该库与 no-std
兼容,不使用任何分配或依赖。
默认的 core::hash::Hasher
实现确保了使用 #[derive(Hash)]
的数据结构的平台依赖哈希。最值得注意的是通过
- 使用
to_ne_bytes
对于u{8,16,32,64,128}
。 - 使用
usize 的本地字节数。
该库的 DeterministicHasher
强制使用 to_le_bytes
并将 usize
强制转换为 u64
,无论您的平台如何。因此,哈希器将效率较低,但在不同架构环境中使用同一库时将是确定的。我在 ARM 嵌入式系统、wasm 和 x64 上都使用了一个常见的数据协议库。
您可以通过运行 cross
来验证此库的操作
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
lib.rs
:
这是一个小巧的 Rust 库,用于创建不受架构影响的确定性哈希。该库与 no-std
兼容,不使用任何分配或依赖。
默认的 core::hash::Hasher
实现确保了使用 #[derive(Hash)]
的数据结构的平台依赖哈希。最值得注意的是通过
- 使用
to_ne_bytes
对于u{8,16,32,64,128}
。 - 使用
usize 的本地字节数。
该库的 DeterministicHasher
强制使用 to_le_bytes
并将 usize
强制转换为 u64
,无论您的平台如何。因此,哈希器将效率较低,但在不同架构环境中使用同一库时将是确定的。我在 ARM 嵌入式系统、wasm 和 x64 上都使用了一个常见的数据协议库。
从任何哈希器中通过插入 DeterministicHasher
来使其确定
let hasher = crc::crc32::Digest::new(crc::crc32::KOOPMAN);
let hasher = deterministic_hash::DeterministicHasher::new(hasher);