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 78 79 80 81 82 83 84 85 86
|
use tiny_keccak::{Hasher, KangarooTwelve};
fn pattern(len: usize) -> Vec<u8> {
(0..len).map(|j| (j % 251) as u8).collect()
}
fn test_kangaroo_twelve<A: AsRef<[u8]>, B: AsRef<[u8]>>(
custom_string: A,
message: B,
output_len: usize,
expected: &[u8],
) {
let mut kangaroo = KangarooTwelve::new(custom_string.as_ref());
kangaroo.update(message.as_ref());
let mut res = vec![0; output_len];
kangaroo.finalize(&mut res);
assert_eq!(&res[output_len - expected.len()..], expected);
}
#[test]
fn empty_kangaroo_twelve() {
let expected = b"\
\x1a\xc2\xd4\x50\xfc\x3b\x42\x05\xd1\x9d\xa7\xbf\xca\x1b\x37\x51\
\x3c\x08\x03\x57\x7a\xc7\x16\x7f\x06\xfe\x2c\xe1\xf0\xef\x39\xe5\
";
test_kangaroo_twelve("", "", 32, expected);
}
#[test]
fn kangaroo_twelve_long() {
let expected = b"\
\xe8\xdc\x56\x36\x42\xf7\x22\x8c\x84\x68\x4c\x89\x84\x05\xd3\xa8\
\x34\x79\x91\x58\xc0\x79\xb1\x28\x80\x27\x7a\x1d\x28\xe2\xff\x6d\
";
test_kangaroo_twelve("", "", 10032, expected);
}
#[test]
fn kangaroo_twelve_with_message() {
let expected = b"\
\x2b\xda\x92\x45\x0e\x8b\x14\x7f\x8a\x7c\xb6\x29\xe7\x84\xa0\x58\
\xef\xca\x7c\xf7\xd8\x21\x8e\x02\xd3\x45\xdf\xaa\x65\x24\x4a\x1f\
";
test_kangaroo_twelve("", pattern(1), 32, expected);
}
#[test]
fn kangaroo_twelve_with_message2() {
let expected = b"\
\x6b\xf7\x5f\xa2\x23\x91\x98\xdb\x47\x72\xe3\x64\x78\xf8\xe1\x9b\
\x0f\x37\x12\x05\xf6\xa9\xa9\x3a\x27\x3f\x51\xdf\x37\x12\x28\x88\
";
test_kangaroo_twelve("", pattern(17), 32, expected);
}
#[test]
fn kangaroo_twelve_with_custom_string() {
let expected = b"\
\xfa\xb6\x58\xdb\x63\xe9\x4a\x24\x61\x88\xbf\x7a\xf6\x9a\x13\x30\
\x45\xf4\x6e\xe9\x84\xc5\x6e\x3c\x33\x28\xca\xaf\x1a\xa1\xa5\x83\
";
test_kangaroo_twelve(pattern(1), "", 32, expected);
}
#[test]
fn kangaroo_twelve_with_custom_string_and_message() {
let expected = b"\
\xd8\x48\xc5\x06\x8c\xed\x73\x6f\x44\x62\x15\x9b\x98\x67\xfd\x4c\
\x20\xb8\x08\xac\xc3\xd5\xbc\x48\xe0\xb0\x6b\xa0\xa3\x76\x2e\xc4\
";
test_kangaroo_twelve(pattern(41), &[0xff], 32, expected);
}
#[test]
fn kangaroo_twelve_with_custom_string_and_message2() {
let expected = b"\
\x75\xd2\xf8\x6a\x2e\x64\x45\x66\x72\x6b\x4f\xbc\xfc\x56\x57\xb9\
\xdb\xcf\x07\x0c\x7b\x0d\xca\x06\x45\x0a\xb2\x91\xd7\x44\x3b\xcf\
";
test_kangaroo_twelve(
pattern(68921),
&[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],
32,
expected,
);
}
|