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