@@ -632,25 +632,26 @@ int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *
632
632
return secp256k1_ec_seckey_tweak_add (ctx , seckey , tweak );
633
633
}
634
634
635
+ static int secp256k1_ec_pubkey_tweak_add_helper (const secp256k1_ecmult_context * ecmult_ctx , secp256k1_ge * p , const unsigned char * tweak ) {
636
+ secp256k1_scalar term ;
637
+ int overflow = 0 ;
638
+ secp256k1_scalar_set_b32 (& term , tweak , & overflow );
639
+ return !overflow && secp256k1_eckey_pubkey_tweak_add (ecmult_ctx , p , & term );
640
+ }
641
+
635
642
int secp256k1_ec_pubkey_tweak_add (const secp256k1_context * ctx , secp256k1_pubkey * pubkey , const unsigned char * tweak ) {
636
643
secp256k1_ge p ;
637
- secp256k1_scalar term ;
638
644
int ret = 0 ;
639
- int overflow = 0 ;
640
645
VERIFY_CHECK (ctx != NULL );
641
646
ARG_CHECK (secp256k1_ecmult_context_is_built (& ctx -> ecmult_ctx ));
642
647
ARG_CHECK (pubkey != NULL );
643
648
ARG_CHECK (tweak != NULL );
644
649
645
- secp256k1_scalar_set_b32 (& term , tweak , & overflow );
646
- ret = !overflow && secp256k1_pubkey_load (ctx , & p , pubkey );
650
+ ret = secp256k1_pubkey_load (ctx , & p , pubkey );
647
651
memset (pubkey , 0 , sizeof (* pubkey ));
652
+ ret = ret && secp256k1_ec_pubkey_tweak_add_helper (& ctx -> ecmult_ctx , & p , tweak );
648
653
if (ret ) {
649
- if (secp256k1_eckey_pubkey_tweak_add (& ctx -> ecmult_ctx , & p , & term )) {
650
- secp256k1_pubkey_save (pubkey , & p );
651
- } else {
652
- ret = 0 ;
653
- }
654
+ secp256k1_pubkey_save (pubkey , & p );
654
655
}
655
656
656
657
return ret ;
0 commit comments