From be075fe86cdc2d5d70f0791633d2225da2079ae6 Mon Sep 17 00:00:00 2001 From: mllwchrry Date: Tue, 17 Mar 2026 14:12:24 +0200 Subject: [PATCH] bench: Fix bench_whitelist hang --- src/bench_whitelist.c | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/bench_whitelist.c b/src/bench_whitelist.c index f02f1e86a..46de7d5ac 100644 --- a/src/bench_whitelist.c +++ b/src/bench_whitelist.c @@ -14,7 +14,6 @@ #include "hash_impl.h" #include "int128_impl.h" #include "scalar_impl.h" -#include "testrand_impl.h" #define MAX_N_KEYS 30 @@ -50,17 +49,19 @@ static void run_test(bench_data* data, int iters) { run_benchmark(str, bench_whitelist, bench_whitelist_setup, NULL, data, 100, iters); } -static void random_scalar_order(secp256k1_scalar *num) { - do { - unsigned char b32[32]; - int overflow = 0; - testrand256(b32); - secp256k1_scalar_set_b32(num, b32, &overflow); - if (overflow || secp256k1_scalar_is_zero(num)) { - continue; - } - break; - } while(1); +static void generate_scalar(secp256k1_scalar *scalar, unsigned char *seckey, uint32_t num) { + secp256k1_sha256 sha256; + unsigned char c[13] = {'w','h','i','t','e','l','i','s','t', 0, 0, 0, 0}; + int is_valid; + c[9] = num; + c[10] = num >> 8; + c[11] = num >> 16; + c[12] = num >> 24; + secp256k1_sha256_initialize(&sha256); + secp256k1_sha256_write(&sha256, c, sizeof(c)); + secp256k1_sha256_finalize(&sha256, seckey); + is_valid = secp256k1_scalar_set_b32_seckey(scalar, seckey); + CHECK(is_valid); } int main(void) { @@ -76,22 +77,19 @@ int main(void) { data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_NONE); /* Start with subkey */ - random_scalar_order(&ssub); - secp256k1_scalar_get_b32(data.csub, &ssub); + generate_scalar(&ssub, data.csub, 0); CHECK(secp256k1_ec_seckey_verify(data.ctx, data.csub) == 1); CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.sub_pubkey, data.csub) == 1); /* Then offline and online whitelist keys */ for (i = 0; i < n_keys; i++) { secp256k1_scalar son, soff; - /* Create two keys */ - random_scalar_order(&son); - secp256k1_scalar_get_b32(data.online_seckey[i], &son); + /* Create two keys using different counter values to ensure different keys */ + generate_scalar(&son, data.online_seckey[i], i + 1); CHECK(secp256k1_ec_seckey_verify(data.ctx, data.online_seckey[i]) == 1); CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.online_pubkeys[i], data.online_seckey[i]) == 1); - random_scalar_order(&soff); - secp256k1_scalar_get_b32(data.summed_seckey[i], &soff); + generate_scalar(&soff, data.summed_seckey[i], i + 1 + n_keys); CHECK(secp256k1_ec_seckey_verify(data.ctx, data.summed_seckey[i]) == 1); CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.offline_pubkeys[i], data.summed_seckey[i]) == 1);