diff options
author | Alex Auvolat <alex@adnab.me> | 2021-02-23 17:52:28 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2021-02-23 17:52:28 +0100 |
commit | e8e4418ca7c0b1156d5bc103b164aa72ecb748b9 (patch) | |
tree | e370f48960256b10b50cfbcbae81b27cb88dd6ab /src | |
parent | 1abbca37c4c320bafbbaad8cd4d4155372526a86 (diff) | |
download | garage-e8e4418ca7c0b1156d5bc103b164aa72ecb748b9.tar.gz garage-e8e4418ca7c0b1156d5bc103b164aa72ecb748b9.zip |
Add blake2 and xxhash hash functions
Diffstat (limited to 'src')
-rw-r--r-- | src/util/Cargo.toml | 2 | ||||
-rw-r--r-- | src/util/data.rs | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml index cb2baf06..93115843 100644 --- a/src/util/Cargo.toml +++ b/src/util/Cargo.toml @@ -16,8 +16,10 @@ path = "lib.rs" rand = "0.7" hex = "0.3" sha2 = "0.8" +blake2 = "0.9" err-derive = "0.2.3" log = "0.4" +fasthash = "0.4" sled = "0.31" diff --git a/src/util/data.rs b/src/util/data.rs index 657467ba..a1c292e7 100644 --- a/src/util/data.rs +++ b/src/util/data.rs @@ -1,7 +1,6 @@ use rand::Rng; use serde::de::{self, Visitor}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use sha2::{Digest, Sha256}; use std::fmt; use std::time::{SystemTime, UNIX_EPOCH}; @@ -78,6 +77,8 @@ pub type UUID = FixedBytes32; pub type Hash = FixedBytes32; pub fn sha256sum(data: &[u8]) -> Hash { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); hasher.input(data); let mut hash = [0u8; 32]; @@ -85,6 +86,27 @@ pub fn sha256sum(data: &[u8]) -> Hash { hash.into() } +pub fn blake2sum(data: &[u8]) -> Hash { + use blake2::{Blake2b, Digest}; + + let mut hasher = Blake2b::new(); + hasher.update(data); + let mut hash = [0u8; 32]; + hash.copy_from_slice(&hasher.finalize()[..32]); + hash.into() +} + +pub type FastHash = u64; + +pub fn fasthash(data: &[u8]) -> FastHash { + use std::hash::Hasher; + use fasthash::{xx::Hasher64, FastHasher}; + + let mut h = Hasher64::new(); + h.write(data); + h.finish() +} + pub fn gen_uuid() -> UUID { rand::thread_rng().gen::<[u8; 32]>().into() } |