CubeHash
Rust implementation of the CubeHash hash function (revisions 2 and 3) with SIMD
acceleration and a portable scalar fallback. Based on the C99 implementation by
Dennis Mitchell (https://github.com/DennisMitchell/cubehash).
Features and platform support
- x86/x86_64: SSE2 and AVX2 intrinsics
- AArch64: NEON intrinsics
- Portable scalar: always available; can be forced with the
force-scalarfeature - Both CubeHash rev2 and rev3 are supported; CLI allows
-2/-3selection
Library usage
Add to your Cargo.toml:
[]
= "0.2"
Incremental API with fixed-size wrappers:
use ;
let mut h256 = new;
h256.update;
h256.update;
let digest_32 = h256.finalize; // [u8; 32]
let mut h384 = new;
h384.update;
let digest_48 = h384.finalize; // [u8; 48]
let mut h512 = new;
h512.update;
let digest_64 = h512.finalize; // [u8; 64]
Generic API with explicit parameters:
use ;
let mut h = new;
h.update;
h.update;
let digest = h.finalize; // Vec<u8> length = hash_len_bits / 8
CLI usage
Build and run the CLI:
Options:
-2/-3: select revision 2 or 3 (default rev3)-l HASHLEN: output length in bits (8..=512, multiple of 8)
Benchmarks
- Run all benches with Criterion:
cargo bench - Bash script timing the hashing of testfiles:
./benchmark.sh
There is also a manifest-based verification script used in CI to hash test files and compare against expected outputs:
References
- Spec and background:
https://cubehash.cr.yp.to/
License
Licensed under MIT (LICENSE-MIT)