mirror of
https://github.com/itzmeanjan/ml-kem.git
synced 2026-01-06 22:34:08 -05:00
Modifications to use latest version of RandomSHAKE CSPRNG API
Signed-off-by: Anjan Roy <hello@itzmeanjan.in>
This commit is contained in:
@@ -13,7 +13,7 @@ bench_ml_kem_1024_keygen(benchmark::State& state)
|
||||
std::array<uint8_t, ml_kem_1024::PKEY_BYTE_LEN> pubkey{};
|
||||
std::array<uint8_t, ml_kem_1024::SKEY_BYTE_LEN> 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<uint8_t, ml_kem_1024::CIPHER_TEXT_BYTE_LEN> cipher{};
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> shared_secret_receiver{};
|
||||
|
||||
randomshake::randomshake_t<256> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
|
||||
csprng.generate(seed_d);
|
||||
csprng.generate(seed_z);
|
||||
|
||||
@@ -13,7 +13,7 @@ bench_ml_kem_512_keygen(benchmark::State& state)
|
||||
std::array<uint8_t, ml_kem_512::PKEY_BYTE_LEN> pubkey{};
|
||||
std::array<uint8_t, ml_kem_512::SKEY_BYTE_LEN> 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<uint8_t, ml_kem_512::CIPHER_TEXT_BYTE_LEN> cipher{};
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> shared_secret_receiver{};
|
||||
|
||||
randomshake::randomshake_t<128> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
|
||||
csprng.generate(seed_d);
|
||||
csprng.generate(seed_z);
|
||||
|
||||
@@ -13,7 +13,7 @@ bench_ml_kem_768_keygen(benchmark::State& state)
|
||||
std::array<uint8_t, ml_kem_768::PKEY_BYTE_LEN> pubkey{};
|
||||
std::array<uint8_t, ml_kem_768::SKEY_BYTE_LEN> 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<uint8_t, ml_kem_768::CIPHER_TEXT_BYTE_LEN> cipher{};
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> shared_secret_receiver{};
|
||||
|
||||
randomshake::randomshake_t<192> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
|
||||
csprng.generate(seed_d);
|
||||
csprng.generate(seed_z);
|
||||
|
||||
@@ -55,7 +55,7 @@ main()
|
||||
auto receiver_key_span = std::span<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN>(receiver_key);
|
||||
|
||||
// Pseudo-randomness source
|
||||
randomshake::randomshake_t<192> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
|
||||
// Fill up seeds using PRNG
|
||||
csprng.generate(d_span);
|
||||
|
||||
@@ -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<size_t bit_security_level>
|
||||
static forceinline zq_t random(randomshake::randomshake_t<bit_security_level>& csprng)
|
||||
static forceinline zq_t random(randomshake::randomshake_t<>& csprng)
|
||||
{
|
||||
uint16_t res = 0;
|
||||
csprng.generate(std::span(reinterpret_cast<uint8_t*>(&res), sizeof(res)));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -73,9 +73,9 @@ make_malformed_pubkey(std::span<uint8_t, pubkey_byte_len> 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<size_t cipher_byte_len, size_t bit_sec_lvl>
|
||||
template<size_t cipher_byte_len>
|
||||
static forceinline constexpr void
|
||||
random_bitflip_in_cipher_text(std::span<uint8_t, cipher_byte_len> cipher, randomshake::randomshake_t<bit_sec_lvl>& csprng)
|
||||
random_bitflip_in_cipher_text(std::span<uint8_t, cipher_byte_len> cipher, randomshake::randomshake_t<>& csprng)
|
||||
{
|
||||
size_t random_u64 = 0;
|
||||
csprng.generate(std::span<uint8_t, sizeof(random_u64)>(reinterpret_cast<uint8_t*>(&random_u64), sizeof(random_u64)));
|
||||
|
||||
@@ -26,7 +26,7 @@ TEST(ML_KEM, ML_KEM_1024_KeygenEncapsDecaps)
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> shared_secret_receiver{};
|
||||
|
||||
randomshake::randomshake_t<256> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
csprng.generate(seed_d);
|
||||
csprng.generate(seed_z);
|
||||
csprng.generate(seed_m);
|
||||
|
||||
@@ -200,7 +200,7 @@ TEST(ML_KEM, ML_KEM_1024_SeckeyCheck_ACVP_KnownAnswerTests)
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> computed_shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_1024::SHARED_SECRET_BYTE_LEN> 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));
|
||||
|
||||
@@ -27,7 +27,7 @@ TEST(ML_KEM, ML_KEM_512_KeygenEncapsDecaps)
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> shared_secret_receiver{};
|
||||
|
||||
randomshake::randomshake_t<128> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
csprng.generate(seed_d);
|
||||
csprng.generate(seed_z);
|
||||
csprng.generate(seed_m);
|
||||
|
||||
@@ -200,7 +200,7 @@ TEST(ML_KEM, ML_KEM_512_SeckeyCheck_ACVP_KnownAnswerTests)
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> computed_shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_512::SHARED_SECRET_BYTE_LEN> 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));
|
||||
|
||||
@@ -26,7 +26,7 @@ TEST(ML_KEM, ML_KEM_768_KeygenEncapsDecaps)
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> 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<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> shared_secret_receiver{};
|
||||
|
||||
randomshake::randomshake_t<192> csprng{};
|
||||
randomshake::randomshake_t csprng{};
|
||||
csprng.generate(seed_d);
|
||||
csprng.generate(seed_z);
|
||||
csprng.generate(seed_m);
|
||||
|
||||
@@ -200,7 +200,7 @@ TEST(ML_KEM, ML_KEM_768_SeckeyCheck_ACVP_KnownAnswerTests)
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> computed_shared_secret_sender{};
|
||||
std::array<uint8_t, ml_kem_768::SHARED_SECRET_BYTE_LEN> 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));
|
||||
|
||||
@@ -17,7 +17,7 @@ test_serialize_deserialize()
|
||||
std::vector<ml_kem_field::zq_t> dst(ml_kem_ntt::N);
|
||||
std::vector<uint8_t> 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);
|
||||
|
||||
Reference in New Issue
Block a user