ez_hash/hash/
blake3_helper.rs

1use super::*;
2
3pub fn blake3<const N: usize, T: Hashable>(data: T) -> [u8; N] {
4    let mut hasher = blake3::Hasher::new();
5    data.update_hasher(&mut |bytes| {
6        hasher.update(bytes);
7    });
8
9    let mut out = [0u8; N];
10    hasher.finalize_xof().fill(&mut out);
11    out
12}
13
14pub struct Blake3_256;
15pub struct Blake3_512;
16
17impl Hasher for Blake3_256 {
18    type Output = [u8; 32];
19
20    fn hash<T: Hashable>(data: T) -> Self::Output {
21        blake3(data)
22    }
23
24    fn zeros() -> Self::Output {
25        [0; 32]
26    }
27}
28
29impl Hasher for Blake3_512 {
30    type Output = [u8; 64];
31
32    fn hash<T: Hashable>(data: T) -> Self::Output {
33        blake3(data)
34    }
35
36    fn zeros() -> Self::Output {
37        [0; 64]
38    }
39}