diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:19 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:19 +0000 |
commit | a0b8f38ab54ac451646aa00cd5e91b6c76f22a84 (patch) | |
tree | fc451898ccaf445814e26b46664d78702178101d /vendor/siphasher | |
parent | Adding debian version 1.71.1+dfsg1-2. (diff) | |
download | rustc-a0b8f38ab54ac451646aa00cd5e91b6c76f22a84.tar.xz rustc-a0b8f38ab54ac451646aa00cd5e91b6c76f22a84.zip |
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/siphasher')
-rw-r--r-- | vendor/siphasher/.cargo-checksum.json | 2 | ||||
-rw-r--r-- | vendor/siphasher/COPYING | 2 | ||||
-rw-r--r-- | vendor/siphasher/Cargo.toml | 32 | ||||
-rw-r--r-- | vendor/siphasher/src/lib.rs | 15 | ||||
-rw-r--r-- | vendor/siphasher/src/sip.rs | 141 | ||||
-rw-r--r-- | vendor/siphasher/src/sip128.rs | 145 | ||||
-rw-r--r-- | vendor/siphasher/src/tests.rs | 28 | ||||
-rw-r--r-- | vendor/siphasher/src/tests128.rs | 2 |
8 files changed, 317 insertions, 50 deletions
diff --git a/vendor/siphasher/.cargo-checksum.json b/vendor/siphasher/.cargo-checksum.json index 680d487b1..9783e6d98 100644 --- a/vendor/siphasher/.cargo-checksum.json +++ b/vendor/siphasher/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"COPYING":"8678b9427288aa37850f17c8b8921a5f78dddb11ba0ea874435c3e8ff6dec9f1","Cargo.toml":"b6e846999ed8df39c81a101eb363b27c717f15872b47ef18c08b1017ecfcb297","README.md":"c0ffa167eca7e8aa8efc05c0514234aff3f522fc2e327edf6f86d4fbfa8502a8","src/lib.rs":"ec0ce710f7c19002b35660ad26298230a1dc257e1cae15d2b47df6eb300c74f2","src/sip.rs":"f1cf2ce1bb85b17db0e435dd288571faf914cb2d51f377a1fc6d5c4adb549c7b","src/sip128.rs":"d6b02fe1946f5adde7a520adaf74952f46d637af959fbd59f48633d4b244921e","src/tests.rs":"549599c0eee012f943b8ab7a30f2976b639ccaea4b5c62d864b95e27e1c90496","src/tests128.rs":"f939fa4d7afa64bb21325100b94a5aef616813fb50578cf321797db19f1fe79a"},"package":"fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7"}
\ No newline at end of file +{"files":{"COPYING":"2667c3da82a038bfbbd64cdb0fde6ecabda683e473fc1c10cc2b31c1c65e7fb6","Cargo.toml":"2fbdfdfc2ef4b57aca5b08df1a3bd62b8a05c049f1c8a6f9d138a25873db6a51","README.md":"c0ffa167eca7e8aa8efc05c0514234aff3f522fc2e327edf6f86d4fbfa8502a8","src/lib.rs":"dac421e799bfb49f9721af1083101af6846fef78268362172450f2a2c0f6250c","src/sip.rs":"7efabe8cfd561d743f31decb68af305133ee4f572db8088bb223a3505f23e438","src/sip128.rs":"b6a5308c623257826107adad5795918b241295fc3e84361090b16413e203cc15","src/tests.rs":"18637799bba7e7bac147257f01f0229eae527295d40dc9a03f0cb2f076c2e74b","src/tests128.rs":"b85b8893c14a3b4ea782d2084b6de414456ef6dd0b55d1c29c68a3e46516d07c"},"package":"7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"}
\ No newline at end of file diff --git a/vendor/siphasher/COPYING b/vendor/siphasher/COPYING index 22b59b600..349b39a0e 100644 --- a/vendor/siphasher/COPYING +++ b/vendor/siphasher/COPYING @@ -1,5 +1,5 @@ Copyright 2012-2016 The Rust Project Developers. -Copyright 2016-2020 Frank Denis. +Copyright 2016-2021 Frank Denis. Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license diff --git a/vendor/siphasher/Cargo.toml b/vendor/siphasher/Cargo.toml index 4fcde0377..8ad6e50d7 100644 --- a/vendor/siphasher/Cargo.toml +++ b/vendor/siphasher/Cargo.toml @@ -3,40 +3,54 @@ # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies -# to registry (e.g., crates.io) dependencies +# to registry (e.g., crates.io) dependencies. # -# If you believe there's an error in this file please file an -# issue against the rust-lang/cargo repository. If you're -# editing this file be aware that the upstream Cargo.toml -# will likely look very different (and much more reasonable) +# If you are reading this file be aware that the original Cargo.toml +# will likely look very different (and much more reasonable). +# See Cargo.toml.orig for the original contents. [package] +edition = "2018" name = "siphasher" -version = "0.3.3" +version = "0.3.10" authors = ["Frank Denis <github@pureftpd.org>"] description = "SipHash-2-4, SipHash-1-3 and 128-bit variants in pure Rust" homepage = "https://docs.rs/siphasher" documentation = "https://docs.rs/siphasher" readme = "README.md" -keywords = ["crypto", "hash", "siphash"] -categories = ["algorithms", "cryptography"] +keywords = [ + "crypto", + "hash", + "siphash", +] +categories = [ + "algorithms", + "cryptography", +] license = "MIT/Apache-2.0" repository = "https://github.com/jedisct1/rust-siphash" + [profile.release] opt-level = 3 lto = true panic = "abort" + [dependencies.serde] version = "1.0" features = ["derive"] optional = true + [dev-dependencies.serde_json] version = "1.0" [features] default = ["std"] serde_no_std = ["serde/alloc"] -serde_std = ["std", "serde/std"] +serde_std = [ + "std", + "serde/std", +] std = [] + [badges.travis-ci] repository = "jedisct1/rust-siphash" diff --git a/vendor/siphasher/src/lib.rs b/vendor/siphasher/src/lib.rs index c493adc96..71e59deb5 100644 --- a/vendor/siphasher/src/lib.rs +++ b/vendor/siphasher/src/lib.rs @@ -1,9 +1,7 @@ #![cfg_attr(not(test), no_std)] #![allow(clippy::unreadable_literal)] #![allow(clippy::cast_lossless)] - -#[cfg(test)] -extern crate core; +#![allow(clippy::many_single_char_names)] pub mod sip; pub mod sip128; @@ -13,3 +11,14 @@ mod tests; #[cfg(test)] mod tests128; + +#[cfg(any(feature = "serde", feature = "serde_std", feature = "serde_no_std"))] +pub mod reexports { + pub use serde; +} + +pub mod prelude { + pub use crate::{sip, sip128}; + pub use core::hash::Hasher as _; + pub use sip128::Hasher128 as _; +} diff --git a/vendor/siphasher/src/sip.rs b/vendor/siphasher/src/sip.rs index 046d8eaae..df6be1e79 100644 --- a/vendor/siphasher/src/sip.rs +++ b/vendor/siphasher/src/sip.rs @@ -15,10 +15,11 @@ use core::hash; use core::marker::PhantomData; use core::mem; use core::ptr; +use core::u64; /// An implementation of SipHash 1-3. /// -/// See: <https://131002.net/siphash/> +/// See: <https://www.aumasson.jp/siphash/siphash.pdf> #[derive(Debug, Clone, Copy, Default)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct SipHasher13 { @@ -27,7 +28,7 @@ pub struct SipHasher13 { /// An implementation of SipHash 2-4. /// -/// See: <https://131002.net/siphash/> +/// See: <https://www.aumasson.jp/siphash/siphash.pdf> #[derive(Debug, Clone, Copy, Default)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct SipHasher24 { @@ -36,7 +37,7 @@ pub struct SipHasher24 { /// An implementation of SipHash 2-4. /// -/// See: <https://131002.net/siphash/> +/// See: <https://www.aumasson.jp/siphash/siphash.pdf> /// /// SipHash is a general-purpose hashing function: it runs at a good /// speed (competitive with Spooky and City) and permits strong _keyed_ @@ -107,7 +108,7 @@ macro_rules! load_int_le { debug_assert!($i + mem::size_of::<$int_ty>() <= $buf.len()); let mut data = 0 as $int_ty; ptr::copy_nonoverlapping( - $buf.get_unchecked($i), + $buf.as_ptr().add($i), &mut data as *mut _ as *mut u8, mem::size_of::<$int_ty>(), ); @@ -154,10 +155,29 @@ impl SipHasher { SipHasher(SipHasher24::new_with_keys(key0, key1)) } + /// Creates a `SipHasher` from a 16 byte key. + pub fn new_with_key(key: &[u8; 16]) -> SipHasher { + let mut b0 = [0u8; 8]; + let mut b1 = [0u8; 8]; + b0.copy_from_slice(&key[0..8]); + b1.copy_from_slice(&key[8..16]); + let key0 = u64::from_le_bytes(b0); + let key1 = u64::from_le_bytes(b1); + Self::new_with_keys(key0, key1) + } + /// Get the keys used by this hasher pub fn keys(&self) -> (u64, u64) { (self.0.hasher.k0, self.0.hasher.k1) } + + /// Get the key used by this hasher as a 16 byte vector + pub fn key(&self) -> [u8; 16] { + let mut bytes = [0u8; 16]; + bytes[0..8].copy_from_slice(&self.0.hasher.k0.to_le_bytes()); + bytes[8..16].copy_from_slice(&self.0.hasher.k1.to_le_bytes()); + bytes + } } impl SipHasher13 { @@ -175,10 +195,29 @@ impl SipHasher13 { } } + /// Creates a `SipHasher13` from a 16 byte key. + pub fn new_with_key(key: &[u8; 16]) -> SipHasher13 { + let mut b0 = [0u8; 8]; + let mut b1 = [0u8; 8]; + b0.copy_from_slice(&key[0..8]); + b1.copy_from_slice(&key[8..16]); + let key0 = u64::from_le_bytes(b0); + let key1 = u64::from_le_bytes(b1); + Self::new_with_keys(key0, key1) + } + /// Get the keys used by this hasher pub fn keys(&self) -> (u64, u64) { (self.hasher.k0, self.hasher.k1) } + + /// Get the key used by this hasher as a 16 byte vector + pub fn key(&self) -> [u8; 16] { + let mut bytes = [0u8; 16]; + bytes[0..8].copy_from_slice(&self.hasher.k0.to_le_bytes()); + bytes[8..16].copy_from_slice(&self.hasher.k1.to_le_bytes()); + bytes + } } impl SipHasher24 { @@ -196,10 +235,29 @@ impl SipHasher24 { } } + /// Creates a `SipHasher24` from a 16 byte key. + pub fn new_with_key(key: &[u8; 16]) -> SipHasher24 { + let mut b0 = [0u8; 8]; + let mut b1 = [0u8; 8]; + b0.copy_from_slice(&key[0..8]); + b1.copy_from_slice(&key[8..16]); + let key0 = u64::from_le_bytes(b0); + let key1 = u64::from_le_bytes(b1); + Self::new_with_keys(key0, key1) + } + /// Get the keys used by this hasher pub fn keys(&self) -> (u64, u64) { (self.hasher.k0, self.hasher.k1) } + + /// Get the key used by this hasher as a 16 byte vector + pub fn key(&self) -> [u8; 16] { + let mut bytes = [0u8; 16]; + bytes[0..8].copy_from_slice(&self.hasher.k0.to_le_bytes()); + bytes[8..16].copy_from_slice(&self.hasher.k1.to_le_bytes()); + bytes + } } impl<S: Sip> Hasher<S> { @@ -281,6 +339,31 @@ impl hash::Hasher for SipHasher { fn finish(&self) -> u64 { self.0.finish() } + + #[inline] + fn write_usize(&mut self, i: usize) { + self.0.write_usize(i); + } + + #[inline] + fn write_u8(&mut self, i: u8) { + self.0.write_u8(i); + } + + #[inline] + fn write_u16(&mut self, i: u16) { + self.0.write_u16(i); + } + + #[inline] + fn write_u32(&mut self, i: u32) { + self.0.write_u32(i); + } + + #[inline] + fn write_u64(&mut self, i: u64) { + self.0.write_u64(i); + } } impl hash::Hasher for SipHasher13 { @@ -293,6 +376,31 @@ impl hash::Hasher for SipHasher13 { fn finish(&self) -> u64 { self.hasher.finish() } + + #[inline] + fn write_usize(&mut self, i: usize) { + self.hasher.write_usize(i); + } + + #[inline] + fn write_u8(&mut self, i: u8) { + self.hasher.write_u8(i); + } + + #[inline] + fn write_u16(&mut self, i: u16) { + self.hasher.write_u16(i); + } + + #[inline] + fn write_u32(&mut self, i: u32) { + self.hasher.write_u32(i); + } + + #[inline] + fn write_u64(&mut self, i: u64) { + self.hasher.write_u64(i); + } } impl hash::Hasher for SipHasher24 { @@ -305,6 +413,31 @@ impl hash::Hasher for SipHasher24 { fn finish(&self) -> u64 { self.hasher.finish() } + + #[inline] + fn write_usize(&mut self, i: usize) { + self.hasher.write_usize(i); + } + + #[inline] + fn write_u8(&mut self, i: u8) { + self.hasher.write_u8(i); + } + + #[inline] + fn write_u16(&mut self, i: u16) { + self.hasher.write_u16(i); + } + + #[inline] + fn write_u32(&mut self, i: u32) { + self.hasher.write_u32(i); + } + + #[inline] + fn write_u64(&mut self, i: u64) { + self.hasher.write_u64(i); + } } impl<S: Sip> hash::Hasher for Hasher<S> { diff --git a/vendor/siphasher/src/sip128.rs b/vendor/siphasher/src/sip128.rs index a3ac92f45..cabf8e3a3 100644 --- a/vendor/siphasher/src/sip128.rs +++ b/vendor/siphasher/src/sip128.rs @@ -15,6 +15,7 @@ use core::hash; use core::marker::PhantomData; use core::mem; use core::ptr; +use core::u64; /// A 128-bit (2x64) hash output #[derive(Debug, Clone, Copy, Default)] @@ -33,9 +34,9 @@ impl From<u128> for Hash128 { } } -impl Into<u128> for Hash128 { - fn into(self) -> u128 { - (self.h1 as u128) | ((self.h2 as u128) << 64) +impl From<Hash128> for u128 { + fn from(h: Hash128) -> u128 { + (h.h1 as u128) | ((h.h2 as u128) << 64) } } @@ -123,7 +124,7 @@ macro_rules! load_int_le { debug_assert!($i + mem::size_of::<$int_ty>() <= $buf.len()); let mut data = 0 as $int_ty; ptr::copy_nonoverlapping( - $buf.get_unchecked($i), + $buf.as_ptr().add($i), &mut data as *mut _ as *mut u8, mem::size_of::<$int_ty>(), ); @@ -175,10 +176,29 @@ impl SipHasher { SipHasher(SipHasher24::new_with_keys(key0, key1)) } + /// Creates a `SipHasher` from a 16 byte key. + pub fn new_with_key(key: &[u8; 16]) -> SipHasher { + let mut b0 = [0u8; 8]; + let mut b1 = [0u8; 8]; + b0.copy_from_slice(&key[0..8]); + b1.copy_from_slice(&key[8..16]); + let key0 = u64::from_le_bytes(b0); + let key1 = u64::from_le_bytes(b1); + Self::new_with_keys(key0, key1) + } + /// Get the keys used by this hasher pub fn keys(&self) -> (u64, u64) { (self.0.hasher.k0, self.0.hasher.k1) } + + /// Get the key used by this hasher as a 16 byte vector + pub fn key(&self) -> [u8; 16] { + let mut bytes = [0u8; 16]; + bytes[0..8].copy_from_slice(&self.0.hasher.k0.to_le_bytes()); + bytes[8..16].copy_from_slice(&self.0.hasher.k1.to_le_bytes()); + bytes + } } impl Hasher128 for SipHasher { @@ -204,10 +224,29 @@ impl SipHasher13 { } } + /// Creates a `SipHasher13` from a 16 byte key. + pub fn new_with_key(key: &[u8; 16]) -> SipHasher13 { + let mut b0 = [0u8; 8]; + let mut b1 = [0u8; 8]; + b0.copy_from_slice(&key[0..8]); + b1.copy_from_slice(&key[8..16]); + let key0 = u64::from_le_bytes(b0); + let key1 = u64::from_le_bytes(b1); + Self::new_with_keys(key0, key1) + } + /// Get the keys used by this hasher pub fn keys(&self) -> (u64, u64) { (self.hasher.k0, self.hasher.k1) } + + /// Get the key used by this hasher as a 16 byte vector + pub fn key(&self) -> [u8; 16] { + let mut bytes = [0u8; 16]; + bytes[0..8].copy_from_slice(&self.hasher.k0.to_le_bytes()); + bytes[8..16].copy_from_slice(&self.hasher.k1.to_le_bytes()); + bytes + } } impl Hasher128 for SipHasher13 { @@ -233,10 +272,29 @@ impl SipHasher24 { } } + /// Creates a `SipHasher24` from a 16 byte key. + pub fn new_with_key(key: &[u8; 16]) -> SipHasher24 { + let mut b0 = [0u8; 8]; + let mut b1 = [0u8; 8]; + b0.copy_from_slice(&key[0..8]); + b1.copy_from_slice(&key[8..16]); + let key0 = u64::from_le_bytes(b0); + let key1 = u64::from_le_bytes(b1); + Self::new_with_keys(key0, key1) + } + /// Get the keys used by this hasher pub fn keys(&self) -> (u64, u64) { (self.hasher.k0, self.hasher.k1) } + + /// Get the key used by this hasher as a 16 byte vector + pub fn key(&self) -> [u8; 16] { + let mut bytes = [0u8; 16]; + bytes[0..8].copy_from_slice(&self.hasher.k0.to_le_bytes()); + bytes[8..16].copy_from_slice(&self.hasher.k1.to_le_bytes()); + bytes + } } impl Hasher128 for SipHasher24 { @@ -349,6 +407,31 @@ impl hash::Hasher for SipHasher { fn finish(&self) -> u64 { self.0.finish() } + + #[inline] + fn write_usize(&mut self, i: usize) { + self.0.write_usize(i); + } + + #[inline] + fn write_u8(&mut self, i: u8) { + self.0.write_u8(i); + } + + #[inline] + fn write_u16(&mut self, i: u16) { + self.0.write_u16(i); + } + + #[inline] + fn write_u32(&mut self, i: u32) { + self.0.write_u32(i); + } + + #[inline] + fn write_u64(&mut self, i: u64) { + self.0.write_u64(i); + } } impl hash::Hasher for SipHasher13 { @@ -361,6 +444,31 @@ impl hash::Hasher for SipHasher13 { fn finish(&self) -> u64 { self.hasher.finish() } + + #[inline] + fn write_usize(&mut self, i: usize) { + self.hasher.write_usize(i); + } + + #[inline] + fn write_u8(&mut self, i: u8) { + self.hasher.write_u8(i); + } + + #[inline] + fn write_u16(&mut self, i: u16) { + self.hasher.write_u16(i); + } + + #[inline] + fn write_u32(&mut self, i: u32) { + self.hasher.write_u32(i); + } + + #[inline] + fn write_u64(&mut self, i: u64) { + self.hasher.write_u64(i); + } } impl hash::Hasher for SipHasher24 { @@ -373,6 +481,31 @@ impl hash::Hasher for SipHasher24 { fn finish(&self) -> u64 { self.hasher.finish() } + + #[inline] + fn write_usize(&mut self, i: usize) { + self.hasher.write_usize(i); + } + + #[inline] + fn write_u8(&mut self, i: u8) { + self.hasher.write_u8(i); + } + + #[inline] + fn write_u16(&mut self, i: u16) { + self.hasher.write_u16(i); + } + + #[inline] + fn write_u32(&mut self, i: u32) { + self.hasher.write_u32(i); + } + + #[inline] + fn write_u64(&mut self, i: u64) { + self.hasher.write_u64(i); + } } impl<S: Sip> hash::Hasher for Hasher<S> { @@ -514,8 +647,8 @@ impl Hash128 { let h1 = self.h1.to_le(); let h2 = self.h2.to_le(); unsafe { - ptr::copy_nonoverlapping(&h1 as *const _ as *const u8, bytes.get_unchecked_mut(0), 8); - ptr::copy_nonoverlapping(&h2 as *const _ as *const u8, bytes.get_unchecked_mut(8), 8); + ptr::copy_nonoverlapping(&h1 as *const _ as *const u8, bytes.as_mut_ptr(), 8); + ptr::copy_nonoverlapping(&h2 as *const _ as *const u8, bytes.as_mut_ptr().add(8), 8); } bytes } diff --git a/vendor/siphasher/src/tests.rs b/vendor/siphasher/src/tests.rs index 480903e59..05d4b6a18 100644 --- a/vendor/siphasher/src/tests.rs +++ b/vendor/siphasher/src/tests.rs @@ -241,30 +241,8 @@ fn test_siphash_2_4() { } } #[test] -#[cfg(target_arch = "arm")] -fn test_hash_usize() { - let val = 0xdeadbeef_deadbeef_u64; - assert_ne!(hash(&(val as u64)), hash(&(val as usize))); - assert_eq!(hash(&(val as u32)), hash(&(val as usize))); -} -#[test] -#[cfg(target_arch = "x86_64")] -fn test_hash_usize() { - let val = 0xdeadbeef_deadbeef_u64; - assert_eq!(hash(&(val as u64)), hash(&(val as usize))); - assert_ne!(hash(&(val as u32)), hash(&(val as usize))); -} -#[test] -#[cfg(target_arch = "x86")] -fn test_hash_usize() { - let val = 0xdeadbeef_deadbeef_u64; - assert_ne!(hash(&(val as u64)), hash(&(val as usize))); - assert_eq!(hash(&(val as u32)), hash(&(val as usize))); -} - -#[test] fn test_hash_idempotent() { - let val64 = 0xdeadbeef_deadbeef_u64; + let val64 = 0xdead_beef_dead_beef_u64; assert_eq!(hash(&val64), hash(&val64)); let val32 = 0xdeadbeef_u32; assert_eq!(hash(&val32), hash(&val32)); @@ -272,7 +250,7 @@ fn test_hash_idempotent() { #[test] fn test_hash_no_bytes_dropped_64() { - let val = 0xdeadbeef_deadbeef_u64; + let val = 0xdead_beef_dead_beef_u64; assert_ne!(hash(&val), hash(&zero_byte(val, 0))); assert_ne!(hash(&val), hash(&zero_byte(val, 1))); @@ -323,7 +301,7 @@ fn test_hash_no_concat_alias() { #[test] fn test_hash_serde() { - let val64 = 0xdeadbeef_deadbeef_u64; + let val64 = 0xdead_beef_dead_beef_u64; let hash = hash(&val64); let serialized = serde_json::to_string(&hash).unwrap(); let deserialized: u64 = serde_json::from_str(&serialized).unwrap(); diff --git a/vendor/siphasher/src/tests128.rs b/vendor/siphasher/src/tests128.rs index 9f55a6193..0d9769646 100644 --- a/vendor/siphasher/src/tests128.rs +++ b/vendor/siphasher/src/tests128.rs @@ -95,7 +95,7 @@ fn test_siphash128_2_4() { #[test] fn test_siphash128_serde() { - let val64 = 0xdeadbeef_deadbeef_u64; + let val64 = 0xdead_beef_dead_beef_u64; let hash = hash(&val64); let serialized = serde_json::to_string(&hash).unwrap(); let deserialized: [u8; 16] = serde_json::from_str(&serialized).unwrap(); |