@@ -311,6 +311,7 @@ void test_xonly_pubkey_tweak_recursive(void) {
311311
312312void 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