@@ -492,7 +492,7 @@ static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const
492
492
/* Operations: 7 mul, 5 sqr, 24 add/cmov/half/mul_int/negate/normalize_weak/normalizes_to_zero */
493
493
secp256k1_fe zz , u1 , u2 , s1 , s2 , t , tt , m , n , q , rr ;
494
494
secp256k1_fe m_alt , rr_alt ;
495
- int infinity , degenerate ;
495
+ int degenerate ;
496
496
VERIFY_CHECK (!b -> infinity );
497
497
VERIFY_CHECK (a -> infinity == 0 || a -> infinity == 1 );
498
498
@@ -587,7 +587,6 @@ static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const
587
587
secp256k1_fe_cmov (& n , & m , degenerate ); /* n = M^3 * Malt (2) */
588
588
secp256k1_fe_sqr (& t , & rr_alt ); /* t = Ralt^2 (1) */
589
589
secp256k1_fe_mul (& r -> z , & a -> z , & m_alt ); /* r->z = Z3 = Malt*Z (1) */
590
- infinity = secp256k1_fe_normalizes_to_zero (& r -> z ) & ~a -> infinity ;
591
590
secp256k1_fe_add (& t , & q ); /* t = Ralt^2 + Q (2) */
592
591
r -> x = t ; /* r->x = X3 = Ralt^2 + Q (2) */
593
592
secp256k1_fe_mul_int (& t , 2 ); /* t = 2*X3 (4) */
@@ -597,11 +596,23 @@ static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const
597
596
secp256k1_fe_negate (& r -> y , & t , 3 ); /* r->y = -(Ralt*(2*X3 + Q) + M^3*Malt) (4) */
598
597
secp256k1_fe_half (& r -> y ); /* r->y = Y3 = -(Ralt*(2*X3 + Q) + M^3*Malt)/2 (3) */
599
598
600
- /** In case a->infinity == 1, replace r with (b->x, b->y, 1). */
599
+ /* In case a->infinity == 1, replace r with (b->x, b->y, 1). */
601
600
secp256k1_fe_cmov (& r -> x , & b -> x , a -> infinity );
602
601
secp256k1_fe_cmov (& r -> y , & b -> y , a -> infinity );
603
602
secp256k1_fe_cmov (& r -> z , & secp256k1_fe_one , a -> infinity );
604
- r -> infinity = infinity ;
603
+
604
+ /* If a->infinity = 1 then r->infinity = (1 == 0) = 0.
605
+
606
+ Now assume a->infinity = 0. This implies Z = Z1 != 0.
607
+
608
+ Case y1 = -y2:
609
+ We have degenerate = 1, r->z = (x1 - x2) * Z.
610
+ Then r->infinity = ((x1 - x2)Z == 0) = (x1 == -x2) = (a == -b).
611
+
612
+ Case y1 != -y2:
613
+ We have degenerate = 0, r->z = (y1 + y2) * Z.
614
+ Then r->infinity = ((y1 + y2)Z == 0) = (y1 == y2) = 0. */
615
+ r -> infinity = secp256k1_fe_normalizes_to_zero (& r -> z );
605
616
}
606
617
607
618
static void secp256k1_gej_rescale (secp256k1_gej * r , const secp256k1_fe * s ) {
0 commit comments