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