bench: Fix bench_whitelist hang

This commit is contained in:
mllwchrry
2026-03-17 14:12:24 +02:00
parent 2153ded4fc
commit be075fe86c

View File

@@ -14,7 +14,6 @@
#include "hash_impl.h" #include "hash_impl.h"
#include "int128_impl.h" #include "int128_impl.h"
#include "scalar_impl.h" #include "scalar_impl.h"
#include "testrand_impl.h"
#define MAX_N_KEYS 30 #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); run_benchmark(str, bench_whitelist, bench_whitelist_setup, NULL, data, 100, iters);
} }
static void random_scalar_order(secp256k1_scalar *num) { static void generate_scalar(secp256k1_scalar *scalar, unsigned char *seckey, uint32_t num) {
do { secp256k1_sha256 sha256;
unsigned char b32[32]; unsigned char c[13] = {'w','h','i','t','e','l','i','s','t', 0, 0, 0, 0};
int overflow = 0; int is_valid;
testrand256(b32); c[9] = num;
secp256k1_scalar_set_b32(num, b32, &overflow); c[10] = num >> 8;
if (overflow || secp256k1_scalar_is_zero(num)) { c[11] = num >> 16;
continue; c[12] = num >> 24;
} secp256k1_sha256_initialize(&sha256);
break; secp256k1_sha256_write(&sha256, c, sizeof(c));
} while(1); secp256k1_sha256_finalize(&sha256, seckey);
is_valid = secp256k1_scalar_set_b32_seckey(scalar, seckey);
CHECK(is_valid);
} }
int main(void) { int main(void) {
@@ -76,22 +77,19 @@ int main(void) {
data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_NONE); data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
/* Start with subkey */ /* Start with subkey */
random_scalar_order(&ssub); generate_scalar(&ssub, data.csub, 0);
secp256k1_scalar_get_b32(data.csub, &ssub);
CHECK(secp256k1_ec_seckey_verify(data.ctx, data.csub) == 1); CHECK(secp256k1_ec_seckey_verify(data.ctx, data.csub) == 1);
CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.sub_pubkey, data.csub) == 1); CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.sub_pubkey, data.csub) == 1);
/* Then offline and online whitelist keys */ /* Then offline and online whitelist keys */
for (i = 0; i < n_keys; i++) { for (i = 0; i < n_keys; i++) {
secp256k1_scalar son, soff; secp256k1_scalar son, soff;
/* Create two keys */ /* Create two keys using different counter values to ensure different keys */
random_scalar_order(&son); generate_scalar(&son, data.online_seckey[i], i + 1);
secp256k1_scalar_get_b32(data.online_seckey[i], &son);
CHECK(secp256k1_ec_seckey_verify(data.ctx, data.online_seckey[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); CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.online_pubkeys[i], data.online_seckey[i]) == 1);
random_scalar_order(&soff); generate_scalar(&soff, data.summed_seckey[i], i + 1 + n_keys);
secp256k1_scalar_get_b32(data.summed_seckey[i], &soff);
CHECK(secp256k1_ec_seckey_verify(data.ctx, data.summed_seckey[i]) == 1); 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); CHECK(secp256k1_ec_pubkey_create(data.ctx, &data.offline_pubkeys[i], data.summed_seckey[i]) == 1);