pythnet_sdk/hashers/
keccak256.rs

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