diff --git a/aead/src/dev.rs b/aead/src/dev.rs index f216b72c..65eecdd8 100644 --- a/aead/src/dev.rs +++ b/aead/src/dev.rs @@ -78,39 +78,64 @@ pub fn run_fail_test( } } -/// Define AEAD test +/// Define AEAD test for passing test vectors #[macro_export] -macro_rules! new_test { +macro_rules! new_pass_test { ($name:ident, $test_name:expr, $cipher:ty $(,)?) => { #[test] fn $name() { use $crate::KeyInit; - use $crate::dev::blobby::Blob6Iterator; + use $crate::dev::blobby::Blob5Iterator; let data = include_bytes!(concat!("data/", $test_name, ".blb")); - for (i, row) in Blob6Iterator::new(data).unwrap().enumerate() { - let [key, nonce, aad, pt, ct, status] = row.unwrap(); + for (i, row) in Blob5Iterator::new(data).unwrap().enumerate() { + let [key, nonce, aad, pt, ct] = row.unwrap(); let key = key.try_into().expect("wrong key size"); let nonce = nonce.try_into().expect("wrong nonce size"); let cipher = <$cipher as KeyInit>::new(key); - - let res = match status { - [0] => $crate::dev::run_fail_test(&cipher, nonce, aad, ct), - [1] => $crate::dev::run_pass_test(&cipher, nonce, aad, pt, ct), - _ => panic!("invalid value for pass flag"), - }; - let mut pass = status[0] == 1; + let res = $crate::dev::run_pass_test(&cipher, nonce, aad, pt, ct); if let Err(reason) = res { panic!( "\n\ - Failed test #{i}\n\ + Failed (pass) test #{i}\n\ reason:\t{reason:?}\n\ key:\t{key:?}\n\ nonce:\t{nonce:?}\n\ aad:\t{aad:?}\n\ plaintext:\t{pt:?}\n\ - ciphertext:\t{ct:?}\n\ - pass:\t{pass}\n" + ciphertext:\t{ct:?}\n" + ); + } + } + } + }; +} + +/// Define AEAD test for failing test vectors +#[macro_export] +macro_rules! new_fail_test { + ($name:ident, $test_name:expr, $cipher:ty $(,)?) => { + #[test] + fn $name() { + use $crate::KeyInit; + use $crate::dev::blobby::Blob4Iterator; + + let data = include_bytes!(concat!("data/", $test_name, ".blb")); + for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() { + let [key, nonce, aad, ct] = row.unwrap(); + let key = key.try_into().expect("wrong key size"); + let nonce = nonce.try_into().expect("wrong nonce size"); + let cipher = <$cipher as KeyInit>::new(key); + let res = $crate::dev::run_fail_test(&cipher, nonce, aad, ct); + if let Err(reason) = res { + panic!( + "\n\ + Failed (fail) test #{i}\n\ + reason:\t{reason:?}\n\ + key:\t{key:?}\n\ + nonce:\t{nonce:?}\n\ + aad:\t{aad:?}\n\ + ciphertext:\t{ct:?}\n" ); } } diff --git a/aead/tests/data/postfix.blb b/aead/tests/data/postfix.blb deleted file mode 100644 index 97d850e1..00000000 Binary files a/aead/tests/data/postfix.blb and /dev/null differ diff --git a/aead/tests/data/postfix_fail.blb b/aead/tests/data/postfix_fail.blb new file mode 100644 index 00000000..a9d49c92 Binary files /dev/null and b/aead/tests/data/postfix_fail.blb differ diff --git a/aead/tests/data/postfix_pass.blb b/aead/tests/data/postfix_pass.blb new file mode 100644 index 00000000..ee15f16c Binary files /dev/null and b/aead/tests/data/postfix_pass.blb differ diff --git a/aead/tests/data/prefix.blb b/aead/tests/data/prefix.blb deleted file mode 100644 index 8a5929ee..00000000 Binary files a/aead/tests/data/prefix.blb and /dev/null differ diff --git a/aead/tests/data/prefix_fail.blb b/aead/tests/data/prefix_fail.blb new file mode 100644 index 00000000..33f35374 Binary files /dev/null and b/aead/tests/data/prefix_fail.blb differ diff --git a/aead/tests/data/prefix_pass.blb b/aead/tests/data/prefix_pass.blb new file mode 100644 index 00000000..bd5b2532 Binary files /dev/null and b/aead/tests/data/prefix_pass.blb differ diff --git a/aead/tests/dummy.rs b/aead/tests/dummy.rs index 817ab945..3e00ee39 100644 --- a/aead/tests/dummy.rs +++ b/aead/tests/dummy.rs @@ -170,6 +170,11 @@ impl AeadInOut for PostfixDummyAead { } #[cfg(feature = "dev")] -aead::new_test!(dummy_prefix, "prefix", PrefixDummyAead); -#[cfg(feature = "dev")] -aead::new_test!(dummy_postfix, "postfix", PostfixDummyAead); +mod tests { + use super::{PostfixDummyAead, PrefixDummyAead}; + + aead::new_pass_test!(dummy_prefix_pass, "prefix_pass", PrefixDummyAead); + aead::new_fail_test!(dummy_prefix_fail, "prefix_fail", PrefixDummyAead); + aead::new_pass_test!(dummy_postfix_pass, "postfix_pass", PostfixDummyAead); + aead::new_fail_test!(dummy_postfix_fail, "postfix_fail", PostfixDummyAead); +}