- Notifications
You must be signed in to change notification settings - Fork16
SipHash (2-4, 1-3 + 128 bit variant) implementations for Rust
License
jedisct1/rust-siphash
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This crates implements SipHash-2-4 and SipHash-1-3 in Rust.
It is based on the original implementation from rust-core and exposes thesame API.
It also implements SipHash variants returning 128-bit tags.
Thesip
module implements the standard 64-bit mode, whereas thesip128
module implements the 128-bit mode.
InCargo.toml
:
[dependencies]siphasher ="1"
If you wantserde support, include the feature like this:
[dependencies]siphasher = {version ="1",features = ["serde"] }
64-bit mode:
use siphasher::sip::{SipHasher,SipHasher13,SipHasher24};// one-shot:let array:&[u8] =&[1,2,3];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];let hasher =SipHasher13::new_with_key(key);let h = hasher.hash(array);// incremental:use core::hash::Hasher;let array1:&[u8] =&[1,2,3];let array2:&[u8] =&[4,5,6];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];letmut hasher =SipHasher13::new_with_key(key);hasher.write(array1);hasher.write(array2);let h = hasher.finish();
128-bit mode:
use siphasher::sip128::{Hasher128,SipHasher,SipHasher13,SipHasher24};// one-shot:let array:&[u8] =&[1,2,3];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];let hasher =SipHasher13::new_with_key(key);let h = hasher.hash(array).as_bytes();// incremental:use core::hash::Hasher;let array1:&[u8] =&[1,2,3];let array2:&[u8] =&[4,5,6];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];letmut hasher =SipHasher13::new_with_key(key);hasher.write(array1);hasher.write(array2);let h = hasher.finish128().as_bytes();
Due to a confusing and not well documented API, methods from theHasher
trait of the standard library (std::hash::Hasher
,core::hash::Hasher
) produce non-portable results.
This is not specific to SipHash, and affects all hash functions.
The only safe methods in that trait arewrite()
andfinish()
.
It is thus recommended to use SipHash (and all other hash functions, actually) as documented above.
About
SipHash (2-4, 1-3 + 128 bit variant) implementations for Rust