Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
93
third-party/vendor/siphasher/README.md
vendored
Normal file
93
third-party/vendor/siphasher/README.md
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
SipHash implementation for Rust
|
||||
===============================
|
||||
|
||||
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.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
In `Cargo.toml`:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
siphasher = "0.3"
|
||||
```
|
||||
|
||||
If you want [serde](https://github.com/serde-rs/serde) support, include the feature like this:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
siphasher = { version = "0.3", features = ["serde"] }
|
||||
```
|
||||
|
||||
64-bit mode:
|
||||
|
||||
```rust
|
||||
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:
|
||||
|
||||
```rust
|
||||
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();
|
||||
```
|
||||
|
||||
[API documentation](https://docs.rs/siphasher/)
|
||||
-----------------------------------------------
|
||||
|
||||
Note
|
||||
----
|
||||
|
||||
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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue