7 #ifndef _SECP256K1_WHITELIST_IMPL_H_
8 #define _SECP256K1_WHITELIST_IMPL_H_
18 secp256k1_ge_set_gej(&ge, pubkey);
20 secp256k1_sha256_initialize(&sha);
24 secp256k1_sha256_write(&sha, c, size);
25 secp256k1_sha256_finalize(&sha, h);
27 secp256k1_scalar_set_b32(output, h, &overflow);
28 if (overflow || secp256k1_scalar_is_zero(output)) {
30 secp256k1_scalar_clear(output);
41 secp256k1_scalar_set_int(&zero, 0);
43 ret = secp256k1_whitelist_hash_pubkey(&tweak, pub_tweaked);
45 secp256k1_ecmult(&ctx->
ecmult_ctx, pub_tweaked, pub_tweaked, &tweak, &zero);
50 static int secp256k1_whitelist_compute_tweaked_privkey(
const secp256k1_context2* ctx,
secp256k1_scalar* skey,
const unsigned char *online_key,
const unsigned char *summed_key) {
55 secp256k1_scalar_set_b32(skey, summed_key, &overflow);
56 if (overflow || secp256k1_scalar_is_zero(skey)) {
62 ret = secp256k1_whitelist_hash_pubkey(&tweak, &pkeyj);
66 secp256k1_scalar_mul(skey, skey, &tweak);
68 secp256k1_scalar_set_b32(&sonline, online_key, &overflow);
69 if (overflow || secp256k1_scalar_is_zero(&sonline)) {
72 secp256k1_scalar_add(skey, skey, &sonline);
73 secp256k1_scalar_clear(&sonline);
74 secp256k1_scalar_clear(&tweak);
78 secp256k1_scalar_clear(skey);
93 secp256k1_sha256_initialize(&sha);
94 secp256k1_pubkey2_load(ctx, &subkey_ge, sub_pubkey);
100 secp256k1_sha256_write(&sha, c, size);
101 for (i = 0; i < n_keys; i++) {
107 secp256k1_pubkey2_load(ctx, &offline_ge, &offline_pubkeys[i]);
111 secp256k1_sha256_write(&sha, c, size);
112 secp256k1_pubkey2_load(ctx, &online_ge, &online_pubkeys[i]);
116 secp256k1_sha256_write(&sha, c, size);
119 secp256k1_gej_set_ge(&tweaked_gej, &offline_ge);
120 secp256k1_gej_add_ge_var(&tweaked_gej, &tweaked_gej, &subkey_ge, NULL);
121 secp256k1_whitelist_tweak_pubkey(ctx, &tweaked_gej);
122 secp256k1_gej_add_ge_var(&keys[i], &tweaked_gej, &online_ge, NULL);
124 secp256k1_sha256_finalize(&sha, msg32);