Skip to content

Commit 625f851

Browse files
authored
hkdf: migrate RFC 5869 tests to blobby (#164)
1 parent e3f2db2 commit 625f851

File tree

3 files changed

+38
-168
lines changed

3 files changed

+38
-168
lines changed

hkdf/tests/data/rfc5869_sha1.blb

632 Bytes
Binary file not shown.

hkdf/tests/data/rfc5869_sha256.blb

569 Bytes
Binary file not shown.

hkdf/tests/rfc5869.rs

Lines changed: 38 additions & 168 deletions
Original file line numberDiff line numberDiff line change
@@ -1,182 +1,52 @@
1-
use hex_literal::hex;
2-
use hkdf::{Hkdf, hmac::EagerHash};
3-
use sha1::Sha1;
4-
use sha2::Sha256;
1+
//! Test vectors from https://tools.ietf.org/html/rfc5869
2+
use hkdf::{GenericHkdf, HmacImpl};
3+
use hmac::{Hmac, SimpleHmac};
54

6-
struct Test<'a> {
7-
ikm: &'a [u8],
8-
salt: &'a [u8],
9-
info: &'a [u8],
10-
prk: &'a [u8],
11-
okm: &'a [u8],
5+
#[derive(Copy, Clone, Debug)]
6+
struct TestVector {
7+
ikm: &'static [u8],
8+
salt: &'static [u8],
9+
info: &'static [u8],
10+
prk: &'static [u8],
11+
okm: &'static [u8],
1212
}
1313

14-
fn rfc_test<H: EagerHash>(tests: &[Test]) {
14+
fn test<H: HmacImpl>(tvs: &[TestVector]) {
1515
let mut buf = [0u8; 128];
16-
for test in tests.iter() {
17-
let salt = if test.salt.is_empty() {
16+
for tv in tvs {
17+
let salt = if tv.salt.is_empty() {
1818
None
1919
} else {
20-
Some(test.salt)
20+
Some(tv.salt)
2121
};
22-
let (prk2, hkdf) = Hkdf::<H>::extract(salt, test.ikm);
23-
let okm = &mut buf[..test.okm.len()];
24-
assert!(hkdf.expand(test.info, okm).is_ok());
22+
let (prk2, hkdf) = GenericHkdf::<H>::extract(salt, tv.ikm);
23+
let okm_dst = &mut buf[..tv.okm.len()];
24+
assert!(hkdf.expand(tv.info, okm_dst).is_ok());
2525

26-
assert_eq!(prk2[..], test.prk[..]);
27-
assert_eq!(okm, test.okm);
26+
assert_eq!(prk2[..], tv.prk[..]);
27+
assert_eq!(okm_dst, tv.okm);
2828

29-
okm.fill(0);
30-
let hkdf = Hkdf::<H>::from_prk(test.prk).unwrap();
31-
assert!(hkdf.expand(test.info, okm).is_ok());
32-
assert_eq!(okm, test.okm);
29+
okm_dst.fill(0);
30+
let hkdf = GenericHkdf::<H>::from_prk(tv.prk).unwrap();
31+
assert!(hkdf.expand(tv.info, okm_dst).is_ok());
32+
assert_eq!(okm_dst, tv.okm);
3333
}
3434
}
3535

36-
// Test Vectors from https://tools.ietf.org/html/rfc5869.
37-
#[test]
38-
fn test_rfc5869_sha256() {
39-
rfc_test::<Sha256>(&[
40-
// Test Case 1
41-
Test {
42-
ikm: &hex!("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
43-
salt: &hex!("000102030405060708090a0b0c"),
44-
info: &hex!("f0f1f2f3f4f5f6f7f8f9"),
45-
prk: &hex!(
46-
"077709362c2e32df0ddc3f0dc47bba63"
47-
"90b6c73bb50f9c3122ec844ad7c2b3e5"
48-
),
49-
okm: &hex!(
50-
"3cb25f25faacd57a90434f64d0362f2a"
51-
"2d2d0a90cf1a5a4c5db02d56ecc4c5bf"
52-
"34007208d5b887185865"
53-
),
54-
},
55-
// Test Case 2
56-
Test {
57-
ikm: &hex!(
58-
"000102030405060708090a0b0c0d0e0f"
59-
"101112131415161718191a1b1c1d1e1f"
60-
"202122232425262728292a2b2c2d2e2f"
61-
"303132333435363738393a3b3c3d3e3f"
62-
"404142434445464748494a4b4c4d4e4f"
63-
),
64-
salt: &hex!(
65-
"606162636465666768696a6b6c6d6e6f"
66-
"707172737475767778797a7b7c7d7e7f"
67-
"808182838485868788898a8b8c8d8e8f"
68-
"909192939495969798999a9b9c9d9e9f"
69-
"a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
70-
),
71-
info: &hex!(
72-
"b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
73-
"c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
74-
"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
75-
"e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
76-
"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"
77-
),
78-
prk: &hex!(
79-
"06a6b88c5853361a06104c9ceb35b45c"
80-
"ef760014904671014a193f40c15fc244"
81-
),
82-
okm: &hex!(
83-
"b11e398dc80327a1c8e7f78c596a4934"
84-
"4f012eda2d4efad8a050cc4c19afa97c"
85-
"59045a99cac7827271cb41c65e590e09"
86-
"da3275600c2f09b8367793a9aca3db71"
87-
"cc30c58179ec3e87c14c01d5c1f3434f"
88-
"1d87"
89-
),
90-
},
91-
// Test Case 3
92-
Test {
93-
ikm: &hex!("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
94-
salt: &hex!(""),
95-
info: &hex!(""),
96-
prk: &hex!(
97-
"19ef24a32c717b167f33a91d6f648bdf"
98-
"96596776afdb6377ac434c1c293ccb04"
99-
),
100-
okm: &hex!(
101-
"8da4e775a563c18f715f802a063c5a31"
102-
"b8a11f5c5ee1879ec3454e5f3c738d2d"
103-
"9d201395faa4b61a96c8"
104-
),
105-
},
106-
]);
107-
}
36+
macro_rules! new_test {
37+
($name:ident, $hash:ty) => {
38+
#[test]
39+
fn $name() {
40+
blobby::parse_into_structs!(
41+
include_bytes!(concat!("data/", stringify!($name), ".blb"));
42+
static TEST_VECTORS: &[TestVector { ikm, salt, info, prk, okm }];
43+
);
10844

109-
#[test]
110-
fn test_rfc5869_sha1() {
111-
rfc_test::<Sha1>(&[
112-
// Test Case 4
113-
Test {
114-
ikm: &hex!("0b0b0b0b0b0b0b0b0b0b0b"),
115-
salt: &hex!("000102030405060708090a0b0c"),
116-
info: &hex!("f0f1f2f3f4f5f6f7f8f9"),
117-
prk: &hex!("9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243"),
118-
okm: &hex!(
119-
"085a01ea1b10f36933068b56efa5ad81"
120-
"a4f14b822f5b091568a9cdd4f155fda2"
121-
"c22e422478d305f3f896"
122-
),
123-
},
124-
// Test Case 5
125-
Test {
126-
ikm: &hex!(
127-
"000102030405060708090a0b0c0d0e0f"
128-
"101112131415161718191a1b1c1d1e1f"
129-
"202122232425262728292a2b2c2d2e2f"
130-
"303132333435363738393a3b3c3d3e3f"
131-
"404142434445464748494a4b4c4d4e4f"
132-
),
133-
salt: &hex!(
134-
"606162636465666768696a6b6c6d6e6f"
135-
"707172737475767778797a7b7c7d7e7f"
136-
"808182838485868788898a8b8c8d8e8f"
137-
"909192939495969798999a9b9c9d9e9f"
138-
"a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
139-
),
140-
info: &hex!(
141-
"b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
142-
"c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
143-
"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
144-
"e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
145-
"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"
146-
),
147-
prk: &hex!("8adae09a2a307059478d309b26c4115a224cfaf6"),
148-
okm: &hex!(
149-
"0bd770a74d1160f7c9f12cd5912a06eb"
150-
"ff6adcae899d92191fe4305673ba2ffe"
151-
"8fa3f1a4e5ad79f3f334b3b202b2173c"
152-
"486ea37ce3d397ed034c7f9dfeb15c5e"
153-
"927336d0441f4c4300e2cff0d0900b52"
154-
"d3b4"
155-
),
156-
},
157-
// Test Case 6
158-
Test {
159-
ikm: &hex!("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
160-
salt: &hex!(""),
161-
info: &hex!(""),
162-
prk: &hex!("da8c8a73c7fa77288ec6f5e7c297786aa0d32d01"),
163-
okm: &hex!(
164-
"0ac1af7002b3d761d1e55298da9d0506"
165-
"b9ae52057220a306e07b6b87e8df21d0"
166-
"ea00033de03984d34918"
167-
),
168-
},
169-
// Test Case 7
170-
Test {
171-
ikm: &hex!("0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c"),
172-
salt: &hex!(""), // "Not Provided"
173-
info: &hex!(""),
174-
prk: &hex!("2adccada18779e7c2077ad2eb19d3f3e731385dd"),
175-
okm: &hex!(
176-
"2c91117204d745f3500d636a62f64f0a"
177-
"b3bae548aa53d423b0d1f27ebba6f5e5"
178-
"673a081d70cce7acfc48"
179-
),
180-
},
181-
]);
45+
test::<Hmac<$hash>>(TEST_VECTORS);
46+
test::<SimpleHmac<$hash>>(TEST_VECTORS);
47+
}
48+
};
18249
}
50+
51+
new_test!(rfc5869_sha1, sha1::Sha1);
52+
new_test!(rfc5869_sha256, sha2::Sha256);

0 commit comments

Comments
 (0)