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}