From e1b6a9accb0b4ae6385145f174e2b0013fded53c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Thu, 6 Nov 2025 03:28:56 +0300 Subject: [PATCH 1/5] hkdf: migrate Wycheproof tests to `blobby` v0.4 --- Cargo.lock | 4 +- hkdf/Cargo.toml | 2 +- ...ycheproof-sha1.blb => wycheproof_sha1.blb} | Bin ...proof-sha256.blb => wycheproof_sha256.blb} | Bin ...proof-sha384.blb => wycheproof_sha384.blb} | Bin ...proof-sha512.blb => wycheproof_sha512.blb} | Bin hkdf/tests/wycheproof.rs | 42 +++++++++++------- 7 files changed, 29 insertions(+), 19 deletions(-) rename hkdf/tests/data/{wycheproof-sha1.blb => wycheproof_sha1.blb} (100%) rename hkdf/tests/data/{wycheproof-sha256.blb => wycheproof_sha256.blb} (100%) rename hkdf/tests/data/{wycheproof-sha384.blb => wycheproof_sha384.blb} (100%) rename hkdf/tests/data/{wycheproof-sha512.blb => wycheproof_sha512.blb} (100%) diff --git a/Cargo.lock b/Cargo.lock index cc6ad66..bcee054 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,9 +48,9 @@ dependencies = [ [[package]] name = "blobby" -version = "0.4.0-pre.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a859067dcb257cb2ae028cb821399b55140b76fb8b2a360e052fe109019db43" +checksum = "89af0b093cc13baa4e51e64e65ec2422f7e73aea0e612e5ad3872986671622f1" [[package]] name = "block-buffer" diff --git a/hkdf/Cargo.toml b/hkdf/Cargo.toml index 7037943..2fe4eb7 100644 --- a/hkdf/Cargo.toml +++ b/hkdf/Cargo.toml @@ -16,7 +16,7 @@ rust-version = "1.85" hmac = "0.13.0-rc.3" [dev-dependencies] -blobby = "=0.4.0-pre.0" +blobby = "0.4" hex-literal = "1" sha1 = { version = "0.11.0-rc.3", default-features = false } sha2 = { version = "0.11.0-rc.3", default-features = false } diff --git a/hkdf/tests/data/wycheproof-sha1.blb b/hkdf/tests/data/wycheproof_sha1.blb similarity index 100% rename from hkdf/tests/data/wycheproof-sha1.blb rename to hkdf/tests/data/wycheproof_sha1.blb diff --git a/hkdf/tests/data/wycheproof-sha256.blb b/hkdf/tests/data/wycheproof_sha256.blb similarity index 100% rename from hkdf/tests/data/wycheproof-sha256.blb rename to hkdf/tests/data/wycheproof_sha256.blb diff --git a/hkdf/tests/data/wycheproof-sha384.blb b/hkdf/tests/data/wycheproof_sha384.blb similarity index 100% rename from hkdf/tests/data/wycheproof-sha384.blb rename to hkdf/tests/data/wycheproof_sha384.blb diff --git a/hkdf/tests/data/wycheproof-sha512.blb b/hkdf/tests/data/wycheproof_sha512.blb similarity index 100% rename from hkdf/tests/data/wycheproof-sha512.blb rename to hkdf/tests/data/wycheproof_sha512.blb diff --git a/hkdf/tests/wycheproof.rs b/hkdf/tests/wycheproof.rs index 45ede3b..9e1f43e 100644 --- a/hkdf/tests/wycheproof.rs +++ b/hkdf/tests/wycheproof.rs @@ -2,25 +2,31 @@ use blobby::Blob4Iterator; use hkdf::{GenericHkdf, HmacImpl}; use hmac::{Hmac, SimpleHmac}; -fn test(data: &[u8]) { - for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() { - let [ikm, salt, info, okm] = row.unwrap(); +struct TestVector { + ikm: &'static [u8], + salt: &'static [u8], + info: &'static [u8], + okm: &'static [u8], +} - let prk = GenericHkdf::::new(Some(salt), ikm); - let mut got_okm = vec![0; okm.len()]; +fn test(test_vectors: &[TestVector]) { + let mut buf = [0u8; 1024]; + for (i, tv) in test_vectors.iter().enumerate() { + let prk = GenericHkdf::::new(Some(tv.salt), tv.ikm); + let buf = &mut buf[..tv.okm.len()]; let mut err = None; - if prk.expand(info, &mut got_okm).is_err() { + if prk.expand(tv.info, &mut buf).is_err() { err = Some("prk expand"); } - if got_okm != okm { + if buf != tv.okm { err = Some("mismatch in okm"); } if let Some(err_desc) = err { panic!( "\n\ - Failed test №{i}: {err_desc}\n\ + Failed test #{i}: {err_desc}\n\ ikm:\t{ikm:?}\n\ salt:\t{salt:?}\n\ info:\t{info:?}\n\ @@ -31,17 +37,21 @@ fn test(data: &[u8]) { } macro_rules! new_test { - ($name:ident, $test_name:expr, $hash:ty) => { + ($name:ident, $hash:ty) => { #[test] fn $name() { - let data = include_bytes!(concat!("data/", $test_name, ".blb")); - test::>(data); - test::>(data); + blobby::parse_into_structs!( + include_bytes!(concat!("data/", stringify!($name), ".blb")); + static TEST_VECTORS: &[TestVector { ikm, salt, info, okm }]; + ); + + test::>(TEST_VECTORS); + test::>(TEST_VECTORS); } }; } -new_test!(wycheproof_sha1, "wycheproof-sha1", sha1::Sha1); -new_test!(wycheproof_sha256, "wycheproof-sha256", sha2::Sha256); -new_test!(wycheproof_sha384, "wycheproof-sha384", sha2::Sha384); -new_test!(wycheproof_sha512, "wycheproof-sha512", sha2::Sha512); +new_test!(wycheproof_sha1, sha1::Sha1); +new_test!(wycheproof_sha256, sha2::Sha256); +new_test!(wycheproof_sha384, sha2::Sha384); +new_test!(wycheproof_sha512, sha2::Sha512); From e646d50f9cfd8d8bab461886e89ba145bc2b4fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Thu, 6 Nov 2025 03:37:24 +0300 Subject: [PATCH 2/5] Fix code --- hkdf/tests/wycheproof.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/hkdf/tests/wycheproof.rs b/hkdf/tests/wycheproof.rs index 9e1f43e..fdac405 100644 --- a/hkdf/tests/wycheproof.rs +++ b/hkdf/tests/wycheproof.rs @@ -1,7 +1,7 @@ -use blobby::Blob4Iterator; use hkdf::{GenericHkdf, HmacImpl}; use hmac::{Hmac, SimpleHmac}; +#[derive(Copy, Clone, Debug)] struct TestVector { ikm: &'static [u8], salt: &'static [u8], @@ -10,13 +10,13 @@ struct TestVector { } fn test(test_vectors: &[TestVector]) { - let mut buf = [0u8; 1024]; + let mut buf = [0u8; 1 << 14]; for (i, tv) in test_vectors.iter().enumerate() { let prk = GenericHkdf::::new(Some(tv.salt), tv.ikm); let buf = &mut buf[..tv.okm.len()]; let mut err = None; - if prk.expand(tv.info, &mut buf).is_err() { + if prk.expand(tv.info, buf).is_err() { err = Some("prk expand"); } if buf != tv.okm { @@ -27,10 +27,7 @@ fn test(test_vectors: &[TestVector]) { panic!( "\n\ Failed test #{i}: {err_desc}\n\ - ikm:\t{ikm:?}\n\ - salt:\t{salt:?}\n\ - info:\t{info:?}\n\ - okm:\t{okm:?}\n" + test vector:\t{tv:#?}\n" ); } } From 394fd02cb788c9c12bf7f19154535943d0b2b7e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Thu, 6 Nov 2025 03:37:31 +0300 Subject: [PATCH 3/5] update files --- hkdf/tests/data/wycheproof_sha1.blb | Bin 23773 -> 23775 bytes hkdf/tests/data/wycheproof_sha256.blb | Bin 33115 -> 33117 bytes hkdf/tests/data/wycheproof_sha384.blb | Bin 45304 -> 45306 bytes hkdf/tests/data/wycheproof_sha512.blb | Bin 57877 -> 57879 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/hkdf/tests/data/wycheproof_sha1.blb b/hkdf/tests/data/wycheproof_sha1.blb index cb7dd3c4bc63e990d486978c0429c45a5688c833..865cbeeb73d666af68abcf01711cdf1edf2d7d62 100644 GIT binary patch delta 12 Tcmcb+lkxseMy4j24R>PzCpQJU delta 10 Rcmcb=lkx6O#*IvOV*nnH1swnY diff --git a/hkdf/tests/data/wycheproof_sha256.blb b/hkdf/tests/data/wycheproof_sha256.blb index 6213609a3b250eab8c9db13df65d8d7ee3faceee..a0aff09587d9c88147936fe9a105cd1abfcaeac6 100644 GIT binary patch delta 12 TcmccJ#B{fbiK$6qLv$kmA{qqg delta 10 RcmccH#B{rfX(Ll~BLEs=1W*6~ diff --git a/hkdf/tests/data/wycheproof_sha384.blb b/hkdf/tests/data/wycheproof_sha384.blb index 2323055a47dcdaa81555d7dc70578b17e48025a6..fde51437598a3fa376181a23903284ccc11c0cb8 100644 GIT binary patch delta 12 UcmezIkm=V$CZ;By4L>#j04%` Date: Thu, 6 Nov 2025 03:41:26 +0300 Subject: [PATCH 4/5] rename variable --- hkdf/tests/wycheproof.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hkdf/tests/wycheproof.rs b/hkdf/tests/wycheproof.rs index fdac405..2dc81e0 100644 --- a/hkdf/tests/wycheproof.rs +++ b/hkdf/tests/wycheproof.rs @@ -13,13 +13,13 @@ fn test(test_vectors: &[TestVector]) { let mut buf = [0u8; 1 << 14]; for (i, tv) in test_vectors.iter().enumerate() { let prk = GenericHkdf::::new(Some(tv.salt), tv.ikm); - let buf = &mut buf[..tv.okm.len()]; + let okm_dst = &mut buf[..tv.okm.len()]; let mut err = None; - if prk.expand(tv.info, buf).is_err() { + if prk.expand(tv.info, okm_dst).is_err() { err = Some("prk expand"); } - if buf != tv.okm { + if okm_dst != tv.okm { err = Some("mismatch in okm"); } From ff98a2a3da06cb04c30b79093c366c2d9f6a2db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Thu, 6 Nov 2025 03:42:12 +0300 Subject: [PATCH 5/5] tweak panic message --- hkdf/tests/wycheproof.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/hkdf/tests/wycheproof.rs b/hkdf/tests/wycheproof.rs index 2dc81e0..48ed436 100644 --- a/hkdf/tests/wycheproof.rs +++ b/hkdf/tests/wycheproof.rs @@ -24,11 +24,7 @@ fn test(test_vectors: &[TestVector]) { } if let Some(err_desc) = err { - panic!( - "\n\ - Failed test #{i}: {err_desc}\n\ - test vector:\t{tv:#?}\n" - ); + panic!("Failed test #{i}: {err_desc}\nTest vector:\t{tv:#?}"); } } }