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
30
31
32
33
34
35
use blake2::{
VarBlake2b,
digest::{Update, VariableOutput},
};
use generic_array::{ArrayLength, GenericArray};
pub trait Mapper {
fn map<N>(x: &[u8]) -> GenericArray<u8, N>
where N: ArrayLength<u8>;
}
pub struct MapBlake2b;
impl Mapper for MapBlake2b {
fn map<N>(x: &[u8]) -> GenericArray<u8, N>
where N: ArrayLength<u8> {
let mut hasher = VarBlake2b::new(N::to_usize()).unwrap();
hasher.update(x);
let mut array = None;
hasher.finalize_variable(|digest| {
array = Some(GenericArray::<u8, N>::clone_from_slice(digest));
});
array.unwrap()
}
}