Merge BlockstreamResearch/secp256k1-zkp#347: bench: Fix bench_whitelist hang

be075fe86c bench: Fix bench_whitelist hang (mllwchrry)

Pull request description:

  Addresses #346

ACKs for top commit:
  real-or-random:
    utACK be075fe86c

Tree-SHA512: 53503c28f967642db305782162e534c13a1c3cfe27bbcfb501fbb2630a72b851725a02ac41f343d2adf5c382afec2a0b9c14a7b2dfa609e935dc9ccb5a281b9f
This commit is contained in:
merge-script
2026-03-18 18:19:00 +02:00

View File

@@ -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);