liboxyd 0.1.4

Coldwire's cryptographic library
Documentation
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(())
    }
}