use sha2::{Digest, Sha256};
pub(in crate::db) fn new_hash_sha256() -> Sha256 {
Sha256::new()
}
pub(in crate::db) fn new_hash_sha256_prefixed(prefix: &[u8]) -> Sha256 {
let mut hasher = new_hash_sha256();
hasher.update(prefix);
hasher
}
pub(in crate::db) fn write_hash_tag_u8(hasher: &mut Sha256, tag: u8) {
hasher.update([tag]);
}
pub(in crate::db) fn write_hash_u32(hasher: &mut Sha256, value: u32) {
hasher.update(value.to_be_bytes());
}
pub(in crate::db) fn write_hash_u64(hasher: &mut Sha256, value: u64) {
hasher.update(value.to_be_bytes());
}
pub(in crate::db) fn write_hash_len_u32(hasher: &mut Sha256, len: usize) {
let len = u32::try_from(len).unwrap_or(u32::MAX);
write_hash_u32(hasher, len);
}
pub(in crate::db) fn write_hash_str_u32(hasher: &mut Sha256, value: &str) {
write_hash_len_u32(hasher, value.len());
hasher.update(value.as_bytes());
}
pub(in crate::db) fn finalize_hash_sha256(hasher: Sha256) -> [u8; 32] {
let digest = hasher.finalize();
let mut out = [0u8; 32];
out.copy_from_slice(&digest);
out
}