@@ -108,7 +108,7 @@ static int secp256k1_schnorr_adaptor_presign_internal(const secp256k1_context *c
108
108
secp256k1_ge r , rp ;
109
109
secp256k1_ge pk ;
110
110
secp256k1_ge adaptor_ge ;
111
- unsigned char nonce32 [32 ] = {0 };
111
+ unsigned char nonce32 [32 ] = { 0 };
112
112
unsigned char pk_buf [32 ];
113
113
unsigned char seckey [32 ];
114
114
unsigned char adaptor_buff [33 ];
@@ -177,11 +177,12 @@ static int secp256k1_schnorr_adaptor_presign_internal(const secp256k1_context *c
177
177
if (secp256k1_fe_is_odd (& rp .y )) {
178
178
secp256k1_scalar_negate (& k , & k );
179
179
}
180
+ ret &= secp256k1_eckey_pubkey_serialize (& rp , pre_sig65 , & cmprssd_len , 1 );
181
+
180
182
secp256k1_schnorrsig_challenge (& e , & pre_sig65 [1 ], msg32 , 32 , pk_buf );
181
183
secp256k1_scalar_mul (& e , & e , & sk );
182
184
secp256k1_scalar_add (& e , & e , & k );
183
185
secp256k1_scalar_get_b32 (& pre_sig65 [33 ], & e );
184
- ret &= secp256k1_eckey_pubkey_serialize (& rp , pre_sig65 , & cmprssd_len , 1 );
185
186
186
187
secp256k1_memczero (pre_sig65 , 65 , !ret );
187
188
secp256k1_scalar_clear (& k );
@@ -233,7 +234,7 @@ int secp256k1_schnorr_adaptor_extract(const secp256k1_context *ctx, secp256k1_pu
233
234
secp256k1_fe_get_b32 (buf , & pk .x );
234
235
secp256k1_schnorrsig_challenge (& e , & pre_sig65 [1 ], msg32 , 32 , buf );
235
236
236
- /* Compute R = s*G - e *P */
237
+ /* Compute R = s*G + (-e) *P */
237
238
secp256k1_scalar_negate (& e , & e );
238
239
secp256k1_gej_set_ge (& pkj , & pk );
239
240
secp256k1_ecmult (& rj , & pkj , & e , & s );
@@ -245,12 +246,13 @@ int secp256k1_schnorr_adaptor_extract(const secp256k1_context *ctx, secp256k1_pu
245
246
*
246
247
* `adaptor_presign` negates the secret nonce k when R’.y is odd, during
247
248
* the computation of the s value (i.e., presig[33:65]). Therefore, we need
248
- * to negate R = k*G (if R'.y is odd) before subtracting it from R'.
249
+ * to negate R = k*G (if R'.y is odd) before subtracting it from R' = R + T .
249
250
*
250
251
* T = R' - R if R'.y is even
251
- * = R' + R if R'.y is odd
252
+ * = R' + R if R'.y is odd
252
253
*/
253
- if (secp256k1_fe_is_odd (& rp .y )) {
254
+ secp256k1_fe_normalize_var (& rp .y );
255
+ if (!secp256k1_fe_is_odd (& rp .y )) {
254
256
secp256k1_gej_neg (& rj , & rj );
255
257
}
256
258
secp256k1_gej_add_ge_var (& adaptor_gej , & rj , & rp , NULL );
0 commit comments