commit | 2d4670dc03faa0f31daf61d56616e10d82274f50 | [log] [tgz] |
---|---|---|
author | James Farrell <[email protected]> | Wed May 22 23:45:04 2024 +0000 |
committer | Automerger Merge Worker <[email protected]> | Wed May 22 23:45:04 2024 +0000 |
tree | 4ae35a94265b9c697041519825384002316eb3dc | |
parent | de450e3e356cd3e18f353df73bfb5d70c43f1111 [diff] | |
parent | 4858e9b17ba13d39cb5cfba19961add32042ce88 [diff] |
Update Android.bp by running cargo_embargo am: 6cadc29aba am: 4858e9b17b Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/siphasher/+/3093438 Change-Id: I61e196e56a25d1ba6963a27e35f76abfb0ac3070 Signed-off-by: Automerger Merge Worker <[email protected]>
This crates implements SipHash-2-4 and SipHash-1-3 in Rust.
It is based on the original implementation from rust-core and exposes the same API.
It also implements SipHash variants returning 128-bit tags.
The sip
module implements the standard 64-bit mode, whereas the sip128
module implements the 128-bit mode.
In Cargo.toml
:
[dependencies] siphasher = "1"
If you want serde 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]; let mut 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]; let mut 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 the Hasher
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 are write()
and finish()
.
It is thus recommended to use SipHash (and all other hash functions, actually) as documented above.