Skip to content

Commit 36d9dc1

Browse files
committed
Add seckey extraction from keypair to the extrakeys tests
1 parent fc96aa7 commit 36d9dc1

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/modules/extrakeys/tests_impl.h

+26-1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ void test_xonly_pubkey_tweak_recursive(void) {
311311

312312
void test_keypair(void) {
313313
unsigned char sk[32];
314+
unsigned char sk_tmp[32];
314315
unsigned char zeros96[96] = { 0 };
315316
unsigned char overflows[32];
316317
secp256k1_keypair keypair;
@@ -396,6 +397,28 @@ void test_keypair(void) {
396397
CHECK(secp256k1_memcmp_var(&xonly_pk, &xonly_pk_tmp, sizeof(pk)) == 0);
397398
CHECK(pk_parity == pk_parity_tmp);
398399

400+
/* Test keypair_seckey */
401+
ecount = 0;
402+
secp256k1_testrand256(sk);
403+
CHECK(secp256k1_keypair_create(ctx, &keypair, sk) == 1);
404+
CHECK(secp256k1_keypair_sec(none, sk_tmp, &keypair) == 1);
405+
CHECK(secp256k1_keypair_sec(none, NULL, &keypair) == 0);
406+
CHECK(ecount == 1);
407+
CHECK(secp256k1_keypair_sec(none, sk_tmp, NULL) == 0);
408+
CHECK(ecount == 2);
409+
CHECK(secp256k1_memcmp_var(zeros96, sk_tmp, sizeof(sk_tmp)) == 0);
410+
411+
/* keypair returns the same seckey it got */
412+
CHECK(secp256k1_keypair_create(sign, &keypair, sk) == 1);
413+
CHECK(secp256k1_keypair_sec(none, sk_tmp, &keypair) == 1);
414+
CHECK(secp256k1_memcmp_var(sk, sk_tmp, sizeof(sk_tmp)) == 0);
415+
416+
417+
/* Using an invalid keypair is fine for keypair_seckey */
418+
memset(&keypair, 0, sizeof(keypair));
419+
CHECK(secp256k1_keypair_sec(none, sk_tmp, &keypair) == 1);
420+
CHECK(secp256k1_memcmp_var(zeros96, sk_tmp, sizeof(sk_tmp)) == 0);
421+
399422
secp256k1_context_destroy(none);
400423
secp256k1_context_destroy(sign);
401424
secp256k1_context_destroy(verify);
@@ -484,6 +507,7 @@ void test_keypair_add(void) {
484507
secp256k1_pubkey output_pk_xy;
485508
secp256k1_pubkey output_pk_expected;
486509
unsigned char pk32[32];
510+
unsigned char sk32[32];
487511
int pk_parity;
488512

489513
secp256k1_testrand256(tweak);
@@ -501,7 +525,8 @@ void test_keypair_add(void) {
501525
CHECK(secp256k1_memcmp_var(&output_pk_xy, &output_pk_expected, sizeof(output_pk_xy)) == 0);
502526

503527
/* Check that the secret key in the keypair is tweaked correctly */
504-
CHECK(secp256k1_ec_pubkey_create(ctx, &output_pk_expected, &keypair.data[0]) == 1);
528+
CHECK(secp256k1_keypair_sec(none, sk32, &keypair) == 1);
529+
CHECK(secp256k1_ec_pubkey_create(ctx, &output_pk_expected, sk32) == 1);
505530
CHECK(secp256k1_memcmp_var(&output_pk_xy, &output_pk_expected, sizeof(output_pk_xy)) == 0);
506531
}
507532
secp256k1_context_destroy(none);

0 commit comments

Comments
 (0)