public API
Hemera — the complete hash primitive for cyber/core.
One sponge. No compression mode. Structured capacity for tree binding.
pub struct Hasher { }
impl Hasher {
pub fn new() -> Self; pub fn new_keyed(key: &[u8; 64]) -> Self; pub fn update(&mut self, data: &[u8]) -> &mut Self;
pub fn finalize(&self) -> Hash; pub fn finalize_xof(&self) -> OutputReader; }
pub fn hash_leaf(data: &[u8], counter: u64, is_root: bool) -> Hash;
pub fn hash_node(left: &Hash, right: &Hash, is_root: bool) -> Hash;
pub fn hash_node_nmt(left: &Hash, right: &Hash, ns_min: u64, ns_max: u64, is_root: bool) -> Hash;
pub fn root_hash(data: &[u8]) -> Hash;
pub fn build_tree(data: &[u8]) -> TreeNode;
pub fn prove(data: &[u8], chunk_index: u64) -> (Hash, InclusionProof);
pub fn prove_range(data: &[u8], start: u64, end: u64) -> (Hash, InclusionProof);
pub fn verify_proof(chunk_data: &[u8], proof: &InclusionProof, root: &Hash) -> bool;
pub fn verify_node_proof(node_hash: &Hash, proof: &InclusionProof, root: &Hash) -> bool;
pub fn prove_batch(data: &[u8], indices: &[u64]) -> (Hash, BatchInclusionProof);
pub fn verify_batch(chunks: &[&[u8]], proof: &BatchInclusionProof) -> bool;
impl SparseTree {
pub fn new(depth: u32) -> Self;
pub fn new_default() -> Self; pub fn root(&self) -> Hash;
pub fn get(&self, key: &[u8; 32]) -> Option<&[u8]>;
pub fn len(&self) -> usize;
pub fn is_empty(&self) -> bool;
pub fn insert(&mut self, key: &[u8; 32], value: &[u8]) -> Hash;
pub fn delete(&mut self, key: &[u8; 32]) -> Hash;
pub fn prove(&self, key: &[u8; 32]) -> CompressedSparseProof;
pub fn verify(proof: &CompressedSparseProof, value: Option<&[u8]>,
root: &Hash, depth: u32) -> bool;
}
pub fn hash(data: &[u8]) -> Hash;
pub fn keyed_hash(key: &[u8; 64], data: &[u8]) -> Hash;
pub fn derive_key(context: &str, key_material: &[u8]) -> [u8; 64];
pub struct Hash([u8; 64]);