@@ -220,23 +220,18 @@ int secp256k1_ec_privkey_tweak_add(unsigned char *seckey, const unsigned char *t
220220 DEBUG_CHECK (seckey != NULL );
221221 DEBUG_CHECK (tweak != NULL );
222222
223- int ret = 1 ;
224223 secp256k1_num_t term ;
225224 secp256k1_num_init (& term );
226225 secp256k1_num_set_bin (& term , tweak , 32 );
227- if (secp256k1_num_cmp (& term , & secp256k1_ge_consts -> order ) >= 0 )
228- ret = 0 ;
229226 secp256k1_num_t sec ;
230227 secp256k1_num_init (& sec );
228+ secp256k1_num_set_bin (& sec , seckey , 32 );
229+
230+ int ret = secp256k1_eckey_privkey_tweak_add (& sec , & term );
231231 if (ret ) {
232- secp256k1_num_set_bin (& sec , seckey , 32 );
233- secp256k1_num_add (& sec , & sec , & term );
234- secp256k1_num_mod (& sec , & secp256k1_ge_consts -> order );
235- if (secp256k1_num_is_zero (& sec ))
236- ret = 0 ;
237- }
238- if (ret )
239232 secp256k1_num_get_bin (seckey , 32 , & sec );
233+ }
234+
240235 secp256k1_num_clear (& sec );
241236 secp256k1_num_clear (& term );
242237 secp256k1_num_free (& sec );
@@ -249,32 +244,20 @@ int secp256k1_ec_pubkey_tweak_add(unsigned char *pubkey, int pubkeylen, const un
249244 DEBUG_CHECK (pubkey != NULL );
250245 DEBUG_CHECK (tweak != NULL );
251246
252- int ret = 1 ;
253247 secp256k1_num_t term ;
254248 secp256k1_num_init (& term );
255249 secp256k1_num_set_bin (& term , tweak , 32 );
256- if (secp256k1_num_cmp (& term , & secp256k1_ge_consts -> order ) >= 0 )
257- ret = 0 ;
258250 secp256k1_ge_t p ;
251+ int ret = secp256k1_eckey_pubkey_parse (& p , pubkey , pubkeylen );
259252 if (ret ) {
260- if (!secp256k1_eckey_pubkey_parse (& p , pubkey , pubkeylen ))
261- ret = 0 ;
253+ ret = secp256k1_eckey_pubkey_tweak_add (& p , & term );
262254 }
263255 if (ret ) {
264- secp256k1_gej_t pt ;
265- secp256k1_gej_set_ge (& pt , & p );
266- secp256k1_num_t one ;
267- secp256k1_num_init (& one );
268- secp256k1_num_set_int (& one , 1 );
269- secp256k1_ecmult (& pt , & pt , & one , & term );
270- secp256k1_num_free (& one );
271- if (secp256k1_gej_is_infinity (& pt ))
272- ret = 0 ;
273- secp256k1_ge_set_gej (& p , & pt );
274256 int oldlen = pubkeylen ;
275257 secp256k1_eckey_pubkey_serialize (& p , pubkey , & pubkeylen , oldlen <= 33 );
276258 VERIFY_CHECK (pubkeylen == oldlen );
277259 }
260+
278261 secp256k1_num_free (& term );
279262 return ret ;
280263}
@@ -283,22 +266,19 @@ int secp256k1_ec_privkey_tweak_mul(unsigned char *seckey, const unsigned char *t
283266 DEBUG_CHECK (seckey != NULL );
284267 DEBUG_CHECK (tweak != NULL );
285268
286- int ret = 1 ;
287269 secp256k1_num_t factor ;
288270 secp256k1_num_init (& factor );
289271 secp256k1_num_set_bin (& factor , tweak , 32 );
290- if (secp256k1_num_is_zero (& factor ))
291- ret = 0 ;
292- if (secp256k1_num_cmp (& factor , & secp256k1_ge_consts -> order ) >= 0 )
293- ret = 0 ;
294272 secp256k1_num_t sec ;
295273 secp256k1_num_init (& sec );
274+ secp256k1_num_set_bin (& sec , seckey , 32 );
275+ int ret = secp256k1_eckey_privkey_tweak_mul (& sec , & factor );
296276 if (ret ) {
297- secp256k1_num_set_bin (& sec , seckey , 32 );
298- secp256k1_num_mod_mul (& sec , & sec , & factor , & secp256k1_ge_consts -> order );
299- }
300- if (ret )
301277 secp256k1_num_get_bin (seckey , 32 , & sec );
278+ }
279+
280+ secp256k1_num_clear (& sec );
281+ secp256k1_num_clear (& factor );
302282 secp256k1_num_free (& sec );
303283 secp256k1_num_free (& factor );
304284 return ret ;
@@ -309,32 +289,20 @@ int secp256k1_ec_pubkey_tweak_mul(unsigned char *pubkey, int pubkeylen, const un
309289 DEBUG_CHECK (pubkey != NULL );
310290 DEBUG_CHECK (tweak != NULL );
311291
312- int ret = 1 ;
313292 secp256k1_num_t factor ;
314293 secp256k1_num_init (& factor );
315294 secp256k1_num_set_bin (& factor , tweak , 32 );
316- if (secp256k1_num_is_zero (& factor ))
317- ret = 0 ;
318- if (secp256k1_num_cmp (& factor , & secp256k1_ge_consts -> order ) >= 0 )
319- ret = 0 ;
320295 secp256k1_ge_t p ;
296+ int ret = secp256k1_eckey_pubkey_parse (& p , pubkey , pubkeylen );
321297 if (ret ) {
322- if (!secp256k1_eckey_pubkey_parse (& p , pubkey , pubkeylen ))
323- ret = 0 ;
298+ ret = secp256k1_eckey_pubkey_tweak_mul (& p , & factor );
324299 }
325300 if (ret ) {
326- secp256k1_num_t zero ;
327- secp256k1_num_init (& zero );
328- secp256k1_num_set_int (& zero , 0 );
329- secp256k1_gej_t pt ;
330- secp256k1_gej_set_ge (& pt , & p );
331- secp256k1_ecmult (& pt , & pt , & factor , & zero );
332- secp256k1_num_free (& zero );
333- secp256k1_ge_set_gej (& p , & pt );
334301 int oldlen = pubkeylen ;
335302 secp256k1_eckey_pubkey_serialize (& p , pubkey , & pubkeylen , oldlen <= 33 );
336303 VERIFY_CHECK (pubkeylen == oldlen );
337304 }
305+
338306 secp256k1_num_free (& factor );
339307 return ret ;
340308}
0 commit comments