use sha2::{Digest, Sha256, Sha512};
#[allow(clippy::module_name_repetitions)]
pub type Sha256Digest = [u64; 4];
#[allow(clippy::module_name_repetitions)]
pub type Sha512Digest = [u64; 8];
pub fn sha256(data: impl AsRef<[u8]>) -> Sha256Digest {
let mut hasher = Sha256::new();
hasher.update(data);
let hash_arr: [u8; 32] = hasher.finalize().try_into().unwrap();
let hash_1 = u64::from_le_bytes(hash_arr[..8].try_into().unwrap());
let hash_2 = u64::from_le_bytes(hash_arr[8..16].try_into().unwrap());
let hash_3 = u64::from_le_bytes(hash_arr[16..24].try_into().unwrap());
let hash_4 = u64::from_le_bytes(hash_arr[24..].try_into().unwrap());
[hash_1, hash_2, hash_3, hash_4]
}
pub fn sha512(data: impl AsRef<[u8]>) -> Sha512Digest {
let mut hasher = Sha512::new();
hasher.update(data);
let hash_arr: [u8; 64] = hasher.finalize().try_into().unwrap();
let hash_1 = u64::from_le_bytes(hash_arr[..8].try_into().unwrap());
let hash_2 = u64::from_le_bytes(hash_arr[8..16].try_into().unwrap());
let hash_3 = u64::from_le_bytes(hash_arr[16..24].try_into().unwrap());
let hash_4 = u64::from_le_bytes(hash_arr[24..32].try_into().unwrap());
let hash_5 = u64::from_le_bytes(hash_arr[32..40].try_into().unwrap());
let hash_6 = u64::from_le_bytes(hash_arr[40..48].try_into().unwrap());
let hash_7 = u64::from_le_bytes(hash_arr[48..56].try_into().unwrap());
let hash_8 = u64::from_le_bytes(hash_arr[56..].try_into().unwrap());
[
hash_1, hash_2, hash_3, hash_4, hash_5, hash_6, hash_7, hash_8,
]
}