@@ -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 ));
@@ -314,7 +314,7 @@ static int64_t secp256k1_modinv64_divsteps_62_var(int64_t eta, uint64_t f0, uint
314
314
* This implements the update_de function from the explanation.
315
315
*/
316
316
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 ) {
317
- const int64_t M62 = ( int64_t )( UINT64_MAX >> 2 ) ;
317
+ const uint64_t M62 = UINT64_MAX >> 2 ;
318
318
const int64_t d0 = d -> v [0 ], d1 = d -> v [1 ], d2 = d -> v [2 ], d3 = d -> v [3 ], d4 = d -> v [4 ];
319
319
const int64_t e0 = e -> v [0 ], e1 = e -> v [1 ], e2 = e -> v [2 ], e3 = e -> v [3 ], e4 = e -> v [4 ];
320
320
const int64_t u = t -> u , v = t -> v , q = t -> q , r = t -> r ;
@@ -327,8 +327,8 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
327
327
VERIFY_CHECK (secp256k1_modinv64_mul_cmp_62 (e , 5 , & modinfo -> modulus , 1 ) < 0 ); /* e < modulus */
328
328
VERIFY_CHECK ((secp256k1_modinv64_abs (u ) + secp256k1_modinv64_abs (v )) >= 0 ); /* |u|+|v| doesn't overflow */
329
329
VERIFY_CHECK ((secp256k1_modinv64_abs (q ) + secp256k1_modinv64_abs (r )) >= 0 ); /* |q|+|r| doesn't overflow */
330
- VERIFY_CHECK ((secp256k1_modinv64_abs (u ) + secp256k1_modinv64_abs (v )) <= M62 + 1 ); /* |u|+|v| <= 2^62 */
331
- VERIFY_CHECK ((secp256k1_modinv64_abs (q ) + secp256k1_modinv64_abs (r )) <= M62 + 1 ); /* |q|+|r| <= 2^62 */
330
+ VERIFY_CHECK ((secp256k1_modinv64_abs (u ) + secp256k1_modinv64_abs (v )) <= ( int64_t ) 1 << 62 ); /* |u|+|v| <= 2^62 */
331
+ VERIFY_CHECK ((secp256k1_modinv64_abs (q ) + secp256k1_modinv64_abs (r )) <= ( int64_t ) 1 << 62 ); /* |q|+|r| <= 2^62 */
332
332
#endif
333
333
/* [md,me] start as zero; plus [u,q] if d is negative; plus [v,r] if e is negative. */
334
334
sd = d4 >> 63 ;
@@ -341,14 +341,14 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
341
341
secp256k1_i128_mul (& ce , q , d0 );
342
342
secp256k1_i128_accum_mul (& ce , r , e0 );
343
343
/* Correct md,me so that t*[d,e]+modulus*[md,me] has 62 zero bottom bits. */
344
- md -= (modinfo -> modulus_inv62 * ( uint64_t ) secp256k1_i128_to_i64 (& cd ) + md ) & M62 ;
345
- me -= (modinfo -> modulus_inv62 * ( uint64_t ) secp256k1_i128_to_i64 (& ce ) + me ) & M62 ;
344
+ md -= (modinfo -> modulus_inv62 * secp256k1_i128_to_u64 (& cd ) + md ) & M62 ;
345
+ me -= (modinfo -> modulus_inv62 * secp256k1_i128_to_u64 (& ce ) + me ) & M62 ;
346
346
/* Update the beginning of computation for t*[d,e]+modulus*[md,me] now md,me are known. */
347
347
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [0 ], md );
348
348
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [0 ], me );
349
349
/* Verify that the low 62 bits of the computation are indeed zero, and then throw them away. */
350
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cd ) & M62 ) == 0 ); secp256k1_i128_rshift (& cd , 62 );
351
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& ce ) & M62 ) == 0 ); secp256k1_i128_rshift (& ce , 62 );
350
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cd ) & M62 ) == 0 ); secp256k1_i128_rshift (& cd , 62 );
351
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& ce ) & M62 ) == 0 ); secp256k1_i128_rshift (& ce , 62 );
352
352
/* Compute limb 1 of t*[d,e]+modulus*[md,me], and store it as output limb 0 (= down shift). */
353
353
secp256k1_i128_accum_mul (& cd , u , d1 );
354
354
secp256k1_i128_accum_mul (& cd , v , e1 );
@@ -358,8 +358,8 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
358
358
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [1 ], md );
359
359
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [1 ], me );
360
360
}
361
- d -> v [0 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
362
- e -> v [0 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
361
+ d -> v [0 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
362
+ e -> v [0 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
363
363
/* Compute limb 2 of t*[d,e]+modulus*[md,me], and store it as output limb 1. */
364
364
secp256k1_i128_accum_mul (& cd , u , d2 );
365
365
secp256k1_i128_accum_mul (& cd , v , e2 );
@@ -369,8 +369,8 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
369
369
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [2 ], md );
370
370
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [2 ], me );
371
371
}
372
- d -> v [1 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
373
- e -> v [1 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
372
+ d -> v [1 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
373
+ e -> v [1 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
374
374
/* Compute limb 3 of t*[d,e]+modulus*[md,me], and store it as output limb 2. */
375
375
secp256k1_i128_accum_mul (& cd , u , d3 );
376
376
secp256k1_i128_accum_mul (& cd , v , e3 );
@@ -380,17 +380,17 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
380
380
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [3 ], md );
381
381
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [3 ], me );
382
382
}
383
- d -> v [2 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
384
- e -> v [2 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
383
+ d -> v [2 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
384
+ e -> v [2 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
385
385
/* Compute limb 4 of t*[d,e]+modulus*[md,me], and store it as output limb 3. */
386
386
secp256k1_i128_accum_mul (& cd , u , d4 );
387
387
secp256k1_i128_accum_mul (& cd , v , e4 );
388
388
secp256k1_i128_accum_mul (& ce , q , d4 );
389
389
secp256k1_i128_accum_mul (& ce , r , e4 );
390
390
secp256k1_i128_accum_mul (& cd , modinfo -> modulus .v [4 ], md );
391
391
secp256k1_i128_accum_mul (& ce , modinfo -> modulus .v [4 ], me );
392
- d -> v [3 ] = secp256k1_i128_to_i64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
393
- e -> v [3 ] = secp256k1_i128_to_i64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
392
+ d -> v [3 ] = secp256k1_i128_to_u64 (& cd ) & M62 ; secp256k1_i128_rshift (& cd , 62 );
393
+ e -> v [3 ] = secp256k1_i128_to_u64 (& ce ) & M62 ; secp256k1_i128_rshift (& ce , 62 );
394
394
/* What remains is limb 5 of t*[d,e]+modulus*[md,me]; store it as output limb 4. */
395
395
d -> v [4 ] = secp256k1_i128_to_i64 (& cd );
396
396
e -> v [4 ] = secp256k1_i128_to_i64 (& ce );
@@ -407,7 +407,7 @@ static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp
407
407
* This implements the update_fg function from the explanation.
408
408
*/
409
409
static void secp256k1_modinv64_update_fg_62 (secp256k1_modinv64_signed62 * f , secp256k1_modinv64_signed62 * g , const secp256k1_modinv64_trans2x2 * t ) {
410
- const int64_t M62 = ( int64_t )( UINT64_MAX >> 2 ) ;
410
+ const uint64_t M62 = UINT64_MAX >> 2 ;
411
411
const int64_t f0 = f -> v [0 ], f1 = f -> v [1 ], f2 = f -> v [2 ], f3 = f -> v [3 ], f4 = f -> v [4 ];
412
412
const int64_t g0 = g -> v [0 ], g1 = g -> v [1 ], g2 = g -> v [2 ], g3 = g -> v [3 ], g4 = g -> v [4 ];
413
413
const int64_t u = t -> u , v = t -> v , q = t -> q , r = t -> r ;
@@ -418,36 +418,36 @@ static void secp256k1_modinv64_update_fg_62(secp256k1_modinv64_signed62 *f, secp
418
418
secp256k1_i128_mul (& cg , q , f0 );
419
419
secp256k1_i128_accum_mul (& cg , r , g0 );
420
420
/* Verify that the bottom 62 bits of the result are zero, and then throw them away. */
421
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cf ) & M62 ) == 0 ); secp256k1_i128_rshift (& cf , 62 );
422
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cg ) & M62 ) == 0 ); secp256k1_i128_rshift (& cg , 62 );
421
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cf ) & M62 ) == 0 ); secp256k1_i128_rshift (& cf , 62 );
422
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cg ) & M62 ) == 0 ); secp256k1_i128_rshift (& cg , 62 );
423
423
/* Compute limb 1 of t*[f,g], and store it as output limb 0 (= down shift). */
424
424
secp256k1_i128_accum_mul (& cf , u , f1 );
425
425
secp256k1_i128_accum_mul (& cf , v , g1 );
426
426
secp256k1_i128_accum_mul (& cg , q , f1 );
427
427
secp256k1_i128_accum_mul (& cg , r , g1 );
428
- f -> v [0 ] = secp256k1_i128_to_i64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
429
- g -> v [0 ] = secp256k1_i128_to_i64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
428
+ f -> v [0 ] = secp256k1_i128_to_u64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
429
+ g -> v [0 ] = secp256k1_i128_to_u64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
430
430
/* Compute limb 2 of t*[f,g], and store it as output limb 1. */
431
431
secp256k1_i128_accum_mul (& cf , u , f2 );
432
432
secp256k1_i128_accum_mul (& cf , v , g2 );
433
433
secp256k1_i128_accum_mul (& cg , q , f2 );
434
434
secp256k1_i128_accum_mul (& cg , r , g2 );
435
- f -> v [1 ] = secp256k1_i128_to_i64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
436
- g -> v [1 ] = secp256k1_i128_to_i64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
435
+ f -> v [1 ] = secp256k1_i128_to_u64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
436
+ g -> v [1 ] = secp256k1_i128_to_u64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
437
437
/* Compute limb 3 of t*[f,g], and store it as output limb 2. */
438
438
secp256k1_i128_accum_mul (& cf , u , f3 );
439
439
secp256k1_i128_accum_mul (& cf , v , g3 );
440
440
secp256k1_i128_accum_mul (& cg , q , f3 );
441
441
secp256k1_i128_accum_mul (& cg , r , g3 );
442
- f -> v [2 ] = secp256k1_i128_to_i64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
443
- g -> v [2 ] = secp256k1_i128_to_i64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
442
+ f -> v [2 ] = secp256k1_i128_to_u64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
443
+ g -> v [2 ] = secp256k1_i128_to_u64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
444
444
/* Compute limb 4 of t*[f,g], and store it as output limb 3. */
445
445
secp256k1_i128_accum_mul (& cf , u , f4 );
446
446
secp256k1_i128_accum_mul (& cf , v , g4 );
447
447
secp256k1_i128_accum_mul (& cg , q , f4 );
448
448
secp256k1_i128_accum_mul (& cg , r , g4 );
449
- f -> v [3 ] = secp256k1_i128_to_i64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
450
- g -> v [3 ] = secp256k1_i128_to_i64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
449
+ f -> v [3 ] = secp256k1_i128_to_u64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
450
+ g -> v [3 ] = secp256k1_i128_to_u64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
451
451
/* What remains is limb 5 of t*[f,g]; store it as output limb 4. */
452
452
f -> v [4 ] = secp256k1_i128_to_i64 (& cf );
453
453
g -> v [4 ] = secp256k1_i128_to_i64 (& cg );
@@ -460,7 +460,7 @@ static void secp256k1_modinv64_update_fg_62(secp256k1_modinv64_signed62 *f, secp
460
460
* This implements the update_fg function from the explanation.
461
461
*/
462
462
static void secp256k1_modinv64_update_fg_62_var (int len , secp256k1_modinv64_signed62 * f , secp256k1_modinv64_signed62 * g , const secp256k1_modinv64_trans2x2 * t ) {
463
- const int64_t M62 = ( int64_t )( UINT64_MAX >> 2 ) ;
463
+ const uint64_t M62 = UINT64_MAX >> 2 ;
464
464
const int64_t u = t -> u , v = t -> v , q = t -> q , r = t -> r ;
465
465
int64_t fi , gi ;
466
466
secp256k1_int128 cf , cg ;
@@ -474,8 +474,8 @@ static void secp256k1_modinv64_update_fg_62_var(int len, secp256k1_modinv64_sign
474
474
secp256k1_i128_mul (& cg , q , fi );
475
475
secp256k1_i128_accum_mul (& cg , r , gi );
476
476
/* Verify that the bottom 62 bits of the result are zero, and then throw them away. */
477
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cf ) & M62 ) == 0 ); secp256k1_i128_rshift (& cf , 62 );
478
- VERIFY_CHECK ((secp256k1_i128_to_i64 (& cg ) & M62 ) == 0 ); secp256k1_i128_rshift (& cg , 62 );
477
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cf ) & M62 ) == 0 ); secp256k1_i128_rshift (& cf , 62 );
478
+ VERIFY_CHECK ((secp256k1_i128_to_u64 (& cg ) & M62 ) == 0 ); secp256k1_i128_rshift (& cg , 62 );
479
479
/* Now iteratively compute limb i=1..len of t*[f,g], and store them in output limb i-1 (shifting
480
480
* down by 62 bits). */
481
481
for (i = 1 ; i < len ; ++ i ) {
@@ -485,8 +485,8 @@ static void secp256k1_modinv64_update_fg_62_var(int len, secp256k1_modinv64_sign
485
485
secp256k1_i128_accum_mul (& cf , v , gi );
486
486
secp256k1_i128_accum_mul (& cg , q , fi );
487
487
secp256k1_i128_accum_mul (& cg , r , gi );
488
- f -> v [i - 1 ] = secp256k1_i128_to_i64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
489
- g -> v [i - 1 ] = secp256k1_i128_to_i64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
488
+ f -> v [i - 1 ] = secp256k1_i128_to_u64 (& cf ) & M62 ; secp256k1_i128_rshift (& cf , 62 );
489
+ g -> v [i - 1 ] = secp256k1_i128_to_u64 (& cg ) & M62 ; secp256k1_i128_rshift (& cg , 62 );
490
490
}
491
491
/* What remains is limb (len) of t*[f,g]; store it as output limb (len-1). */
492
492
f -> v [len - 1 ] = secp256k1_i128_to_i64 (& cf );
0 commit comments