use primitive_types::H256;
const DELIMITER: &[u8] = ";".as_bytes();
pub struct Hasher(blake3::Hasher);
impl Hasher {
pub fn new() -> Self {
Hasher(blake3::Hasher::new())
}
pub fn update(&mut self, input: &[u8]) -> &mut Self {
self.0.update(input);
self.0.update(DELIMITER);
self
}
pub fn finalize(&self) -> H256 {
let bytes: [u8; 32] = self.0.finalize().into();
H256(bytes)
}
}
impl Default for Hasher {
fn default() -> Self {
Hasher(blake3::Hasher::default())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn verify_hasher() {
use std::str::FromStr;
let mut hasher = Hasher::new();
hasher.update("dapol".as_bytes());
hasher.update("PoR".as_bytes());
let hash = hasher.finalize();
assert_eq!(
hash,
H256::from_str("b0424ae23fcce672aaff99e9f433286e27119939a280743539783ba7aade8294")
.unwrap()
);
}
}