From 30e98dad3ff4c854f86308b097e6f4eacc070717 Mon Sep 17 00:00:00 2001 From: Jonas Schneider-Bensch Date: Thu, 31 Oct 2024 16:52:17 +0100 Subject: [PATCH] ACVP uninlined inner functions --- libcrux-ml-dsa/tests/acvp.rs | 268 ++++++++++++++++++++--------------- 1 file changed, 150 insertions(+), 118 deletions(-) diff --git a/libcrux-ml-dsa/tests/acvp.rs b/libcrux-ml-dsa/tests/acvp.rs index ebdc2ce9f..75f0c1ddf 100644 --- a/libcrux-ml-dsa/tests/acvp.rs +++ b/libcrux-ml-dsa/tests/acvp.rs @@ -63,8 +63,6 @@ struct ResultPromptTestGroup { #[test] fn keygen() { - use libcrux_ml_dsa::*; - let prompts: Prompts = read("keygen", "prompt.json"); assert!(prompts.algorithm == "ML-DSA"); assert!(prompts.revision == "FIPS204"); @@ -83,37 +81,50 @@ fn keygen() { eprintln!("{parameter_set}"); for test in kat.tests { - eprintln!(" {}", test.tcId); - fn check( - keys: MLDSAKeyPair, - result: &KeyGenResult, - ) { - assert_eq!(result.pk, keys.verification_key.as_slice()); - assert_eq!(result.sk, keys.signing_key.as_slice()); - } - - let expected_result = results - .testGroups - .iter() - .find(|tg| tg.tgId == kat.tgId) - .unwrap() - .tests - .iter() - .find(|t| t.tcId == test.tcId) - .unwrap(); - - match parameter_set.as_str() { - "ML-DSA-44" => check(ml_dsa_44::generate_key_pair(test.seed), expected_result), - - "ML-DSA-65" => check(ml_dsa_65::generate_key_pair(test.seed), expected_result), - - "ML-DSA-87" => check(ml_dsa_87::generate_key_pair(test.seed), expected_result), - _ => unimplemented!(), - } + keygen_inner(test, &results, kat.tgId, ¶meter_set); } } } +#[inline(never)] +#[allow(non_snake_case)] +fn keygen_inner( + test: KeyGenPrompt, + results: &Results, + tgId: usize, + parameter_set: &String, +) { + use libcrux_ml_dsa::*; + eprintln!(" {}", test.tcId); + #[inline(never)] + fn check( + keys: MLDSAKeyPair, + result: &KeyGenResult, + ) { + assert_eq!(result.pk, keys.verification_key.as_slice()); + assert_eq!(result.sk, keys.signing_key.as_slice()); + } + + let expected_result = results + .testGroups + .iter() + .find(|tg| tg.tgId == tgId) + .unwrap() + .tests + .iter() + .find(|t| t.tcId == test.tcId) + .unwrap(); + + match parameter_set.as_str() { + "ML-DSA-44" => check(ml_dsa_44::generate_key_pair(test.seed), expected_result), + + "ML-DSA-65" => check(ml_dsa_65::generate_key_pair(test.seed), expected_result), + + "ML-DSA-87" => check(ml_dsa_87::generate_key_pair(test.seed), expected_result), + _ => unimplemented!(), + } +} + fn read(variant: &str, file: &str) -> T { let katfile_path = Path::new("tests") .join("kats") @@ -128,8 +139,6 @@ fn read(variant: &str, file: &str) -> T { #[test] fn siggen() { - use libcrux_ml_dsa::*; - let prompts: Prompts = read("siggen", "prompt.json"); assert!(prompts.algorithm == "ML-DSA"); assert!(prompts.revision == "FIPS204"); @@ -148,59 +157,69 @@ fn siggen() { eprintln!("{parameter_set}"); for test in kat.tests { - eprintln!(" {}", test.tcId); - let expected_result = results - .testGroups - .iter() - .find(|tg| tg.tgId == kat.tgId) - .unwrap() - .tests - .iter() - .find(|t| t.tcId == test.tcId) - .unwrap(); - - let Randomness(rnd) = test.rnd.unwrap_or(Randomness([0u8; 32])); - - match parameter_set.as_str() { - "ML-DSA-44" => { - let signature = ml_dsa_44::sign_internal( - &MLDSASigningKey(test.sk.try_into().unwrap()), - &test.message, - rnd, - ) - .unwrap(); - assert_eq!(signature.as_slice(), expected_result.signature); - } - - "ML-DSA-65" => { - let signature = ml_dsa_65::sign_internal( - &MLDSASigningKey(test.sk.try_into().unwrap()), - &test.message, - rnd, - ) - .unwrap(); - assert_eq!(signature.as_slice(), expected_result.signature); - } - - "ML-DSA-87" => { - let signature = ml_dsa_87::sign_internal( - &MLDSASigningKey(test.sk.try_into().unwrap()), - &test.message, - rnd, - ) - .unwrap(); - assert_eq!(signature.as_slice(), expected_result.signature); - } - _ => unimplemented!(), - } + siggen_inner(test, &results, kat.tgId, ¶meter_set); } } } -#[test] -fn sigver() { +#[inline(never)] +#[allow(non_snake_case)] +fn siggen_inner( + test: SigGenTest, + results: &Results, + tgId: usize, + parameter_set: &String, +) { use libcrux_ml_dsa::*; + eprintln!(" {}", test.tcId); + let expected_result = results + .testGroups + .iter() + .find(|tg| tg.tgId == tgId) + .unwrap() + .tests + .iter() + .find(|t| t.tcId == test.tcId) + .unwrap(); + + let Randomness(rnd) = test.rnd.unwrap_or(Randomness([0u8; 32])); + + match parameter_set.as_str() { + "ML-DSA-44" => { + let signature = ml_dsa_44::sign_internal( + &MLDSASigningKey(test.sk.try_into().unwrap()), + &test.message, + rnd, + ) + .unwrap(); + assert_eq!(signature.as_slice(), expected_result.signature); + } + "ML-DSA-65" => { + let signature = ml_dsa_65::sign_internal( + &MLDSASigningKey(test.sk.try_into().unwrap()), + &test.message, + rnd, + ) + .unwrap(); + assert_eq!(signature.as_slice(), expected_result.signature); + } + + "ML-DSA-87" => { + let signature = ml_dsa_87::sign_internal( + &MLDSASigningKey(test.sk.try_into().unwrap()), + &test.message, + rnd, + ) + .unwrap(); + assert_eq!(signature.as_slice(), expected_result.signature); + } + _ => unimplemented!(), + } +} + +#[test] +fn sigver() { let prompts: Prompts = read("sigver", "prompt.json"); assert!(prompts.algorithm == "ML-DSA"); assert!(prompts.revision == "FIPS204"); @@ -219,47 +238,60 @@ fn sigver() { eprintln!("{parameter_set}"); for test in kat.tests { - eprintln!(" {}", test.tcId); - let expected_result = results - .testGroups - .iter() - .find(|tg| tg.tgId == kat.tgId) - .unwrap() - .tests - .iter() - .find(|t| t.tcId == test.tcId) - .unwrap(); - - match parameter_set.as_str() { - "ML-DSA-44" => { - let valid = ml_dsa_44::verify_internal( - &MLDSAVerificationKey(kat.pk.clone().try_into().unwrap()), - &test.message, - &MLDSASignature(test.signature.try_into().unwrap()), - ); - assert_eq!(valid.is_ok(), expected_result.testPassed); - } - - "ML-DSA-65" => { - let valid = ml_dsa_65::verify_internal( - &MLDSAVerificationKey(kat.pk.clone().try_into().unwrap()), - &test.message, - &MLDSASignature(test.signature.try_into().unwrap()), - ); - assert_eq!(valid.is_ok(), expected_result.testPassed); - } - - "ML-DSA-87" => { - let valid = ml_dsa_87::verify_internal( - &MLDSAVerificationKey(kat.pk.clone().try_into().unwrap()), - &test.message, - &MLDSASignature(test.signature.try_into().unwrap()), - ); - assert_eq!(valid.is_ok(), expected_result.testPassed); - } - _ => unimplemented!(), - } + sigver_inner(test, &results, kat.tgId, &kat.pk, ¶meter_set); + } + } +} + +#[inline(never)] +#[allow(non_snake_case)] +fn sigver_inner( + test: SigVerTest, + results: &Results, + tgId: usize, + pk: &[u8], + parameter_set: &String, +) { + use libcrux_ml_dsa::*; + eprintln!(" {}", test.tcId); + let expected_result = results + .testGroups + .iter() + .find(|tg| tg.tgId == tgId) + .unwrap() + .tests + .iter() + .find(|t| t.tcId == test.tcId) + .unwrap(); + + match parameter_set.as_str() { + "ML-DSA-44" => { + let valid = ml_dsa_44::verify_internal( + &MLDSAVerificationKey(pk.to_owned().try_into().unwrap()), + &test.message, + &MLDSASignature(test.signature.try_into().unwrap()), + ); + assert_eq!(valid.is_ok(), expected_result.testPassed); + } + + "ML-DSA-65" => { + let valid = ml_dsa_65::verify_internal( + &MLDSAVerificationKey(pk.to_owned().try_into().unwrap()), + &test.message, + &MLDSASignature(test.signature.try_into().unwrap()), + ); + assert_eq!(valid.is_ok(), expected_result.testPassed); + } + + "ML-DSA-87" => { + let valid = ml_dsa_87::verify_internal( + &MLDSAVerificationKey(pk.to_owned().try_into().unwrap()), + &test.message, + &MLDSASignature(test.signature.try_into().unwrap()), + ); + assert_eq!(valid.is_ok(), expected_result.testPassed); } + _ => unimplemented!(), } }