light_hasher/
lib.rs

1pub mod bytes;
2pub mod errors;
3pub mod keccak;
4pub mod poseidon;
5pub mod sha256;
6pub mod syscalls;
7pub mod zero_bytes;
8pub mod zero_indexed_leaf;
9
10pub use keccak::Keccak;
11pub use poseidon::Poseidon;
12pub use sha256::Sha256;
13
14use crate::{errors::HasherError, zero_bytes::ZeroBytes};
15
16pub const HASH_BYTES: usize = 32;
17
18pub type Hash = [u8; HASH_BYTES];
19
20pub trait Hasher {
21    fn hash(val: &[u8]) -> Result<Hash, HasherError>;
22    fn hashv(vals: &[&[u8]]) -> Result<Hash, HasherError>;
23    fn zero_bytes() -> ZeroBytes;
24    fn zero_indexed_leaf() -> [u8; 32];
25}
26
27pub trait DataHasher {
28    fn hash<H: crate::Hasher>(&self) -> Result<[u8; 32], HasherError>;
29}
30
31pub trait Discriminator {
32    const DISCRIMINATOR: [u8; 8];
33    fn discriminator() -> [u8; 8] {
34        Self::DISCRIMINATOR
35    }
36}