Skip to content

Commit 16f924a

Browse files
committed
f return 0 if sekey is 0 because otherwise result is not a valid seckey
1 parent c897974 commit 16f924a

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

src/secp256k1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ int secp256k1_ec_privkey_negate(const secp256k1_context* ctx, unsigned char *sec
535535
ARG_CHECK(seckey != NULL);
536536

537537
secp256k1_scalar_set_b32(&sec, seckey, &overflow);
538-
if (overflow) {
538+
if (overflow || secp256k1_scalar_is_zero(&sec)) {
539539
return 0;
540540
}
541541
secp256k1_scalar_negate(&sec, &sec);

src/tests.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4144,6 +4144,13 @@ void run_eckey_arithmetic_test(void) {
41444144
CHECK(secp256k1_ec_privkey_negate(ctx, seckey) == 1);
41454145
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
41464146

4147+
/* Negating all 0s fails */
4148+
memset(seckey, 0, 32);
4149+
memset(seckey_tmp, 0, 32);
4150+
CHECK(secp256k1_ec_privkey_negate(ctx, seckey) == 0);
4151+
/* Check that seckey is not modified */
4152+
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
4153+
41474154
/* Negating an overflowing seckey fails and the seckey is not modified. In
41484155
* this test, the seckey has 16 random bytes to ensure that
41494156
* ec_privkey_negate doesn't just set seckey to a constant value in case of

0 commit comments

Comments
 (0)