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:
Anjan Roy
2023-12-20 22:52:02 +04:00
parent 3551f37afd
commit 2a7bbfd89c
3 changed files with 15 additions and 9 deletions

View File

@@ -2,4 +2,4 @@
#include "dudect.h"
extern dudect_state_t
test_kyber512_generate_vector();
test_kyber512_kem_internals();

View File

@@ -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,

View File

@@ -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;
}