pythnet_sdk/hashers/
keccak256.rs

1use {
2    crate::hashers::Hasher,
3    serde::Serialize,
4    sha3::{Digest, Keccak256 as Keccak256Digest},
5};
6
7#[derive(Clone, Default, Debug, Eq, PartialEq, Serialize)]
8pub struct Keccak256 {}
9
10impl Hasher for Keccak256 {
11    type Hash = [u8; 32];
12
13    fn hashv(data: &[impl AsRef<[u8]>]) -> [u8; 32] {
14        let mut hasher = Keccak256Digest::new();
15        data.iter().for_each(|d| hasher.update(d));
16        hasher.finalize().into()
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use {super::*, crate::hashers::Hasher};
23
24    #[test]
25    fn test_keccak256() {
26        let data = b"helloworld";
27        let hash_a = Keccak256::hashv(&[data]);
28
29        let data = [b"hello", b"world"];
30        let hash_b = Keccak256::hashv(&data);
31
32        assert_eq!(hash_a, hash_b);
33    }
34}