1#![allow(unexpected_cfgs)]
2#![cfg_attr(not(feature = "std"), no_std)]
3
4#[cfg(all(feature = "alloc", not(feature = "std")))]
5extern crate alloc;
6
7#[cfg(feature = "alloc")]
8#[cfg(not(feature = "std"))]
9pub use alloc::{string::String, vec, vec::Vec};
10#[cfg(feature = "std")]
11pub use std::{string::String, vec, vec::Vec};
12
13pub mod bigint;
14mod data_hasher;
15pub mod errors;
16pub mod hash_chain;
17pub mod hash_to_field_size;
18pub mod keccak;
19pub mod poseidon;
20pub mod sha256;
21pub mod syscalls;
22pub mod to_byte_array;
23pub mod zero_bytes;
24pub mod zero_indexed_leaf;
25
26pub use data_hasher::DataHasher;
27pub use keccak::Keccak;
28pub use poseidon::Poseidon;
29pub use sha256::Sha256;
30
31pub use crate::errors::HasherError;
32use crate::zero_bytes::ZeroBytes;
33
34pub const HASH_BYTES: usize = 32;
35
36pub type Hash = [u8; HASH_BYTES];
37
38pub trait Hasher {
39 const ID: u8;
40 fn hash(val: &[u8]) -> Result<Hash, HasherError>;
41 fn hashv(vals: &[&[u8]]) -> Result<Hash, HasherError>;
42 fn zero_bytes() -> ZeroBytes;
43 fn zero_indexed_leaf() -> [u8; 32];
44}