use blake2::{
digest::{Update, VariableOutput},
Blake2bVar,
};
use sha2::{Digest, Sha256};
pub const DIGEST_LENGTH: usize = 32;
pub fn blake2b<T: AsRef<[u8]>>(data: T) -> [u8; DIGEST_LENGTH] {
let mut result = [0; DIGEST_LENGTH];
let mut hasher = Blake2bVar::new(DIGEST_LENGTH).expect("should create hasher");
hasher.update(data.as_ref());
hasher.finalize_variable(&mut result).ok();
result
}
pub fn blake3<T: AsRef<[u8]>>(data: T) -> [u8; DIGEST_LENGTH] {
let mut result = [0; DIGEST_LENGTH];
let mut hasher = blake3::Hasher::new();
hasher.update(data.as_ref());
let hash = hasher.finalize();
let hash_bytes: &[u8; DIGEST_LENGTH] = hash.as_bytes();
result.copy_from_slice(hash_bytes);
result
}
pub fn sha256<T: AsRef<[u8]>>(data: T) -> [u8; DIGEST_LENGTH] {
Sha256::digest(data).into()
}