- 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
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors10
Uh oh!
There was an error while loading.Please reload this page.