summaryrefslogtreecommitdiffstats
path: root/rust/vendor/siphasher/README.md
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rust/vendor/siphasher/README.md93
1 files changed, 93 insertions, 0 deletions
diff --git a/rust/vendor/siphasher/README.md b/rust/vendor/siphasher/README.md
new file mode 100644
index 0000000..01f17ac
--- /dev/null
+++ b/rust/vendor/siphasher/README.md
@@ -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. \ No newline at end of file