@@ -30,7 +30,7 @@ if(MEMSAN) | |||||
set(CMAKE_ARGS_MEMCHECK_LIB "-stdlib=libc++ -L${LLVM_PRJ_LIB} -lc++abi -Wl,-rpath,${LLVM_PRJ_LIB}") | set(CMAKE_ARGS_MEMCHECK_LIB "-stdlib=libc++ -L${LLVM_PRJ_LIB} -lc++abi -Wl,-rpath,${LLVM_PRJ_LIB}") | ||||
set(CMAKE_ARGS_MEMCHECK_INC "-isystem -I${LLVM_PRJ_INC} -I${LLVM_PRJ_INC}/c++/v1") | set(CMAKE_ARGS_MEMCHECK_INC "-isystem -I${LLVM_PRJ_INC} -I${LLVM_PRJ_INC}/c++/v1") | ||||
set(CMAKE_ARGS_MEMCHECK_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -Wno-unused-command-line-argument") | set(CMAKE_ARGS_MEMCHECK_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -Wno-unused-command-line-argument") | ||||
set(EXTRA_CXX_FLAGS "${CMAKE_ARGS_MEMCHECK_FLAGS} ${CMAKE_ARGS_MEMCHECK_LIB} ${CMAKE_ARGS_MEMCHECK_INC}") | |||||
set(EXTRA_CXX_FLAGS "${CMAKE_ARGS_MEMCHECK_FLAGS} ${CMAKE_ARGS_MEMCHECK_LIB} ${CMAKE_ARGS_MEMCHECK_INC} -DPQC_MEMSAN_BUILD") | |||||
endif() | endif() | ||||
# Dependencies | # Dependencies | ||||
@@ -301,6 +301,10 @@ static int randombytes_js_randombytes_nodejs(void *buf, size_t n) { | |||||
#endif /* defined(__EMSCRIPTEN__) */ | #endif /* defined(__EMSCRIPTEN__) */ | ||||
int randombytes(uint8_t *buf, size_t n) { | int randombytes(uint8_t *buf, size_t n) { | ||||
#ifdef PQC_MEMSAN_BUILD | |||||
size_t i; | |||||
for (i=0; i<n; i++) buf[i]=0; | |||||
#endif | |||||
#if defined(__EMSCRIPTEN__) | #if defined(__EMSCRIPTEN__) | ||||
return randombytes_js_randombytes_nodejs(buf, n); | return randombytes_js_randombytes_nodejs(buf, n); | ||||
#elif defined(__linux__) | #elif defined(__linux__) | ||||
@@ -103,7 +103,7 @@ static inline void sike_init_basis(const crypto_word_t *gen, f2elm_t XP, f2elm_t | |||||
// Conversion of GF(p^2) element from Montgomery to standard representation. | // Conversion of GF(p^2) element from Montgomery to standard representation. | ||||
static inline void sike_fp2_encode(const f2elm_t x, uint8_t *enc) { | static inline void sike_fp2_encode(const f2elm_t x, uint8_t *enc) { | ||||
f2elm_t t; | |||||
f2elm_t t={0}; | |||||
sike_from_fp2mont(x, t); | sike_from_fp2mont(x, t); | ||||
// convert to bytes in little endian form | // convert to bytes in little endian form | ||||
@@ -22,7 +22,7 @@ auto cpucycle = [](benchmark::State &st, int64_t cycles) { | |||||
static void BenchKyberMatK2(benchmark::State &st) { | static void BenchKyberMatK2(benchmark::State &st) { | ||||
int64_t t, total = 0; | int64_t t, total = 0; | ||||
polyvec a[KYBER_K]; | polyvec a[KYBER_K]; | ||||
uint8_t seed[32]; | |||||
uint8_t seed[32] = {0}; | |||||
for (auto _ : st) { | for (auto _ : st) { | ||||
t = benchmark::cycleclock::Now(); | t = benchmark::cycleclock::Now(); | ||||
PQCLEAN_KYBER512_AVX2_gen_matrix(a, seed, 0); | PQCLEAN_KYBER512_AVX2_gen_matrix(a, seed, 0); | ||||
@@ -2,6 +2,7 @@ | |||||
#include <vector> | #include <vector> | ||||
#include <gtest/gtest.h> | #include <gtest/gtest.h> | ||||
#include <pqc/pqc.h> | #include <pqc/pqc.h> | ||||
#include <random> | |||||
TEST(Kyber,KEMOneOff) { | TEST(Kyber,KEMOneOff) { | ||||
@@ -27,10 +28,15 @@ TEST(Kyber,KEMOneOff) { | |||||
TEST(Kyber,SIGNOneOff) { | TEST(Kyber,SIGNOneOff) { | ||||
std::random_device rd; | |||||
std::uniform_int_distribution<uint8_t> dist(0, 0xFF); | |||||
uint8_t msg[1234] = {0}; | |||||
for (int i=0; i<PQC_ALG_SIG_MAX; i++) { | for (int i=0; i<PQC_ALG_SIG_MAX; i++) { | ||||
const pqc_ctx_t *p = pqc_sig_alg_by_id(i); | const pqc_ctx_t *p = pqc_sig_alg_by_id(i); | ||||
// generate some random msg | |||||
for (auto &x : msg) {x = dist(rd);} | |||||
uint8_t msg[1234]; | |||||
std::vector<uint8_t> sig(pqc_signature_bsz(p)); | std::vector<uint8_t> sig(pqc_signature_bsz(p)); | ||||
std::vector<uint8_t> sk(pqc_private_key_bsz(p)); | std::vector<uint8_t> sk(pqc_private_key_bsz(p)); | ||||
std::vector<uint8_t> pk(pqc_public_key_bsz(p)); | std::vector<uint8_t> pk(pqc_public_key_bsz(p)); | ||||