use hkdf::{Hkdf, InvalidLength};
use sha2::{Digest, Sha256};
use super::utils::EMPTY_BYTES;
pub fn hash(data: &[u8]) -> Vec<u8> {
let mut hasher = Sha256::new();
hasher.update(data);
(&hasher.finalize()).to_vec()
}
pub fn hkdf(password: &[u8]) -> Result<[u8; 32], InvalidLength> {
let h = Hkdf::<Sha256>::new(None, password);
let mut out = [0u8; 32];
match h.expand(&EMPTY_BYTES, &mut out) {
Ok(_) => Ok(out),
Err(e) => Err(e),
}
}
#[cfg(test)]
mod tests {
use super::hash;
use crate::v1::utils::hex_decode;
const TEST_DATA: &[u8] = "hello world".as_bytes();
const HASH: &str = "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9";
#[test]
fn sha256_hash() -> Result<(), String> {
let test_hash = match hex_decode(HASH) {
Ok(h) => h,
Err(_) => todo!(),
};
let h = hash(TEST_DATA);
assert_eq!(h, test_hash);
Ok(())
}
}