From b1033331c3cd959f3cf3beb8ead7008f5a1f3634 Mon Sep 17 00:00:00 2001 From: Anjan Roy Date: Mon, 17 Nov 2025 18:13:27 +0530 Subject: [PATCH] Modifications to use latest version of RandomSHAKE CSPRNG API Signed-off-by: Anjan Roy --- benchmarks/bench_ml_kem_1024.cpp | 6 +++--- benchmarks/bench_ml_kem_512.cpp | 6 +++--- benchmarks/bench_ml_kem_768.cpp | 6 +++--- examples/ml_kem_768.cpp | 2 +- include/ml_kem/internals/math/field.hpp | 3 +-- tests/test_compression.cpp | 2 +- tests/test_field.cpp | 2 +- tests/test_helper.hpp | 4 ++-- tests/test_ml_kem_1024.cpp | 6 +++--- tests/test_ml_kem_1024_kat.cpp | 2 +- tests/test_ml_kem_512.cpp | 6 +++--- tests/test_ml_kem_512_kat.cpp | 2 +- tests/test_ml_kem_768.cpp | 6 +++--- tests/test_ml_kem_768_kat.cpp | 2 +- tests/test_serialize.cpp | 2 +- 15 files changed, 28 insertions(+), 29 deletions(-) diff --git a/benchmarks/bench_ml_kem_1024.cpp b/benchmarks/bench_ml_kem_1024.cpp index 6658997..31306c6 100644 --- a/benchmarks/bench_ml_kem_1024.cpp +++ b/benchmarks/bench_ml_kem_1024.cpp @@ -13,7 +13,7 @@ bench_ml_kem_1024_keygen(benchmark::State& state) std::array pubkey{}; std::array seckey{}; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); @@ -45,7 +45,7 @@ bench_ml_kem_1024_encapsulate(benchmark::State& state) std::array cipher{}; std::array shared_secret{}; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); @@ -84,7 +84,7 @@ bench_ml_kem_1024_decapsulate(benchmark::State& state) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); diff --git a/benchmarks/bench_ml_kem_512.cpp b/benchmarks/bench_ml_kem_512.cpp index 7a56bb4..eb2f5b9 100644 --- a/benchmarks/bench_ml_kem_512.cpp +++ b/benchmarks/bench_ml_kem_512.cpp @@ -13,7 +13,7 @@ bench_ml_kem_512_keygen(benchmark::State& state) std::array pubkey{}; std::array seckey{}; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); @@ -45,7 +45,7 @@ bench_ml_kem_512_encapsulate(benchmark::State& state) std::array cipher{}; std::array shared_secret{}; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); @@ -84,7 +84,7 @@ bench_ml_kem_512_decapsulate(benchmark::State& state) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); diff --git a/benchmarks/bench_ml_kem_768.cpp b/benchmarks/bench_ml_kem_768.cpp index 2767b1c..e635717 100644 --- a/benchmarks/bench_ml_kem_768.cpp +++ b/benchmarks/bench_ml_kem_768.cpp @@ -13,7 +13,7 @@ bench_ml_kem_768_keygen(benchmark::State& state) std::array pubkey{}; std::array seckey{}; - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); @@ -45,7 +45,7 @@ bench_ml_kem_768_encapsulate(benchmark::State& state) std::array cipher{}; std::array shared_secret{}; - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); @@ -84,7 +84,7 @@ bench_ml_kem_768_decapsulate(benchmark::State& state) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); diff --git a/examples/ml_kem_768.cpp b/examples/ml_kem_768.cpp index 24d3ea8..bc3efe1 100644 --- a/examples/ml_kem_768.cpp +++ b/examples/ml_kem_768.cpp @@ -55,7 +55,7 @@ main() auto receiver_key_span = std::span(receiver_key); // Pseudo-randomness source - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; // Fill up seeds using PRNG csprng.generate(d_span); diff --git a/include/ml_kem/internals/math/field.hpp b/include/ml_kem/internals/math/field.hpp index 0dc974e..a001a1f 100644 --- a/include/ml_kem/internals/math/field.hpp +++ b/include/ml_kem/internals/math/field.hpp @@ -115,8 +115,7 @@ public: forceinline constexpr auto operator<=>(const zq_t&) const = default; // Samples a random Zq element, using pseudo random number generator. - template - static forceinline zq_t random(randomshake::randomshake_t& csprng) + static forceinline zq_t random(randomshake::randomshake_t<>& csprng) { uint16_t res = 0; csprng.generate(std::span(reinterpret_cast(&res), sizeof(res))); diff --git a/tests/test_compression.cpp b/tests/test_compression.cpp index e6ae3a3..30c02d9 100644 --- a/tests/test_compression.cpp +++ b/tests/test_compression.cpp @@ -37,7 +37,7 @@ test_zq_compression() requires(itr_cnt > 0) { bool res = true; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; for (size_t i = 0; i < itr_cnt; i++) { const auto a = ml_kem_field::zq_t::random(csprng); diff --git a/tests/test_field.cpp b/tests/test_field.cpp index 0d06dcb..48fe621 100644 --- a/tests/test_field.cpp +++ b/tests/test_field.cpp @@ -8,7 +8,7 @@ TEST(ML_KEM, ArithmeticOverZq) { constexpr size_t ITERATION_COUNT = 1ul << 20; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; for (size_t i = 0; i < ITERATION_COUNT; i++) { const auto a = ml_kem_field::zq_t::random(csprng); diff --git a/tests/test_helper.hpp b/tests/test_helper.hpp index c28b343..cf1b6d9 100644 --- a/tests/test_helper.hpp +++ b/tests/test_helper.hpp @@ -73,9 +73,9 @@ make_malformed_pubkey(std::span pubkey) } // Given a ML-KEM-{512, 768, 1024} cipher text, this function flips a random bit of it, while sampling choice of random index from input PRNG. -template +template static forceinline constexpr void -random_bitflip_in_cipher_text(std::span cipher, randomshake::randomshake_t& csprng) +random_bitflip_in_cipher_text(std::span cipher, randomshake::randomshake_t<>& csprng) { size_t random_u64 = 0; csprng.generate(std::span(reinterpret_cast(&random_u64), sizeof(random_u64))); diff --git a/tests/test_ml_kem_1024.cpp b/tests/test_ml_kem_1024.cpp index 3951a2f..c94a50b 100644 --- a/tests/test_ml_kem_1024.cpp +++ b/tests/test_ml_kem_1024.cpp @@ -26,7 +26,7 @@ TEST(ML_KEM, ML_KEM_1024_KeygenEncapsDecaps) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); @@ -56,7 +56,7 @@ TEST(ML_KEM, ML_KEM_1024_EncapsFailureDueToNonReducedPubKey) std::array shared_secret{}; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); @@ -90,7 +90,7 @@ TEST(ML_KEM, ML_KEM_1024_DecapsFailureDueToBitFlippedCipherText) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); diff --git a/tests/test_ml_kem_1024_kat.cpp b/tests/test_ml_kem_1024_kat.cpp index b1ddfa2..4083f64 100644 --- a/tests/test_ml_kem_1024_kat.cpp +++ b/tests/test_ml_kem_1024_kat.cpp @@ -200,7 +200,7 @@ TEST(ML_KEM, ML_KEM_1024_SeckeyCheck_ACVP_KnownAnswerTests) std::array computed_shared_secret_sender{}; std::array computed_shared_secret_receiver{}; - randomshake::randomshake_t<256> csprng; + randomshake::randomshake_t csprng; csprng.generate(random_m); EXPECT_TRUE(ml_kem_1024::encapsulate(random_m, pk, computed_ctxt, computed_shared_secret_sender)); diff --git a/tests/test_ml_kem_512.cpp b/tests/test_ml_kem_512.cpp index e9683a8..18d3515 100644 --- a/tests/test_ml_kem_512.cpp +++ b/tests/test_ml_kem_512.cpp @@ -27,7 +27,7 @@ TEST(ML_KEM, ML_KEM_512_KeygenEncapsDecaps) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); @@ -57,7 +57,7 @@ TEST(ML_KEM, ML_KEM_512_EncapsFailureDueToNonReducedPubKey) std::array shared_secret{}; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); @@ -91,7 +91,7 @@ TEST(ML_KEM, ML_KEM_512_DecapsFailureDueToBitFlippedCipherText) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<128> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); diff --git a/tests/test_ml_kem_512_kat.cpp b/tests/test_ml_kem_512_kat.cpp index 7456b30..440d138 100644 --- a/tests/test_ml_kem_512_kat.cpp +++ b/tests/test_ml_kem_512_kat.cpp @@ -200,7 +200,7 @@ TEST(ML_KEM, ML_KEM_512_SeckeyCheck_ACVP_KnownAnswerTests) std::array computed_shared_secret_sender{}; std::array computed_shared_secret_receiver{}; - randomshake::randomshake_t<128> csprng; + randomshake::randomshake_t csprng; csprng.generate(random_m); EXPECT_TRUE(ml_kem_512::encapsulate(random_m, pk, computed_ctxt, computed_shared_secret_sender)); diff --git a/tests/test_ml_kem_768.cpp b/tests/test_ml_kem_768.cpp index 464e827..d0d5126 100644 --- a/tests/test_ml_kem_768.cpp +++ b/tests/test_ml_kem_768.cpp @@ -26,7 +26,7 @@ TEST(ML_KEM, ML_KEM_768_KeygenEncapsDecaps) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); @@ -56,7 +56,7 @@ TEST(ML_KEM, ML_KEM_768_EncapsFailureDueToNonReducedPubKey) std::array shared_secret{}; - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); @@ -90,7 +90,7 @@ TEST(ML_KEM, ML_KEM_768_DecapsFailureDueToBitFlippedCipherText) std::array shared_secret_sender{}; std::array shared_secret_receiver{}; - randomshake::randomshake_t<192> csprng{}; + randomshake::randomshake_t csprng{}; csprng.generate(seed_d); csprng.generate(seed_z); csprng.generate(seed_m); diff --git a/tests/test_ml_kem_768_kat.cpp b/tests/test_ml_kem_768_kat.cpp index e67a12f..226e734 100644 --- a/tests/test_ml_kem_768_kat.cpp +++ b/tests/test_ml_kem_768_kat.cpp @@ -200,7 +200,7 @@ TEST(ML_KEM, ML_KEM_768_SeckeyCheck_ACVP_KnownAnswerTests) std::array computed_shared_secret_sender{}; std::array computed_shared_secret_receiver{}; - randomshake::randomshake_t<192> csprng; + randomshake::randomshake_t csprng; csprng.generate(random_m); EXPECT_TRUE(ml_kem_768::encapsulate(random_m, pk, computed_ctxt, computed_shared_secret_sender)); diff --git a/tests/test_serialize.cpp b/tests/test_serialize.cpp index a6f9c43..7e99841 100644 --- a/tests/test_serialize.cpp +++ b/tests/test_serialize.cpp @@ -17,7 +17,7 @@ test_serialize_deserialize() std::vector dst(ml_kem_ntt::N); std::vector bytes(blen); - randomshake::randomshake_t<256> csprng{}; + randomshake::randomshake_t csprng{}; for (size_t i = 0; i < ml_kem_ntt::N; i++) { src[i] = ml_kem_field::zq_t::random(csprng);