@@ -144,7 +144,6 @@ static void secp256k1_modinv32_normalize_30(secp256k1_modinv32_signed30 *r, int3
144
144
r -> v [7 ] = r7 ;
145
145
r -> v [8 ] = r8 ;
146
146
147
- #ifdef VERIFY
148
147
VERIFY_CHECK (r0 >> 30 == 0 );
149
148
VERIFY_CHECK (r1 >> 30 == 0 );
150
149
VERIFY_CHECK (r2 >> 30 == 0 );
@@ -156,7 +155,6 @@ static void secp256k1_modinv32_normalize_30(secp256k1_modinv32_signed30 *r, int3
156
155
VERIFY_CHECK (r8 >> 30 == 0 );
157
156
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (r , 9 , & modinfo -> modulus , 0 ) >= 0 ); /* r >= 0 */
158
157
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (r , 9 , & modinfo -> modulus , 1 ) < 0 ); /* r < modulus */
159
- #endif
160
158
}
161
159
162
160
/* Data type for transition matrices (see section 3 of explanation).
@@ -413,14 +411,13 @@ static void secp256k1_modinv32_update_de_30(secp256k1_modinv32_signed30 *d, secp
413
411
int32_t di , ei , md , me , sd , se ;
414
412
int64_t cd , ce ;
415
413
int i ;
416
- #ifdef VERIFY
417
414
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (d , 9 , & modinfo -> modulus , -2 ) > 0 ); /* d > -2*modulus */
418
415
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (d , 9 , & modinfo -> modulus , 1 ) < 0 ); /* d < modulus */
419
416
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (e , 9 , & modinfo -> modulus , -2 ) > 0 ); /* e > -2*modulus */
420
417
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (e , 9 , & modinfo -> modulus , 1 ) < 0 ); /* e < modulus */
421
418
VERIFY_CHECK (labs (u ) <= (M30 + 1 - labs (v ))); /* |u|+|v| <= 2^30 */
422
419
VERIFY_CHECK (labs (q ) <= (M30 + 1 - labs (r ))); /* |q|+|r| <= 2^30 */
423
- #endif
420
+
424
421
/* [md,me] start as zero; plus [u,q] if d is negative; plus [v,r] if e is negative. */
425
422
sd = d -> v [8 ] >> 31 ;
426
423
se = e -> v [8 ] >> 31 ;
@@ -455,12 +452,11 @@ static void secp256k1_modinv32_update_de_30(secp256k1_modinv32_signed30 *d, secp
455
452
/* What remains is limb 9 of t*[d,e]+modulus*[md,me]; store it as output limb 8. */
456
453
d -> v [8 ] = (int32_t )cd ;
457
454
e -> v [8 ] = (int32_t )ce ;
458
- #ifdef VERIFY
455
+
459
456
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (d , 9 , & modinfo -> modulus , -2 ) > 0 ); /* d > -2*modulus */
460
457
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (d , 9 , & modinfo -> modulus , 1 ) < 0 ); /* d < modulus */
461
458
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (e , 9 , & modinfo -> modulus , -2 ) > 0 ); /* e > -2*modulus */
462
459
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (e , 9 , & modinfo -> modulus , 1 ) < 0 ); /* e < modulus */
463
- #endif
464
460
}
465
461
466
462
/* Compute (t/2^30) * [f, g], where t is a transition matrix for 30 divsteps.
@@ -550,25 +546,23 @@ static void secp256k1_modinv32(secp256k1_modinv32_signed30 *x, const secp256k1_m
550
546
/* Update d,e using that transition matrix. */
551
547
secp256k1_modinv32_update_de_30 (& d , & e , & t , modinfo );
552
548
/* Update f,g using that transition matrix. */
553
- #ifdef VERIFY
554
549
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , 9 , & modinfo -> modulus , -1 ) > 0 ); /* f > -modulus */
555
550
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , 9 , & modinfo -> modulus , 1 ) <= 0 ); /* f <= modulus */
556
551
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , 9 , & modinfo -> modulus , -1 ) > 0 ); /* g > -modulus */
557
552
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , 9 , & modinfo -> modulus , 1 ) < 0 ); /* g < modulus */
558
- #endif
553
+
559
554
secp256k1_modinv32_update_fg_30 (& f , & g , & t );
560
- #ifdef VERIFY
555
+
561
556
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , 9 , & modinfo -> modulus , -1 ) > 0 ); /* f > -modulus */
562
557
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , 9 , & modinfo -> modulus , 1 ) <= 0 ); /* f <= modulus */
563
558
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , 9 , & modinfo -> modulus , -1 ) > 0 ); /* g > -modulus */
564
559
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , 9 , & modinfo -> modulus , 1 ) < 0 ); /* g < modulus */
565
- #endif
566
560
}
567
561
568
562
/* At this point sufficient iterations have been performed that g must have reached 0
569
563
* and (if g was not originally 0) f must now equal +/- GCD of the initial f, g
570
564
* values i.e. +/- 1, and d now contains +/- the modular inverse. */
571
- #ifdef VERIFY
565
+
572
566
/* g == 0 */
573
567
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , 9 , & SECP256K1_SIGNED30_ONE , 0 ) == 0 );
574
568
/* |f| == 1, or (x == 0 and d == 0 and |f|=modulus) */
@@ -578,7 +572,6 @@ static void secp256k1_modinv32(secp256k1_modinv32_signed30 *x, const secp256k1_m
578
572
secp256k1_modinv32_mul_cmp_30 (& d , 9 , & SECP256K1_SIGNED30_ONE , 0 ) == 0 &&
579
573
(secp256k1_modinv32_mul_cmp_30 (& f , 9 , & modinfo -> modulus , 1 ) == 0 ||
580
574
secp256k1_modinv32_mul_cmp_30 (& f , 9 , & modinfo -> modulus , -1 ) == 0 )));
581
- #endif
582
575
583
576
/* Optionally negate d, normalize to [0,modulus), and return it. */
584
577
secp256k1_modinv32_normalize_30 (& d , f .v [8 ], modinfo );
@@ -607,12 +600,12 @@ static void secp256k1_modinv32_var(secp256k1_modinv32_signed30 *x, const secp256
607
600
/* Update d,e using that transition matrix. */
608
601
secp256k1_modinv32_update_de_30 (& d , & e , & t , modinfo );
609
602
/* Update f,g using that transition matrix. */
610
- #ifdef VERIFY
603
+
611
604
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , -1 ) > 0 ); /* f > -modulus */
612
605
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 1 ) <= 0 ); /* f <= modulus */
613
606
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , -1 ) > 0 ); /* g > -modulus */
614
607
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , 1 ) < 0 ); /* g < modulus */
615
- #endif
608
+
616
609
secp256k1_modinv32_update_fg_30_var (len , & f , & g , & t );
617
610
/* If the bottom limb of g is 0, there is a chance g=0. */
618
611
if (g .v [0 ] == 0 ) {
@@ -637,18 +630,17 @@ static void secp256k1_modinv32_var(secp256k1_modinv32_signed30 *x, const secp256
637
630
g .v [len - 2 ] |= (uint32_t )gn << 30 ;
638
631
-- len ;
639
632
}
640
- #ifdef VERIFY
633
+
641
634
VERIFY_CHECK (++ i < 25 ); /* We should never need more than 25*30 = 750 divsteps */
642
635
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , -1 ) > 0 ); /* f > -modulus */
643
636
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 1 ) <= 0 ); /* f <= modulus */
644
637
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , -1 ) > 0 ); /* g > -modulus */
645
638
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , 1 ) < 0 ); /* g < modulus */
646
- #endif
647
639
}
648
640
649
641
/* At this point g is 0 and (if g was not originally 0) f must now equal +/- GCD of
650
642
* the initial f, g values i.e. +/- 1, and d now contains +/- the modular inverse. */
651
- #ifdef VERIFY
643
+
652
644
/* g == 0 */
653
645
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & SECP256K1_SIGNED30_ONE , 0 ) == 0 );
654
646
/* |f| == 1, or (x == 0 and d == 0 and |f|=modulus) */
@@ -658,7 +650,6 @@ static void secp256k1_modinv32_var(secp256k1_modinv32_signed30 *x, const secp256
658
650
secp256k1_modinv32_mul_cmp_30 (& d , 9 , & SECP256K1_SIGNED30_ONE , 0 ) == 0 &&
659
651
(secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 1 ) == 0 ||
660
652
secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , -1 ) == 0 )));
661
- #endif
662
653
663
654
/* Optionally negate d, normalize to [0,modulus), and return it. */
664
655
secp256k1_modinv32_normalize_30 (& d , f .v [len - 1 ], modinfo );
@@ -697,12 +688,11 @@ static int secp256k1_jacobi32_maybe_var(const secp256k1_modinv32_signed30 *x, co
697
688
secp256k1_modinv32_trans2x2 t ;
698
689
eta = secp256k1_modinv32_posdivsteps_30_var (eta , f .v [0 ] | ((uint32_t )f .v [1 ] << 30 ), g .v [0 ] | ((uint32_t )g .v [1 ] << 30 ), & t , & jac );
699
690
/* Update f,g using that transition matrix. */
700
- #ifdef VERIFY
701
691
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 0 ) > 0 ); /* f > 0 */
702
692
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 1 ) <= 0 ); /* f <= modulus */
703
693
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , 0 ) > 0 ); /* g > 0 */
704
694
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , 1 ) < 0 ); /* g < modulus */
705
- #endif
695
+
706
696
secp256k1_modinv32_update_fg_30_var (len , & f , & g , & t );
707
697
/* If the bottom limb of f is 1, there is a chance that f=1. */
708
698
if (f .v [0 ] == 1 ) {
@@ -723,12 +713,11 @@ static int secp256k1_jacobi32_maybe_var(const secp256k1_modinv32_signed30 *x, co
723
713
cond |= gn ;
724
714
/* If so, reduce length. */
725
715
if (cond == 0 ) -- len ;
726
- #ifdef VERIFY
716
+
727
717
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 0 ) > 0 ); /* f > 0 */
728
718
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& f , len , & modinfo -> modulus , 1 ) <= 0 ); /* f <= modulus */
729
719
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , 0 ) > 0 ); /* g > 0 */
730
720
VERIFY_CHECK (secp256k1_modinv32_mul_cmp_30 (& g , len , & modinfo -> modulus , 1 ) < 0 ); /* g < modulus */
731
- #endif
732
721
}
733
722
734
723
/* The loop failed to converge to f=g after 1500 iterations. Return 0, indicating unknown result. */
0 commit comments