@@ -39,13 +39,13 @@ static const secp256k1_modinv64_signed62 SECP256K1_SIGNED62_ONE = {{1}};
39
39
40
40
/* Compute a*factor and put it in r. All but the top limb in r will be in range [0,2^62). */
41
41
static void secp256k1_modinv64_mul_62 (secp256k1_modinv64_signed62 * r , const secp256k1_modinv64_signed62 * a , int alen , int64_t factor ) {
42
- const int64_t M62 = ( int64_t )( UINT64_MAX >> 2 ) ;
42
+ const uint64_t M62 = UINT64_MAX >> 2 ;
43
43
secp256k1_int128 c , d ;
44
44
int i ;
45
45
secp256k1_i128_from_i64 (& c , 0 );
46
46
for (i = 0 ; i < 4 ; ++ i ) {
47
47
if (i < alen ) secp256k1_i128_accum_mul (& c , a -> v [i ], factor );
48
- r -> v [i ] = secp256k1_i128_to_i64 (& c ) & M62 ; secp256k1_i128_rshift (& c , 62 );
48
+ r -> v [i ] = secp256k1_i128_to_u64 (& c ) & M62 ; secp256k1_i128_rshift (& c , 62 );
49
49
}
50
50
if (4 < alen ) secp256k1_i128_accum_mul (& c , a -> v [4 ], factor );
51
51
secp256k1_i128_from_i64 (& d , secp256k1_i128_to_i64 (& c ));
@@ -244,7 +244,7 @@ static int64_t secp256k1_modinv64_divsteps_62_var(int64_t eta, uint64_t f0, uint
244
244
* This implements the update_de function from the explanation.
245
245
*/
246
246
static void secp256k1_modinv64_update_de_62 (secp256k1_modinv64_signed62 * d , secp256k1_modinv64_signed62 * e , const secp256k1_modinv64_trans2x2 * t , const secp256k1_modinv64_modinfo * modinfo ) {
247
- const int64_t M62 = ( int64_t )( UINT64_MAX >> 2 ) ;
247
+ const uint64_t M62 = UINT64_MAX >> 2 ;
248
248
const int64_t d0 = d -> v [0 ], d1 = d -> v [1 ], d2 = d -> v [2 ], d3 = d -> v [3 ], d4 = d -> v [4 ];
249
249
const int64_t e0 = e -> v [0 ], e1 = e -> v [1 ], e2 = e -> v [2 ], e3 = e -> v [3 ], e4 = e -> v [4 ];
250
250
const int64_t u = t -> u , v = t -> v , q = t -> q , r = t -> r ;
@@ -257,8 +257,8 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
257
257
VERIFY_CHECK (secp256k1_modinv64_mul_cmp_62 (e , 5 , & modinfo -> modulus , 1 ) < 0 ); /* e < modulus */
258
258
VERIFY_CHECK ((secp256k1_modinv64_abs (u ) + secp256k1_modinv64_abs (v )) >= 0 ); /* |u|+|v| doesn't overflow */
259
259
VERIFY_CHECK ((secp256k1_modinv64_abs (q ) + secp256k1_modinv64_abs (r )) >= 0 ); /* |q|+|r| doesn't overflow */
260
- VERIFY_CHECK ((secp256k1_modinv64_abs (u ) + secp256k1_modinv64_abs (v )) <= M62 + 1 ); /* |u|+|v| <= 2^62 */
261
- VERIFY_CHECK ((secp256k1_modinv64_abs (q ) + secp256k1_modinv64_abs (r )) <= M62 + 1 ); /* |q|+|r| <= 2^62 */
260
+ VERIFY_CHECK ((secp256k1_modinv64_abs (u ) + secp256k1_modinv64_abs (v )) <= ( int64_t ) 1 << 62 ); /* |u|+|v| <= 2^62 */
261
+ VERIFY_CHECK ((secp256k1_modinv64_abs (q ) + secp256k1_modinv64_abs (r )) <= ( int64_t ) 1 << 62 ); /* |q|+|r| <= 2^62 */
262
262
#endif
263
263
/* [md,me] start as zero; plus [u,q] if d is negative; plus [v,r] if e is negative. */
264
264
sd = d4 >> 63 ;
@@ -271,14 +271,14 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
271
271
secp256k1_i128_mul (& ce , q , d0 );
272
272
secp256k1_i128_accum_mul (& ce , r , e0 );
273
273
/* Correct md,me so that t*[d,e]+modulus*[md,me] has 62 zero bottom bits. */
274
- md -= (modinfo -> modulus_inv62 * ( uint64_t ) secp256k1_i128_to_i64 (& cd ) + md ) & M62 ;
275
- me -= (modinfo -> modulus_inv62 * ( uint64_t ) secp256k1_i128_to_i64 (& ce ) + me ) & M62 ;
274
+ md -= (modinfo -> modulus_inv62 * secp256k1_i128_to_u64 (& cd ) + md ) & M62 ;
275
+ me -= (modinfo -> modulus_inv62 * secp256k1_i128_to_u64 (& ce ) + me ) & M62 ;
276
276
/* Update the beginning of computation for t*[d,e]+modulus*[md,me] now md,me are known. */
277
277
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [0 ], md );
278
278
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [0 ], me );
279
279
/* Verify that the low 62 bits of the computation are indeed zero, and then throw them away. */
280
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cd ) & M62 ) == 0 ); secp256k1_i128_rshift (& cd , 62 );
281
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& ce ) & M62 ) == 0 ); secp256k1_i128_rshift (& ce , 62 );
280
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cd ) & M62 ) == 0 ); secp256k1_i128_rshift (& cd , 62 );
281
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& ce ) & M62 ) == 0 ); secp256k1_i128_rshift (& ce , 62 );
282
282
/* Compute limb 1 of t*[d,e]+modulus*[md,me], and store it as output limb 0 (= down shift). */
283
283
secp256k1_i128_accum_mul (& cd , u , d1 );
284
284
secp256k1_i128_accum_mul (& cd , v , e1 );
@@ -288,8 +288,8 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
288
288
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [1 ], md );
289
289
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [1 ], me );
290
290
}
291
- d -> v [0 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
292
- e -> v [0 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
291
+ d -> v [0 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
292
+ e -> v [0 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
293
293
/* Compute limb 2 of t*[d,e]+modulus*[md,me], and store it as output limb 1. */
294
294
secp256k1_i128_accum_mul (& cd , u , d2 );
295
295
secp256k1_i128_accum_mul (& cd , v , e2 );
@@ -299,8 +299,8 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
299
299
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [2 ], md );
300
300
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [2 ], me );
301
301
}
302
- d -> v [1 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
303
- e -> v [1 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
302
+ d -> v [1 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
303
+ e -> v [1 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
304
304
/* Compute limb 3 of t*[d,e]+modulus*[md,me], and store it as output limb 2. */
305
305
secp256k1_i128_accum_mul (& cd , u , d3 );
306
306
secp256k1_i128_accum_mul (& cd , v , e3 );
@@ -310,17 +310,17 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
310
310
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [3 ], md );
311
311
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [3 ], me );
312
312
}
313
- d -> v [2 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
314
- e -> v [2 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
313
+ d -> v [2 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
314
+ e -> v [2 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
315
315
/* Compute limb 4 of t*[d,e]+modulus*[md,me], and store it as output limb 3. */
316
316
secp256k1_i128_accum_mul (& cd , u , d4 );
317
317
secp256k1_i128_accum_mul (& cd , v , e4 );
318
318
secp256k1_i128_accum_mul (& ce , q , d4 );
319
319
secp256k1_i128_accum_mul (& ce , r , e4 );
320
320
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [4 ], md );
321
321
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [4 ], me );
322
- d -> v [3 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
323
- e -> v [3 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
322
+ d -> v [3 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
323
+ e -> v [3 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
324
324
/* What remains is limb 5 of t*[d,e]+modulus*[md,me]; store it as output limb 4. */
325
325
d -> v [4 ] = secp256k1_i128_to_i64 (& cd );
326
326
e -> v [4 ] = secp256k1_i128_to_i64 (& ce );
@@ -339,7 +339,7 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
339
339
* This implements the update_fg function from the explanation.
340
340
*/
341
341
static void secp256k1_modinv64_update_fg_62_var (int len , secp256k1_modinv64_signed62 * f , secp256k1_modinv64_signed62 * g , const secp256k1_modinv64_trans2x2 * t ) {
342
- const int64_t M62 = ( int64_t )( UINT64_MAX >> 2 ) ;
342
+ const uint64_t M62 = UINT64_MAX >> 2 ;
343
343
const int64_t u = t -> u , v = t -> v , q = t -> q , r = t -> r ;
344
344
int64_t fi , gi ;
345
345
secp256k1_int128 cf , cg ;
@@ -353,8 +353,8 @@ static void secp256k1_modinv64_update_fg_62_var(int len, secp256k1_modinv64_sign
353
353
secp256k1_i128_mul (& cg , q , fi );
354
354
secp256k1_i128_accum_mul (& cg , r , gi );
355
355
/* Verify that the bottom 62 bits of the result are zero, and then throw them away. */
356
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cf ) & M62 ) == 0 ); secp256k1_i128_rshift (& cf , 62 );
357
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cg ) & M62 ) == 0 ); secp256k1_i128_rshift (& cg , 62 );
356
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cf ) & M62 ) == 0 ); secp256k1_i128_rshift (& cf , 62 );
357
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cg ) & M62 ) == 0 ); secp256k1_i128_rshift (& cg , 62 );
358
358
/* Now iteratively compute limb i=1..len of t*[f,g], and store them in output limb i-1 (shifting
359
359
* down by 62 bits). */
360
360
for (i = 1 ; i < len ; ++ i ) {
0 commit comments