test-foo-bar-sha2 0.0.8

Formally verified SHA2 hash library
Documentation
use test_foo_bar_traits::Digest as _;

// XXX: The tests in here are failing in wasm for some reason.

// #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn sha256_kat_streaming() {
    let mut digest = test_foo_bar_sha2::Sha256::new();
    let mut d = [0u8; 32];
    digest.update(b"libcrux sha2 256 tests");
    digest.finish(&mut d);

    let expected = "8683520e19e5b33db33c8fb90918c0c96fcdfd9a17c695ce0f0ea2eaa0c95956";
    assert_eq!(hex::encode(d), expected);
}

// #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn sha256_kat_oneshot() {
    let d = test_foo_bar_sha2::sha256(b"libcrux sha2 256 tests");

    let expected = "8683520e19e5b33db33c8fb90918c0c96fcdfd9a17c695ce0f0ea2eaa0c95956";
    assert_eq!(hex::encode(d), expected);
}

#[test]
fn shaclone() {
    let mut hasher_224 = test_foo_bar_sha2::Sha224::new();
    hasher_224.update(b"test 224");
    let mut hasher224_2 = hasher_224.clone();
    hasher_224.update(b"more 224");
    hasher224_2.update(b"more 224");
    let mut digest = [0u8; 28];
    let mut digest_2 = [0u8; 28];
    hasher_224.finish(&mut digest);
    hasher224_2.finish(&mut digest_2);

    assert_eq!(digest, digest_2);
    assert_eq!(digest, test_foo_bar_sha2::sha224(b"test 224more 224"));

    let mut hasher_256 = test_foo_bar_sha2::Sha256::new();
    hasher_256.update(b"test 256");
    let mut hasher256_2 = hasher_256.clone();
    hasher_256.update(b"more 256");
    hasher256_2.update(b"more 256");
    let mut digest = [0u8; 32];
    let mut digest_2 = [0u8; 32];
    hasher_256.finish(&mut digest);
    hasher256_2.finish(&mut digest_2);

    assert_eq!(digest, digest_2);
    assert_eq!(digest, test_foo_bar_sha2::sha256(b"test 256more 256"));

    let mut hasher_384 = test_foo_bar_sha2::Sha384::new();
    hasher_384.update(b"test 384");
    let mut hasher384_2 = hasher_384.clone();
    hasher_384.update(b"more 384");
    hasher384_2.update(b"more 384");
    let mut digest = [0u8; 48];
    let mut digest_2 = [0u8; 48];
    hasher_384.finish(&mut digest);
    hasher384_2.finish(&mut digest_2);

    assert_eq!(digest, digest_2);
    assert_eq!(digest, test_foo_bar_sha2::sha384(b"test 384more 384"));

    let mut hasher_512 = test_foo_bar_sha2::Sha512::new();
    hasher_512.update(b"test 512");
    let mut hasher512_2 = hasher_512.clone();
    hasher_512.update(b"more 512");
    hasher512_2.update(b"more 512");
    let mut digest = [0u8; 64];
    let mut digest_2 = [0u8; 64];
    hasher_512.finish(&mut digest);
    hasher512_2.finish(&mut digest_2);

    assert_eq!(digest, digest_2);
    assert_eq!(digest, test_foo_bar_sha2::sha512(b"test 512more 512"));
}

// test the incremental digest functionality provided by the `test_foo_bar_traits` crate
#[test]
fn test_digest_traits() {
    let expected = "8683520e19e5b33db33c8fb90918c0c96fcdfd9a17c695ce0f0ea2eaa0c95956";

    // incremental API
    let mut hasher = test_foo_bar_sha2::Sha256Hasher::new();
    hasher.update(b"libcrux sha2 256 tests").unwrap();
    let mut d = [0u8; 32];
    hasher.finish(&mut d);

    assert_eq!(hex::encode(d), expected);
}

#[test]
fn traits_generic_tests() {
    test_foo_bar_traits::digest::tests::simple::<28, test_foo_bar_sha2::Sha224Hash>();
    test_foo_bar_traits::digest::tests::simple::<32, test_foo_bar_sha2::Sha256Hash>();
    test_foo_bar_traits::digest::tests::simple::<48, test_foo_bar_sha2::Sha384Hash>();
    test_foo_bar_traits::digest::tests::simple::<64, test_foo_bar_sha2::Sha512Hash>();
}