use blake3;
pub trait BlockHasher {
fn create() -> Self;
fn hash(&mut self, input: &[u8]) -> &[u8];
fn size() -> usize;
}
#[derive(Default, Debug, PartialEq)]
pub struct B3BlockHasher {
pub hash_value: [u8; 32],
}
impl BlockHasher for B3BlockHasher {
fn create() -> Self {
B3BlockHasher { hash_value: [0; 32] }
}
fn hash(&mut self, input: &[u8]) -> &[u8] {
self.hash_value = *blake3::hash(input).as_bytes();
&self.hash_value
}
fn size() -> usize {
32
}
}
#[derive(Default)]
pub struct NullBlockHasher {
}
impl BlockHasher for NullBlockHasher {
fn create() -> Self { NullBlockHasher {} }
fn hash(&mut self, _input: &[u8]) -> &[u8] { &[0] }
fn size() -> usize { 0 }
}