Skip to content

Commit e3f2db2

Browse files
authored
hkdf: migrate Wycheproof tests to blobby v0.4 (#163)
1 parent 536e82a commit e3f2db2

File tree

7 files changed

+30
-27
lines changed

7 files changed

+30
-27
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

hkdf/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ rust-version = "1.85"
1616
hmac = "0.13.0-rc.3"
1717

1818
[dev-dependencies]
19-
blobby = "=0.4.0-pre.0"
19+
blobby = "0.4"
2020
hex-literal = "1"
2121
sha1 = { version = "0.11.0-rc.3", default-features = false }
2222
sha2 = { version = "0.11.0-rc.3", default-features = false }
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

hkdf/tests/wycheproof.rs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,50 @@
1-
use blobby::Blob4Iterator;
21
use hkdf::{GenericHkdf, HmacImpl};
32
use hmac::{Hmac, SimpleHmac};
43

5-
fn test<H: HmacImpl>(data: &[u8]) {
6-
for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() {
7-
let [ikm, salt, info, okm] = row.unwrap();
4+
#[derive(Copy, Clone, Debug)]
5+
struct TestVector {
6+
ikm: &'static [u8],
7+
salt: &'static [u8],
8+
info: &'static [u8],
9+
okm: &'static [u8],
10+
}
811

9-
let prk = GenericHkdf::<H>::new(Some(salt), ikm);
10-
let mut got_okm = vec![0; okm.len()];
12+
fn test<H: HmacImpl>(test_vectors: &[TestVector]) {
13+
let mut buf = [0u8; 1 << 14];
14+
for (i, tv) in test_vectors.iter().enumerate() {
15+
let prk = GenericHkdf::<H>::new(Some(tv.salt), tv.ikm);
16+
let okm_dst = &mut buf[..tv.okm.len()];
1117

1218
let mut err = None;
13-
if prk.expand(info, &mut got_okm).is_err() {
19+
if prk.expand(tv.info, okm_dst).is_err() {
1420
err = Some("prk expand");
1521
}
16-
if got_okm != okm {
22+
if okm_dst != tv.okm {
1723
err = Some("mismatch in okm");
1824
}
1925

2026
if let Some(err_desc) = err {
21-
panic!(
22-
"\n\
23-
Failed test №{i}: {err_desc}\n\
24-
ikm:\t{ikm:?}\n\
25-
salt:\t{salt:?}\n\
26-
info:\t{info:?}\n\
27-
okm:\t{okm:?}\n"
28-
);
27+
panic!("Failed test #{i}: {err_desc}\nTest vector:\t{tv:#?}");
2928
}
3029
}
3130
}
3231

3332
macro_rules! new_test {
34-
($name:ident, $test_name:expr, $hash:ty) => {
33+
($name:ident, $hash:ty) => {
3534
#[test]
3635
fn $name() {
37-
let data = include_bytes!(concat!("data/", $test_name, ".blb"));
38-
test::<Hmac<$hash>>(data);
39-
test::<SimpleHmac<$hash>>(data);
36+
blobby::parse_into_structs!(
37+
include_bytes!(concat!("data/", stringify!($name), ".blb"));
38+
static TEST_VECTORS: &[TestVector { ikm, salt, info, okm }];
39+
);
40+
41+
test::<Hmac<$hash>>(TEST_VECTORS);
42+
test::<SimpleHmac<$hash>>(TEST_VECTORS);
4043
}
4144
};
4245
}
4346

44-
new_test!(wycheproof_sha1, "wycheproof-sha1", sha1::Sha1);
45-
new_test!(wycheproof_sha256, "wycheproof-sha256", sha2::Sha256);
46-
new_test!(wycheproof_sha384, "wycheproof-sha384", sha2::Sha384);
47-
new_test!(wycheproof_sha512, "wycheproof-sha512", sha2::Sha512);
47+
new_test!(wycheproof_sha1, sha1::Sha1);
48+
new_test!(wycheproof_sha256, sha2::Sha256);
49+
new_test!(wycheproof_sha384, sha2::Sha384);
50+
new_test!(wycheproof_sha512, sha2::Sha512);

0 commit comments

Comments
 (0)