@@ -46,7 +46,7 @@ static const secp256k1_fe_t secp256k1_ecdsa_const_p_minus_order = SECP256K1_FE_C
4646 0 , 0 , 0 , 1 , 0x45512319UL , 0x50B75FC4UL , 0x402DA172UL , 0x2FC9BAEEUL
4747);
4848
49- static int secp256k1_ecdsa_sig_parse (secp256k1_ecdsa_sig_t * r , const unsigned char * sig , int size ) {
49+ static int secp256k1_ecdsa_sig_parse (secp256k1_scalar_t * rr , secp256k1_scalar_t * rs , const unsigned char * sig , int size ) {
5050 unsigned char ra [32 ] = {0 }, sa [32 ] = {0 };
5151 const unsigned char * rp ;
5252 const unsigned char * sp ;
@@ -98,26 +98,27 @@ static int secp256k1_ecdsa_sig_parse(secp256k1_ecdsa_sig_t *r, const unsigned ch
9898 memcpy (ra + 32 - lenr , rp , lenr );
9999 memcpy (sa + 32 - lens , sp , lens );
100100 overflow = 0 ;
101- secp256k1_scalar_set_b32 (& r -> r , ra , & overflow );
101+ secp256k1_scalar_set_b32 (rr , ra , & overflow );
102102 if (overflow ) {
103103 return 0 ;
104104 }
105- secp256k1_scalar_set_b32 (& r -> s , sa , & overflow );
105+ secp256k1_scalar_set_b32 (rs , sa , & overflow );
106106 if (overflow ) {
107107 return 0 ;
108108 }
109109 return 1 ;
110110}
111111
112- static int secp256k1_ecdsa_sig_serialize (unsigned char * sig , int * size , const secp256k1_ecdsa_sig_t * a ) {
112+ static int secp256k1_ecdsa_sig_serialize (unsigned char * sig , int * size , const secp256k1_scalar_t * ar , const secp256k1_scalar_t * as ) {
113113 unsigned char r [33 ] = {0 }, s [33 ] = {0 };
114114 unsigned char * rp = r , * sp = s ;
115115 int lenR = 33 , lenS = 33 ;
116- secp256k1_scalar_get_b32 (& r [1 ], & a -> r );
117- secp256k1_scalar_get_b32 (& s [1 ], & a -> s );
116+ secp256k1_scalar_get_b32 (& r [1 ], ar );
117+ secp256k1_scalar_get_b32 (& s [1 ], as );
118118 while (lenR > 1 && rp [0 ] == 0 && rp [1 ] < 0x80 ) { lenR -- ; rp ++ ; }
119119 while (lenS > 1 && sp [0 ] == 0 && sp [1 ] < 0x80 ) { lenS -- ; sp ++ ; }
120120 if (* size < 6 + lenS + lenR ) {
121+ * size = 6 + lenS + lenR ;
121122 return 0 ;
122123 }
123124 * size = 6 + lenS + lenR ;
@@ -132,26 +133,26 @@ static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, int *size, const se
132133 return 1 ;
133134}
134135
135- static int secp256k1_ecdsa_sig_verify (const secp256k1_ecmult_context_t * ctx , const secp256k1_ecdsa_sig_t * sig , const secp256k1_ge_t * pubkey , const secp256k1_scalar_t * message ) {
136+ static int secp256k1_ecdsa_sig_verify (const secp256k1_ecmult_context_t * ctx , const secp256k1_scalar_t * sigr , const secp256k1_scalar_t * sigs , const secp256k1_ge_t * pubkey , const secp256k1_scalar_t * message ) {
136137 unsigned char c [32 ];
137138 secp256k1_scalar_t sn , u1 , u2 ;
138139 secp256k1_fe_t xr ;
139140 secp256k1_gej_t pubkeyj ;
140141 secp256k1_gej_t pr ;
141142
142- if (secp256k1_scalar_is_zero (& sig -> r ) || secp256k1_scalar_is_zero (& sig -> s )) {
143+ if (secp256k1_scalar_is_zero (sigr ) || secp256k1_scalar_is_zero (sigs )) {
143144 return 0 ;
144145 }
145146
146- secp256k1_scalar_inverse_var (& sn , & sig -> s );
147+ secp256k1_scalar_inverse_var (& sn , sigs );
147148 secp256k1_scalar_mul (& u1 , & sn , message );
148- secp256k1_scalar_mul (& u2 , & sn , & sig -> r );
149+ secp256k1_scalar_mul (& u2 , & sn , sigr );
149150 secp256k1_gej_set_ge (& pubkeyj , pubkey );
150151 secp256k1_ecmult (ctx , & pr , & pubkeyj , & u2 , & u1 );
151152 if (secp256k1_gej_is_infinity (& pr )) {
152153 return 0 ;
153154 }
154- secp256k1_scalar_get_b32 (c , & sig -> r );
155+ secp256k1_scalar_get_b32 (c , sigr );
155156 secp256k1_fe_set_b32 (& xr , c );
156157
157158 /** We now have the recomputed R point in pr, and its claimed x coordinate (modulo n)
@@ -186,19 +187,19 @@ static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context_t *ctx, con
186187 return 0 ;
187188}
188189
189- static int secp256k1_ecdsa_sig_recover (const secp256k1_ecmult_context_t * ctx , const secp256k1_ecdsa_sig_t * sig , secp256k1_ge_t * pubkey , const secp256k1_scalar_t * message , int recid ) {
190+ static int secp256k1_ecdsa_sig_recover (const secp256k1_ecmult_context_t * ctx , const secp256k1_scalar_t * sigr , const secp256k1_scalar_t * sigs , secp256k1_ge_t * pubkey , const secp256k1_scalar_t * message , int recid ) {
190191 unsigned char brx [32 ];
191192 secp256k1_fe_t fx ;
192193 secp256k1_ge_t x ;
193194 secp256k1_gej_t xj ;
194195 secp256k1_scalar_t rn , u1 , u2 ;
195196 secp256k1_gej_t qj ;
196197
197- if (secp256k1_scalar_is_zero (& sig -> r ) || secp256k1_scalar_is_zero (& sig -> s )) {
198+ if (secp256k1_scalar_is_zero (sigr ) || secp256k1_scalar_is_zero (sigs )) {
198199 return 0 ;
199200 }
200201
201- secp256k1_scalar_get_b32 (brx , & sig -> r );
202+ secp256k1_scalar_get_b32 (brx , sigr );
202203 VERIFY_CHECK (secp256k1_fe_set_b32 (& fx , brx )); /* brx comes from a scalar, so is less than the order; certainly less than p */
203204 if (recid & 2 ) {
204205 if (secp256k1_fe_cmp_var (& fx , & secp256k1_ecdsa_const_p_minus_order ) >= 0 ) {
@@ -210,16 +211,16 @@ static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context_t *ctx, co
210211 return 0 ;
211212 }
212213 secp256k1_gej_set_ge (& xj , & x );
213- secp256k1_scalar_inverse_var (& rn , & sig -> r );
214+ secp256k1_scalar_inverse_var (& rn , sigr );
214215 secp256k1_scalar_mul (& u1 , & rn , message );
215216 secp256k1_scalar_negate (& u1 , & u1 );
216- secp256k1_scalar_mul (& u2 , & rn , & sig -> s );
217+ secp256k1_scalar_mul (& u2 , & rn , sigs );
217218 secp256k1_ecmult (ctx , & qj , & xj , & u2 , & u1 );
218219 secp256k1_ge_set_gej_var (pubkey , & qj );
219220 return !secp256k1_gej_is_infinity (& qj );
220221}
221222
222- static int secp256k1_ecdsa_sig_sign (const secp256k1_ecmult_gen_context_t * ctx , secp256k1_ecdsa_sig_t * sig , const secp256k1_scalar_t * seckey , const secp256k1_scalar_t * message , const secp256k1_scalar_t * nonce , int * recid ) {
223+ static int secp256k1_ecdsa_sig_sign (const secp256k1_ecmult_gen_context_t * ctx , secp256k1_scalar_t * sigr , secp256k1_scalar_t * sigs , const secp256k1_scalar_t * seckey , const secp256k1_scalar_t * message , const secp256k1_scalar_t * nonce , int * recid ) {
223224 unsigned char b [32 ];
224225 secp256k1_gej_t rp ;
225226 secp256k1_ge_t r ;
@@ -231,8 +232,8 @@ static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context_t *ctx, s
231232 secp256k1_fe_normalize (& r .x );
232233 secp256k1_fe_normalize (& r .y );
233234 secp256k1_fe_get_b32 (b , & r .x );
234- secp256k1_scalar_set_b32 (& sig -> r , b , & overflow );
235- if (secp256k1_scalar_is_zero (& sig -> r )) {
235+ secp256k1_scalar_set_b32 (sigr , b , & overflow );
236+ if (secp256k1_scalar_is_zero (sigr )) {
236237 /* P.x = order is on the curve, so technically sig->r could end up zero, which would be an invalid signature. */
237238 secp256k1_gej_clear (& rp );
238239 secp256k1_ge_clear (& r );
@@ -241,18 +242,18 @@ static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context_t *ctx, s
241242 if (recid ) {
242243 * recid = (overflow ? 2 : 0 ) | (secp256k1_fe_is_odd (& r .y ) ? 1 : 0 );
243244 }
244- secp256k1_scalar_mul (& n , & sig -> r , seckey );
245+ secp256k1_scalar_mul (& n , sigr , seckey );
245246 secp256k1_scalar_add (& n , & n , message );
246- secp256k1_scalar_inverse (& sig -> s , nonce );
247- secp256k1_scalar_mul (& sig -> s , & sig -> s , & n );
247+ secp256k1_scalar_inverse (sigs , nonce );
248+ secp256k1_scalar_mul (sigs , sigs , & n );
248249 secp256k1_scalar_clear (& n );
249250 secp256k1_gej_clear (& rp );
250251 secp256k1_ge_clear (& r );
251- if (secp256k1_scalar_is_zero (& sig -> s )) {
252+ if (secp256k1_scalar_is_zero (sigs )) {
252253 return 0 ;
253254 }
254- if (secp256k1_scalar_is_high (& sig -> s )) {
255- secp256k1_scalar_negate (& sig -> s , & sig -> s );
255+ if (secp256k1_scalar_is_high (sigs )) {
256+ secp256k1_scalar_negate (sigs , sigs );
256257 if (recid ) {
257258 * recid ^= 1 ;
258259 }
0 commit comments