From e57a8915834e08998f1a93f3d111cfaf3fcd94a7 Mon Sep 17 00:00:00 2001 From: Kris Kwiatkowski Date: Sat, 17 Jul 2021 00:20:45 +0100 Subject: [PATCH] frodo: move benchmarks to separated file --- test/bench/CMakeLists.txt | 1 + test/bench/frodo.cc | 37 +++++++++++++++++++++++++++++++++++++ test/bench/kyber.cc | 30 ------------------------------ 3 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 test/bench/frodo.cc diff --git a/test/bench/CMakeLists.txt b/test/bench/CMakeLists.txt index 3f5135d1..63b4c0ff 100644 --- a/test/bench/CMakeLists.txt +++ b/test/bench/CMakeLists.txt @@ -10,6 +10,7 @@ endif() add_executable( bench + frodo.cc kyber.cc) target_link_libraries( diff --git a/test/bench/frodo.cc b/test/bench/frodo.cc new file mode 100644 index 00000000..ecb4cd83 --- /dev/null +++ b/test/bench/frodo.cc @@ -0,0 +1,37 @@ +#include +#include +#include + +#include +#include +#include + +#include +#include + +static void BenchFrodoDecaps(benchmark::State &st) { + const pqc_ctx_t *p = pqc_kem_alg_by_id(PQC_ALG_KEM_FRODOKEM640SHAKE); + std::vector ct(pqc_ciphertext_bsz(p)); + std::vector ss1(pqc_shared_secret_bsz(p)); + std::vector ss2(pqc_shared_secret_bsz(p)); + std::vector sk(pqc_private_key_bsz(p)); + std::vector pk(pqc_public_key_bsz(p)); + + // Generate keys & perform encapsulation + pqc_keygen(p, pk.data(), sk.data()); + pqc_kem_encapsulate(p, ct.data(), ss1.data(), pk.data()); + + // Poison & Decapsulate + ct_poison(sk.data(), 16); + ct_poison((unsigned char*)sk.data()+16+9616, 2*640*8 /*CRYPTO_SECRETBYTES*/); + ct_expect_uum(); + for (auto _ : st) { + pqc_kem_decapsulate(p, ss2.data(), ct.data(), sk.data()); + } + ct_require_uum(); + benchmark::DoNotOptimize(ss2); + benchmark::DoNotOptimize(ct); + benchmark::DoNotOptimize(sk); +} + +BENCHMARK(BenchFrodoDecaps); diff --git a/test/bench/kyber.cc b/test/bench/kyber.cc index 86ff6a17..598873d5 100644 --- a/test/bench/kyber.cc +++ b/test/bench/kyber.cc @@ -6,9 +6,6 @@ #include #include -#include -#include - #include "kem/kyber/kyber512/avx2/polyvec.h" extern "C" { @@ -121,32 +118,6 @@ static void BenchKyberNttAVX(benchmark::State &st) { cpucycle(st, total); } -static void BenchFrodoDecaps(benchmark::State &st) { - const pqc_ctx_t *p = pqc_kem_alg_by_id(PQC_ALG_KEM_FRODOKEM640SHAKE); - std::vector ct(pqc_ciphertext_bsz(p)); - std::vector ss1(pqc_shared_secret_bsz(p)); - std::vector ss2(pqc_shared_secret_bsz(p)); - std::vector sk(pqc_private_key_bsz(p)); - std::vector pk(pqc_public_key_bsz(p)); - - // Generate keys & perform encapsulation - pqc_keygen(p, pk.data(), sk.data()); - pqc_kem_encapsulate(p, ct.data(), ss1.data(), pk.data()); - - // Poison & Decapsulate - ct_poison(sk.data(), 16); - ct_poison((unsigned char*)sk.data()+16+9616, 2*640*8 /*CRYPTO_SECRETBYTES*/); - ct_expect_uum(); - for (auto _ : st) { - pqc_kem_decapsulate(p, ss2.data(), ct.data(), sk.data()); - } - ct_require_uum(); - benchmark::DoNotOptimize(ss2); - benchmark::DoNotOptimize(ct); - benchmark::DoNotOptimize(sk); -} - - BENCHMARK(BenchKyberMatK2); BENCHMARK(BenchKyberRejSampling); BENCHMARK(BenchKyberKeygen); @@ -156,4 +127,3 @@ BENCHMARK(BenchKyberNttAVX); // TODO: not sure why but memcheck fails in INDCPA encryption BENCHMARK(BenchKyberEncaps); BENCHMARK(BenchKyberDecaps); -BENCHMARK(BenchFrodoDecaps); \ No newline at end of file