From 9ae3188aba2cc3cd5c48014a47135f046ea0aea6 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 26 Jun 2026 03:58:02 -0700 Subject: [PATCH] MLKEM benchmark: also add a "private key from seed" benchmark. Change-Id: Ie78a79edb29e1ef0ed31ec621290262e6a6a6964 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/98067 Reviewed-by: Xiangfei Ding Auto-Submit: Rudolf Polzer Commit-Queue: Xiangfei Ding --- bench/mlkem.cc | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/bench/mlkem.cc b/bench/mlkem.cc index 84bbb66126..69cdb98f43 100644 --- a/bench/mlkem.cc +++ b/bench/mlkem.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include "./internal.h" @@ -136,6 +137,23 @@ void BM_SpeedMLKEM768KeyGenOnly(benchmark::State &state) { } } +void BM_SpeedMLKEM768PrivateKeyFromSeedOnly(benchmark::State &state) { + for (auto _ : state) { + state.PauseTiming(); + uint8_t seed[MLKEM_SEED_BYTES]; + RAND_bytes(seed, sizeof(seed)); + benchmark::DoNotOptimize(seed); + state.ResumeTiming(); + + MLKEM768_private_key priv; + if (!MLKEM768_private_key_from_seed(&priv, seed, sizeof(seed))) { + state.SkipWithError("MLKEM768_private_key_from_seed failed"); + return; + } + benchmark::DoNotOptimize(priv); + } +} + void BM_SpeedMLKEM768DecapOnly(benchmark::State &state) { uint8_t ciphertext[MLKEM768_CIPHERTEXT_BYTES]; // This ciphertext is nonsense, but decap is constant-time so, for the @@ -215,6 +233,23 @@ void BM_SpeedMLKEM1024KeyGenOnly(benchmark::State &state) { } } +void BM_SpeedMLKEM1024PrivateKeyFromSeedOnly(benchmark::State &state) { + for (auto _ : state) { + state.PauseTiming(); + uint8_t seed[MLKEM_SEED_BYTES]; + RAND_bytes(seed, sizeof(seed)); + benchmark::DoNotOptimize(seed); + state.ResumeTiming(); + + MLKEM1024_private_key priv; + if (!MLKEM1024_private_key_from_seed(&priv, seed, sizeof(seed))) { + state.SkipWithError("MLKEM1024_private_key_from_seed failed"); + return; + } + benchmark::DoNotOptimize(priv); + } +} + void BM_SpeedMLKEM1024DecapOnly(benchmark::State &state) { uint8_t ciphertext[MLKEM1024_CIPHERTEXT_BYTES]; // This ciphertext is nonsense, but decap is constant-time so, for the @@ -294,10 +329,14 @@ BSSL_BENCH_LAZY_REGISTER() { BENCHMARK(BM_SpeedMLKEM1024ParseEncap)->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM768KeyGenOnly)->Apply(bssl::bench::SetThreads); + BENCHMARK(BM_SpeedMLKEM768PrivateKeyFromSeedOnly) + ->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM768DecapOnly)->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM768ParseOnly)->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM768EncapOnly)->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM1024KeyGenOnly)->Apply(bssl::bench::SetThreads); + BENCHMARK(BM_SpeedMLKEM1024PrivateKeyFromSeedOnly) + ->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM1024DecapOnly)->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM1024ParseOnly)->Apply(bssl::bench::SetThreads); BENCHMARK(BM_SpeedMLKEM1024EncapOnly)->Apply(bssl::bench::SetThreads);