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