1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
use crate::{traits::Hasher, H256}; use blake2b_rs::{Blake2b, Blake2bBuilder}; const BLAKE2B_KEY: &[u8] = &[]; const BLAKE2B_LEN: usize = 32; const PERSONALIZATION: &[u8] = b"sparsemerkletree"; pub struct Blake2bHasher(Blake2b); impl Default for Blake2bHasher { fn default() -> Self { let blake2b = Blake2bBuilder::new(BLAKE2B_LEN) .personal(PERSONALIZATION) .key(BLAKE2B_KEY) .build(); Blake2bHasher(blake2b) } } impl Hasher for Blake2bHasher { fn write_h256(&mut self, h: &H256) { self.0.update(h.as_slice()); } fn finish(self) -> H256 { let mut hash = [0u8; 32]; self.0.finalize(&mut hash); hash.into() } }