#![cfg(all(any(blake2b, blake2s), feature = "mac"))] use digest::{KeyInit, Mac}; #[test] #[cfg(blake2b)] fn test_blake2b_mac_512() { use wolfssl_wolfcrypt::blake2::BLAKE2b; use wolfssl_wolfcrypt::blake2_mac::Blake2bMac512; let key = [0x42u8; 64]; let input = b"The quick brown fox jumps over the lazy dog"; let mut reference = BLAKE2b::new_with_key(64, &key) .expect("Error with new_with_key()"); reference.update(input).expect("Error with update()"); let mut expected = [0u8; 64]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2bMac512::new_from_slice(&key) .expect("Blake2bMac512 init failed"); mac.update(input); let tag = mac.finalize(); assert_eq!(tag.into_bytes().as_slice(), &expected); } #[test] #[cfg(blake2b)] fn test_blake2b_mac_256() { use wolfssl_wolfcrypt::blake2::BLAKE2b; use wolfssl_wolfcrypt::blake2_mac::Blake2bMac256; let key = [0x33u8; 64]; let input = b"libsodium crypto_generichash analog"; let mut reference = BLAKE2b::new_with_key(32, &key) .expect("Error with new_with_key()"); reference.update(input).expect("Error with update()"); let mut expected = [0u8; 32]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2bMac256::new_from_slice(&key) .expect("Blake2bMac256 init failed"); mac.update(input); let tag = mac.finalize(); assert_eq!(tag.into_bytes().as_slice(), &expected); } #[test] #[cfg(blake2b)] fn test_blake2b_mac_384() { use wolfssl_wolfcrypt::blake2::BLAKE2b; use wolfssl_wolfcrypt::blake2_mac::Blake2bMac384; let key = [0x77u8; 64]; let input = b"sha-384 sized blake2b mac"; let mut reference = BLAKE2b::new_with_key(48, &key) .expect("Error with new_with_key()"); reference.update(input).expect("Error with update()"); let mut expected = [0u8; 48]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2bMac384::new_from_slice(&key) .expect("Blake2bMac384 init failed"); mac.update(input); let tag = mac.finalize(); assert_eq!(tag.into_bytes().as_slice(), &expected); } #[test] #[cfg(blake2b)] fn test_blake2b_mac_512_chunked() { use wolfssl_wolfcrypt::blake2::BLAKE2b; use wolfssl_wolfcrypt::blake2_mac::Blake2bMac512; let key = [0xA5u8; 64]; let input: Vec = (0u8..200).collect(); let mut reference = BLAKE2b::new_with_key(64, &key) .expect("Error with new_with_key()"); reference.update(&input).expect("Error with update()"); let mut expected = [0u8; 64]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2bMac512::new_from_slice(&key) .expect("Blake2bMac512 init failed"); for chunk in input.chunks(17) { mac.update(chunk); } mac.verify_slice(&expected) .expect("Blake2bMac512 verify failed"); } #[test] #[cfg(blake2s)] fn test_blake2s_mac_128() { use wolfssl_wolfcrypt::blake2::BLAKE2s; use wolfssl_wolfcrypt::blake2_mac::Blake2sMac128; let key = [0x55u8; 32]; let input = b"short blake2s mac"; let mut reference = BLAKE2s::new_with_key(16, &key) .expect("Error with new_with_key()"); reference.update(input).expect("Error with update()"); let mut expected = [0u8; 16]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2sMac128::new_from_slice(&key) .expect("Blake2sMac128 init failed"); mac.update(input); let tag = mac.finalize(); assert_eq!(tag.into_bytes().as_slice(), &expected); } #[test] #[cfg(blake2s)] fn test_blake2s_mac_192() { use wolfssl_wolfcrypt::blake2::BLAKE2s; use wolfssl_wolfcrypt::blake2_mac::Blake2sMac192; let key = [0x99u8; 32]; let input = b"medium blake2s mac"; let mut reference = BLAKE2s::new_with_key(24, &key) .expect("Error with new_with_key()"); reference.update(input).expect("Error with update()"); let mut expected = [0u8; 24]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2sMac192::new_from_slice(&key) .expect("Blake2sMac192 init failed"); mac.update(input); let tag = mac.finalize(); assert_eq!(tag.into_bytes().as_slice(), &expected); } #[test] #[cfg(blake2s)] fn test_blake2s_mac_256() { use wolfssl_wolfcrypt::blake2::BLAKE2s; use wolfssl_wolfcrypt::blake2_mac::Blake2sMac256; let key = [0x42u8; 32]; let input = b"The quick brown fox jumps over the lazy dog"; let mut reference = BLAKE2s::new_with_key(32, &key) .expect("Error with new_with_key()"); reference.update(input).expect("Error with update()"); let mut expected = [0u8; 32]; reference.finalize(&mut expected) .expect("Error with finalize()"); let mut mac = Blake2sMac256::new_from_slice(&key) .expect("Blake2sMac256 init failed"); mac.update(input); let tag = mac.finalize(); assert_eq!(tag.into_bytes().as_slice(), &expected); } #[test] #[cfg(blake2s)] fn test_blake2s_mac_256_verify_fail() { use wolfssl_wolfcrypt::blake2_mac::Blake2sMac256; let key = [0x0Bu8; 32]; let input = b"hello"; let wrong_tag = [0u8; 32]; let mut mac = Blake2sMac256::new_from_slice(&key) .expect("Blake2sMac256 init failed"); mac.update(input); assert!(mac.verify_slice(&wrong_tag).is_err()); }