@@ -311,6 +311,7 @@ void test_xonly_pubkey_tweak_recursive(void) {
311
311
312
312
void test_keypair (void ) {
313
313
unsigned char sk [32 ];
314
+ unsigned char sk_tmp [32 ];
314
315
unsigned char zeros96 [96 ] = { 0 };
315
316
unsigned char overflows [32 ];
316
317
secp256k1_keypair keypair ;
@@ -396,6 +397,28 @@ void test_keypair(void) {
396
397
CHECK (secp256k1_memcmp_var (& xonly_pk , & xonly_pk_tmp , sizeof (pk )) == 0 );
397
398
CHECK (pk_parity == pk_parity_tmp );
398
399
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
+
399
422
secp256k1_context_destroy (none );
400
423
secp256k1_context_destroy (sign );
401
424
secp256k1_context_destroy (verify );
@@ -484,6 +507,7 @@ void test_keypair_add(void) {
484
507
secp256k1_pubkey output_pk_xy ;
485
508
secp256k1_pubkey output_pk_expected ;
486
509
unsigned char pk32 [32 ];
510
+ unsigned char sk32 [32 ];
487
511
int pk_parity ;
488
512
489
513
secp256k1_testrand256 (tweak );
@@ -501,7 +525,8 @@ void test_keypair_add(void) {
501
525
CHECK (secp256k1_memcmp_var (& output_pk_xy , & output_pk_expected , sizeof (output_pk_xy )) == 0 );
502
526
503
527
/* 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 );
505
530
CHECK (secp256k1_memcmp_var (& output_pk_xy , & output_pk_expected , sizeof (output_pk_xy )) == 0 );
506
531
}
507
532
secp256k1_context_destroy (none );
0 commit comments