@@ -550,26 +550,33 @@ int secp256k1_ec_seckey_verify(const secp256k1_context* ctx, const unsigned char
550
550
return ret ;
551
551
}
552
552
553
- int secp256k1_ec_pubkey_create (const secp256k1_context * ctx , secp256k1_pubkey * pubkey , const unsigned char * seckey ) {
553
+ 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 ) {
554
554
secp256k1_gej pj ;
555
+ int ret ;
556
+
557
+ ret = secp256k1_scalar_set_b32_seckey (seckey_scalar , seckey );
558
+ secp256k1_scalar_cmov (seckey_scalar , & secp256k1_scalar_one , !ret );
559
+
560
+ secp256k1_ecmult_gen (ecmult_gen_ctx , & pj , seckey_scalar );
561
+ secp256k1_ge_set_gej (p , & pj );
562
+ return ret ;
563
+ }
564
+
565
+ int secp256k1_ec_pubkey_create (const secp256k1_context * ctx , secp256k1_pubkey * pubkey , const unsigned char * seckey ) {
555
566
secp256k1_ge p ;
556
- secp256k1_scalar sec ;
567
+ secp256k1_scalar seckey_scalar ;
557
568
int ret = 0 ;
558
569
VERIFY_CHECK (ctx != NULL );
559
570
ARG_CHECK (pubkey != NULL );
560
571
memset (pubkey , 0 , sizeof (* pubkey ));
561
572
ARG_CHECK (secp256k1_ecmult_gen_context_is_built (& ctx -> ecmult_gen_ctx ));
562
573
ARG_CHECK (seckey != NULL );
563
574
564
- ret = secp256k1_scalar_set_b32_seckey (& sec , seckey );
565
- secp256k1_scalar_cmov (& sec , & secp256k1_scalar_one , !ret );
566
-
567
- secp256k1_ecmult_gen (& ctx -> ecmult_gen_ctx , & pj , & sec );
568
- secp256k1_ge_set_gej (& p , & pj );
575
+ ret = secp256k1_ec_pubkey_create_helper (& ctx -> ecmult_gen_ctx , & seckey_scalar , & p , seckey );
569
576
secp256k1_pubkey_save (pubkey , & p );
570
577
memczero (pubkey , sizeof (* pubkey ), !ret );
571
578
572
- secp256k1_scalar_clear (& sec );
579
+ secp256k1_scalar_clear (& seckey_scalar );
573
580
return ret ;
574
581
}
575
582
@@ -607,24 +614,31 @@ int secp256k1_ec_pubkey_negate(const secp256k1_context* ctx, secp256k1_pubkey *p
607
614
return ret ;
608
615
}
609
616
610
- int secp256k1_ec_seckey_tweak_add (const secp256k1_context * ctx , unsigned char * seckey , const unsigned char * tweak ) {
617
+
618
+ static int secp256k1_ec_seckey_tweak_add_helper (secp256k1_scalar * sec , const unsigned char * tweak ) {
611
619
secp256k1_scalar term ;
620
+ int overflow = 0 ;
621
+ int ret = 0 ;
622
+
623
+ secp256k1_scalar_set_b32 (& term , tweak , & overflow );
624
+ ret = (!overflow ) & secp256k1_eckey_privkey_tweak_add (sec , & term );
625
+ secp256k1_scalar_clear (& term );
626
+ return ret ;
627
+ }
628
+
629
+ int secp256k1_ec_seckey_tweak_add (const secp256k1_context * ctx , unsigned char * seckey , const unsigned char * tweak ) {
612
630
secp256k1_scalar sec ;
613
631
int ret = 0 ;
614
- int overflow = 0 ;
615
632
VERIFY_CHECK (ctx != NULL );
616
633
ARG_CHECK (seckey != NULL );
617
634
ARG_CHECK (tweak != NULL );
618
635
619
- secp256k1_scalar_set_b32 (& term , tweak , & overflow );
620
636
ret = secp256k1_scalar_set_b32_seckey (& sec , seckey );
621
-
622
- ret &= (!overflow ) & secp256k1_eckey_privkey_tweak_add (& sec , & term );
637
+ ret &= secp256k1_ec_seckey_tweak_add_helper (& sec , tweak );
623
638
secp256k1_scalar_cmov (& sec , & secp256k1_scalar_zero , !ret );
624
639
secp256k1_scalar_get_b32 (seckey , & sec );
625
640
626
641
secp256k1_scalar_clear (& sec );
627
- secp256k1_scalar_clear (& term );
628
642
return ret ;
629
643
}
630
644
0 commit comments