use {
crate::hashers::Hasher,
serde::Serialize,
sha3::{
Digest,
Keccak256 as Keccak256Digest,
},
};
#[derive(Clone, Default, Debug, Eq, PartialEq, Serialize)]
pub struct Keccak256 {}
impl Hasher for Keccak256 {
type Hash = [u8; 32];
fn hashv(data: &[impl AsRef<[u8]>]) -> [u8; 32] {
let mut hasher = Keccak256Digest::new();
data.iter().for_each(|d| hasher.update(d));
hasher.finalize().into()
}
}
#[cfg(test)]
mod tests {
use {
super::*,
crate::hashers::Hasher,
};
#[test]
fn test_keccak256() {
let data = b"helloworld";
let hash_a = Keccak256::hashv(&[data]);
let data = [b"hello", b"world"];
let hash_b = Keccak256::hashv(&data);
assert_eq!(hash_a, hash_b);
}
}