@@ -549,26 +549,33 @@ int secp256k1_ec_seckey_verify(const secp256k1_context* ctx, const unsigned char
549549 return ret ;
550550}
551551
552- int secp256k1_ec_pubkey_create (const secp256k1_context * ctx , secp256k1_pubkey * pubkey , const unsigned char * seckey ) {
552+ static int secp256k1_ec_pubkey_create_helper (const secp256k1_ecmult_gen_context * ecmult_gen_ctx , secp256k1_scalar * seckey_scalar , secp256k1_ge * p , const unsigned char * seckey ) {
553553 secp256k1_gej pj ;
554+ int ret ;
555+
556+ ret = secp256k1_scalar_set_b32_seckey (seckey_scalar , seckey );
557+ secp256k1_scalar_cmov (seckey_scalar , & secp256k1_scalar_one , !ret );
558+
559+ secp256k1_ecmult_gen (ecmult_gen_ctx , & pj , seckey_scalar );
560+ secp256k1_ge_set_gej (p , & pj );
561+ return ret ;
562+ }
563+
564+ int secp256k1_ec_pubkey_create (const secp256k1_context * ctx , secp256k1_pubkey * pubkey , const unsigned char * seckey ) {
554565 secp256k1_ge p ;
555- secp256k1_scalar sec ;
566+ secp256k1_scalar seckey_scalar ;
556567 int ret = 0 ;
557568 VERIFY_CHECK (ctx != NULL );
558569 ARG_CHECK (pubkey != NULL );
559570 memset (pubkey , 0 , sizeof (* pubkey ));
560571 ARG_CHECK (secp256k1_ecmult_gen_context_is_built (& ctx -> ecmult_gen_ctx ));
561572 ARG_CHECK (seckey != NULL );
562573
563- ret = secp256k1_scalar_set_b32_seckey (& sec , seckey );
564- secp256k1_scalar_cmov (& sec , & secp256k1_scalar_one , !ret );
565-
566- secp256k1_ecmult_gen (& ctx -> ecmult_gen_ctx , & pj , & sec );
567- secp256k1_ge_set_gej (& p , & pj );
574+ ret = secp256k1_ec_pubkey_create_helper (& ctx -> ecmult_gen_ctx , & seckey_scalar , & p , seckey );
568575 secp256k1_pubkey_save (pubkey , & p );
569576 memczero (pubkey , sizeof (* pubkey ), !ret );
570577
571- secp256k1_scalar_clear (& sec );
578+ secp256k1_scalar_clear (& seckey_scalar );
572579 return ret ;
573580}
574581
@@ -606,24 +613,31 @@ int secp256k1_ec_pubkey_negate(const secp256k1_context* ctx, secp256k1_pubkey *p
606613 return ret ;
607614}
608615
609- int secp256k1_ec_seckey_tweak_add (const secp256k1_context * ctx , unsigned char * seckey , const unsigned char * tweak ) {
616+
617+ static int secp256k1_ec_seckey_tweak_add_helper (secp256k1_scalar * sec , const unsigned char * tweak ) {
610618 secp256k1_scalar term ;
619+ int overflow = 0 ;
620+ int ret = 0 ;
621+
622+ secp256k1_scalar_set_b32 (& term , tweak , & overflow );
623+ ret = (!overflow ) & secp256k1_eckey_privkey_tweak_add (sec , & term );
624+ secp256k1_scalar_clear (& term );
625+ return ret ;
626+ }
627+
628+ int secp256k1_ec_seckey_tweak_add (const secp256k1_context * ctx , unsigned char * seckey , const unsigned char * tweak ) {
611629 secp256k1_scalar sec ;
612630 int ret = 0 ;
613- int overflow = 0 ;
614631 VERIFY_CHECK (ctx != NULL );
615632 ARG_CHECK (seckey != NULL );
616633 ARG_CHECK (tweak != NULL );
617634
618- secp256k1_scalar_set_b32 (& term , tweak , & overflow );
619635 ret = secp256k1_scalar_set_b32_seckey (& sec , seckey );
620-
621- ret &= (!overflow ) & secp256k1_eckey_privkey_tweak_add (& sec , & term );
636+ ret &= secp256k1_ec_seckey_tweak_add_helper (& sec , tweak );
622637 secp256k1_scalar_cmov (& sec , & secp256k1_scalar_zero , !ret );
623638 secp256k1_scalar_get_b32 (seckey , & sec );
624639
625640 secp256k1_scalar_clear (& sec );
626- secp256k1_scalar_clear (& term );
627641 return ret ;
628642}
629643
0 commit comments