mirror of
https://github.com/itzmeanjan/ml-kem.git
synced 2026-01-09 15:47:55 -05:00
test whether internal functions of Kyber512 KEM are timing leakage free or not
Signed-off-by: Anjan Roy <hello@itzmeanjan.in>
This commit is contained in:
@@ -2,4 +2,4 @@
|
||||
#include "dudect.h"
|
||||
|
||||
extern dudect_state_t
|
||||
test_kyber512_generate_vector();
|
||||
test_kyber512_kem_internals();
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
#include "field.hpp"
|
||||
#include "kyber512_kem.hpp"
|
||||
#include "sampling.hpp"
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <cstring>
|
||||
|
||||
#define DUDECT_IMPLEMENTATION
|
||||
#define DUDECT_VISIBLITY_STATIC
|
||||
@@ -18,12 +15,21 @@ do_one_computation(uint8_t* const data)
|
||||
constexpr size_t doff1 = doff0 + slen;
|
||||
|
||||
std::array<field::zq_t, kyber512_kem::k * ntt::N> poly_vec{};
|
||||
std::array<uint8_t, kyber512_kem::k * 32 * kyber512_kem::du> byte_arr{};
|
||||
|
||||
auto sigma = std::span<const uint8_t, slen>(data + doff0, doff1 - doff0);
|
||||
const auto nonce = data[doff1];
|
||||
|
||||
kyber_utils::generate_vector<kyber512_kem::k, kyber512_kem::η1>(poly_vec, sigma, nonce);
|
||||
// Just so that optimizer doesn't remove above function call !
|
||||
return static_cast<uint8_t>(poly_vec[0].raw() ^ poly_vec[poly_vec.size() - 1].raw());
|
||||
kyber_utils::poly_vec_ntt<kyber512_kem::k>(poly_vec);
|
||||
kyber_utils::poly_vec_intt<kyber512_kem::k>(poly_vec);
|
||||
kyber_utils::poly_vec_compress<kyber512_kem::k, kyber512_kem::du>(poly_vec);
|
||||
kyber_utils::poly_vec_encode<kyber512_kem::k, kyber512_kem::du>(poly_vec, byte_arr);
|
||||
kyber_utils::poly_vec_decode<kyber512_kem::k, kyber512_kem::du>(byte_arr, poly_vec);
|
||||
kyber_utils::poly_vec_decompress<kyber512_kem::k, kyber512_kem::du>(poly_vec);
|
||||
|
||||
// Just so that optimizer doesn't remove above function calls !
|
||||
return static_cast<uint8_t>(poly_vec[0].raw() ^ poly_vec[poly_vec.size() - 1].raw()) & (byte_arr[0] ^ byte_arr[byte_arr.size() - 1]);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -40,7 +46,7 @@ prepare_inputs(dudect_config_t* const c, uint8_t* const input_data, uint8_t* con
|
||||
}
|
||||
|
||||
dudect_state_t
|
||||
test_kyber512_generate_vector()
|
||||
test_kyber512_kem_internals()
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
@@ -49,7 +55,7 @@ test_kyber512_generate_vector()
|
||||
;
|
||||
|
||||
constexpr size_t number_measurements = 1ul << 20;
|
||||
const auto max_test_duration = 2min;
|
||||
const auto max_test_duration = 3min;
|
||||
|
||||
dudect_config_t config = {
|
||||
chunk_size,
|
||||
@@ -4,7 +4,7 @@
|
||||
int
|
||||
main()
|
||||
{
|
||||
if (test_kyber512_generate_vector() != DUDECT_NO_LEAKAGE_EVIDENCE_YET) {
|
||||
if (test_kyber512_kem_internals() != DUDECT_NO_LEAKAGE_EVIDENCE_YET) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user