Add NIST test vectors.

This commit is contained in:
2019-07-08 11:13:39 -07:00
parent 52a9a56d38
commit e84f6a865e
4 changed files with 4214 additions and 4 deletions

View File

@@ -30,7 +30,8 @@ macro_rules! expand128 {
} }
impl AES128 { impl AES128 {
pub fn new(base_key: &[u8; 16]) -> AES128 { pub fn new(base_key: &[u8]) -> AES128 {
assert_eq!(base_key.len(), 16);
unsafe { unsafe {
let mut expanded_enc: [__m128i; 11] = uninitialized(); let mut expanded_enc: [__m128i; 11] = uninitialized();
let mut expanded_dec: [__m128i; 11] = uninitialized(); let mut expanded_dec: [__m128i; 11] = uninitialized();
@@ -122,6 +123,7 @@ fn unpack_m128(b: __m128i) -> (u64, u64)
#[cfg(test)] #[cfg(test)]
mod aes128 { mod aes128 {
use super::*; use super::*;
use testing::run_test;
#[test] #[test]
fn expansion() { fn expansion() {
@@ -180,6 +182,23 @@ mod aes128 {
0xd8,0xcd,0xb7,0x80,0x70,0xb4,0xc5,0x5a]); 0xd8,0xcd,0xb7,0x80,0x70,0xb4,0xc5,0x5a]);
assert_eq!(input2.to_vec(), aeskey2.decrypt(&cipher2)); assert_eq!(input2.to_vec(), aeskey2.decrypt(&cipher2));
} }
#[test]
fn nist_test_vectors() {
let fname = "testdata/aes/aes128.test";
run_test(fname.to_string(), 3, |case| {
let (negk, kbytes) = case.get("k").unwrap();
let (negp, pbytes) = case.get("p").unwrap();
let (negc, cbytes) = case.get("c").unwrap();
assert!(!negk && !negp && !negc);
let key = AES128::new(&kbytes);
let cipher = key.encrypt(&pbytes);
let plain = key.decrypt(&cipher);
assert_eq!(&cipher, cbytes);
assert_eq!(&plain, pbytes);
});
}
} }
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -206,7 +225,8 @@ macro_rules! expand256 {
} }
impl AES256 { impl AES256 {
pub fn new(base_key: &[u8; 32]) -> AES256 { pub fn new(base_key: &[u8]) -> AES256 {
assert_eq!(base_key.len(), 32);
unsafe { unsafe {
let mut expanded_enc: [__m128i; 15] = uninitialized(); let mut expanded_enc: [__m128i; 15] = uninitialized();
let mut expanded_dec: [__m128i; 15] = uninitialized(); let mut expanded_dec: [__m128i; 15] = uninitialized();
@@ -304,6 +324,7 @@ impl AES256 {
#[cfg(test)] #[cfg(test)]
mod aes256 { mod aes256 {
use super::*; use super::*;
use testing::run_test;
#[test] #[test]
fn expansion() { fn expansion() {
@@ -371,4 +392,21 @@ mod aes256 {
0xea,0xfc,0x49,0x90,0x4b,0x49,0x60,0x89]); 0xea,0xfc,0x49,0x90,0x4b,0x49,0x60,0x89]);
assert_eq!(input.to_vec(), aeskey.decrypt(&cipher)); assert_eq!(input.to_vec(), aeskey.decrypt(&cipher));
} }
#[test]
fn nist_test_vectors() {
let fname = "testdata/aes/aes256.test";
run_test(fname.to_string(), 3, |case| {
let (negk, kbytes) = case.get("k").unwrap();
let (negp, pbytes) = case.get("p").unwrap();
let (negc, cbytes) = case.get("c").unwrap();
assert!(!negk && !negp && !negc);
let key = AES256::new(&kbytes);
let cipher = key.encrypt(&pbytes);
let plain = key.decrypt(&cipher);
assert_eq!(&cipher, cbytes);
assert_eq!(&plain, pbytes);
});
}
} }

View File

@@ -385,10 +385,11 @@ struct AES128 {
} }
impl AES128 { impl AES128 {
pub fn new(base_key: &[u8; 16]) -> AES128 { pub fn new(base_key: &[u8]) -> AES128 {
let mut expanded = [0; AES128_STATE_WORDS]; let mut expanded = [0; AES128_STATE_WORDS];
let mut i = 0; let mut i = 0;
assert_eq!(base_key.len(), 16);
// while (i < Nk) // while (i < Nk)
// w[i] = word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]) // w[i] = word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3])
// i = i+1 // i = i+1
@@ -481,6 +482,7 @@ impl AES128 {
mod aes128 { mod aes128 {
use super::*; use super::*;
use super::aes256::RandomBlock; use super::aes256::RandomBlock;
use testing::run_test;
#[test] #[test]
fn fips197_key_expansion_example() { fn fips197_key_expansion_example() {
@@ -559,6 +561,23 @@ mod aes128 {
block2 == block.block.to_vec() block2 == block.block.to_vec()
} }
} }
#[test]
fn nist_test_vectors() {
let fname = "testdata/aes/aes128.test";
run_test(fname.to_string(), 3, |case| {
let (negk, kbytes) = case.get("k").unwrap();
let (negp, pbytes) = case.get("p").unwrap();
let (negc, cbytes) = case.get("c").unwrap();
assert!(!negk && !negp && !negc);
let key = AES128::new(&kbytes);
let cipher = key.encrypt(&pbytes);
let plain = key.decrypt(&cipher);
assert_eq!(&cipher, cbytes);
assert_eq!(&plain, pbytes);
});
}
} }
/**************************************************************************************************/ /**************************************************************************************************/
@@ -577,10 +596,11 @@ struct AES256 {
} }
impl AES256 { impl AES256 {
pub fn new(base_key: &[u8; 32]) -> AES256 { pub fn new(base_key: &[u8]) -> AES256 {
let mut expanded = [0; AES256_STATE_WORDS]; let mut expanded = [0; AES256_STATE_WORDS];
let mut i = 0; let mut i = 0;
assert_eq!(base_key.len(), 32);
// while (i < Nk) // while (i < Nk)
// w[i] = word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]) // w[i] = word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3])
// i = i+1 // i = i+1
@@ -677,6 +697,7 @@ impl AES256 {
mod aes256 { mod aes256 {
use quickcheck::{Arbitrary,Gen}; use quickcheck::{Arbitrary,Gen};
use super::*; use super::*;
use testing::run_test;
#[test] #[test]
fn fips197_key_expansion_example() { fn fips197_key_expansion_example() {
@@ -793,5 +814,22 @@ mod aes256 {
block2 == block.block.to_vec() block2 == block.block.to_vec()
} }
} }
#[test]
fn nist_test_vectors() {
let fname = "testdata/aes/aes256.test";
run_test(fname.to_string(), 3, |case| {
let (negk, kbytes) = case.get("k").unwrap();
let (negp, pbytes) = case.get("p").unwrap();
let (negc, cbytes) = case.get("c").unwrap();
assert!(!negk && !negp && !negc);
let key = AES256::new(&kbytes);
let cipher = key.encrypt(&pbytes);
let plain = key.decrypt(&cipher);
assert_eq!(&cipher, cbytes);
assert_eq!(&plain, pbytes);
});
}
} }

1704
testdata/aes/aes128.test vendored Normal file

File diff suppressed because it is too large Load Diff

2430
testdata/aes/aes256.test vendored Normal file

File diff suppressed because it is too large Load Diff