1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
use cipher::{generic_array::GenericArray, BlockDecrypt, BlockEncrypt, KeyInit};
use hex_literal::hex;
use twofish::Twofish;
macro_rules! new_test {
(
$name:ident, $key_len:expr,
$r1:expr, $r2:expr, $r3:expr,
$r4:expr, $r5:expr, $r48:expr,
) => {
#[test]
fn $name() {
let mut key = [0u8; $key_len];
let mut plain = GenericArray::default();
let mut cipher;
for i in 1..50 {
let twofish = Twofish::new_from_slice(&key).unwrap();
let mut buf = plain.clone();
twofish.encrypt_block(&mut buf);
cipher = buf.clone();
twofish.decrypt_block(&mut buf);
assert_eq!(plain, buf);
let correct = match i {
1 => Some(hex!($r1)),
2 => Some(hex!($r2)),
3 => Some(hex!($r3)),
4 => Some(hex!($r4)),
5 => Some(hex!($r5)),
48 => Some(hex!($r48)),
_ => None,
};
correct.map(|v| assert_eq!(&cipher[..], v, "i = {}", i));
let (l, r) = key.split_at_mut(16);
r.copy_from_slice(&l[..$key_len - 16]);
l.copy_from_slice(&plain);
plain = cipher;
}
}
};
}
new_test!(
twofish_128bit_key,
16,
"9F589F5CF6122C32B6BFEC2F2AE8C35A",
"D491DB16E7B1C39E86CB086B789F5419",
"019F9809DE1711858FAAC3A3BA20FBC3",
"6363977DE839486297E661C6C9D668EB",
"816D5BD0FAE35342BF2A7412C246F752",
"6B459286F3FFD28D49F15B1581B08E42",
);
new_test!(
twofish_192bit_key,
24,
"EFA71F788965BD4453F860178FC19101",
"88B2B2706B105E36B446BB6D731A1E88",
"39DA69D6BA4997D585B6DC073CA341B2",
"182B02D81497EA45F9DAACDC29193A65",
"7AFF7A70CA2FF28AC31DD8AE5DAAAB63",
"F0AB73301125FA21EF70BE5385FB76B6",
);
new_test!(
twofish_256bit_key,
32,
"57FF739D4DC92C1BD7FC01700CC8216F",
"D43BB7556EA32E46F2A282B7D45B4E0D",
"90AFE91BB288544F2C32DC239B2635E6",
"6CB4561C40BF0A9705931CB6D408E7FA",
"3059D6D61753B958D92F4781C8640E58",
"431058F4DBC7F734DA4F02F04CC4F459",
);
|