const DOMAIN_LEAF: u8 = 0x00;
const DOMAIN_PARENT: u8 = 0x01;
const DOMAIN_ROOT: u8 = 0x02;
pub fn hash_leaf(data: &[u8]) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(&[DOMAIN_LEAF]);
hasher.update(data);
*hasher.finalize().as_bytes()
}
pub fn hash_parent(children: &[[u8; 32]]) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(&[DOMAIN_PARENT]);
for child in children {
hasher.update(child);
}
*hasher.finalize().as_bytes()
}
pub fn hash_root(roots: &[[u8; 32]], length: u64) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(&[DOMAIN_ROOT]);
for root in roots {
hasher.update(root);
}
hasher.update(&length.to_le_bytes());
*hasher.finalize().as_bytes()
}