Skip to content

Commit 70d4640

Browse files
committed
Make secp256k1_ec_pubkey_create skip processing invalid secret keys.
This makes it somewhat less constant time in error conditions, but avoids encountering an internal assertion failure when trying to write out the point at infinity.
1 parent 6c476a8 commit 70d4640

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/secp256k1.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -399,13 +399,13 @@ int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *p
399399

400400
secp256k1_scalar_set_b32(&sec, seckey, &overflow);
401401
ret = (!overflow) & (!secp256k1_scalar_is_zero(&sec));
402-
secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec);
403-
secp256k1_ge_set_gej(&p, &pj);
404-
secp256k1_pubkey_save(pubkey, &p);
405-
secp256k1_scalar_clear(&sec);
406-
if (!ret) {
407-
memset(pubkey, 0, sizeof(*pubkey));
402+
memset(pubkey, 0, sizeof(*pubkey));
403+
if (ret) {
404+
secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec);
405+
secp256k1_ge_set_gej(&p, &pj);
406+
secp256k1_pubkey_save(pubkey, &p);
408407
}
408+
secp256k1_scalar_clear(&sec);
409409
return ret;
410410
}
411411

0 commit comments

Comments
 (0)