mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-05 21:00:48 +02:00
182 lines
5.4 KiB
Rust
182 lines
5.4 KiB
Rust
#![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<u8> = (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());
|
|
}
|