@@ -3101,10 +3101,6 @@ static void run_field_be32_overflow(void) {
31013101/* Returns true if two field elements have the same representation. */
31023102static int fe_identical (const secp256k1_fe * a , const secp256k1_fe * b ) {
31033103 int ret = 1 ;
3104- #ifdef VERIFY
3105- ret &= (a -> magnitude == b -> magnitude );
3106- ret &= (a -> normalized == b -> normalized );
3107- #endif
31083104 /* Compare the struct member that holds the limbs. */
31093105 ret &= (secp256k1_memcmp_var (a -> n , b -> n , sizeof (a -> n )) == 0 );
31103106 return ret ;
@@ -3192,16 +3188,22 @@ static void run_field_misc(void) {
31923188 q = x ;
31933189 secp256k1_fe_cmov (& x , & z , 0 );
31943190#ifdef VERIFY
3195- CHECK (x .normalized && x .magnitude == 1 );
3191+ CHECK (!x .normalized );
3192+ CHECK ((x .magnitude == q .magnitude ) || (x .magnitude == z .magnitude ));
3193+ CHECK ((x .magnitude >= q .magnitude ) && (x .magnitude >= z .magnitude ));
31963194#endif
3195+ x = q ;
31973196 secp256k1_fe_cmov (& x , & x , 1 );
31983197 CHECK (!fe_identical (& x , & z ));
31993198 CHECK (fe_identical (& x , & q ));
32003199 secp256k1_fe_cmov (& q , & z , 1 );
32013200#ifdef VERIFY
3202- CHECK (!q .normalized && q .magnitude == z .magnitude );
3201+ CHECK (!q .normalized );
3202+ CHECK ((q .magnitude == x .magnitude ) || (q .magnitude == z .magnitude ));
3203+ CHECK ((q .magnitude >= x .magnitude ) && (q .magnitude >= z .magnitude ));
32033204#endif
32043205 CHECK (fe_identical (& q , & z ));
3206+ q = z ;
32053207 secp256k1_fe_normalize_var (& x );
32063208 secp256k1_fe_normalize_var (& z );
32073209 CHECK (!secp256k1_fe_equal_var (& x , & z ));
@@ -3215,7 +3217,7 @@ static void run_field_misc(void) {
32153217 secp256k1_fe_normalize_var (& q );
32163218 secp256k1_fe_cmov (& q , & z , (j & 1 ));
32173219#ifdef VERIFY
3218- CHECK (( q .normalized != ( j & 1 )) && q .magnitude == (( j & 1 ) ? z .magnitude : 1 ) );
3220+ CHECK (! q .normalized && q .magnitude == z .magnitude );
32193221#endif
32203222 }
32213223 secp256k1_fe_normalize_var (& z );
@@ -7558,23 +7560,23 @@ static void fe_cmov_test(void) {
75587560 secp256k1_fe a = zero ;
75597561
75607562 secp256k1_fe_cmov (& r , & a , 0 );
7561- CHECK (secp256k1_memcmp_var (& r , & max , sizeof ( r )) == 0 );
7563+ CHECK (fe_identical (& r , & max ) );
75627564
75637565 r = zero ; a = max ;
75647566 secp256k1_fe_cmov (& r , & a , 1 );
7565- CHECK (secp256k1_memcmp_var (& r , & max , sizeof ( r )) == 0 );
7567+ CHECK (fe_identical (& r , & max ) );
75667568
75677569 a = zero ;
75687570 secp256k1_fe_cmov (& r , & a , 1 );
7569- CHECK (secp256k1_memcmp_var (& r , & zero , sizeof ( r )) == 0 );
7571+ CHECK (fe_identical (& r , & zero ) );
75707572
75717573 a = one ;
75727574 secp256k1_fe_cmov (& r , & a , 1 );
7573- CHECK (secp256k1_memcmp_var (& r , & one , sizeof ( r )) == 0 );
7575+ CHECK (fe_identical (& r , & one ) );
75747576
75757577 r = one ; a = zero ;
75767578 secp256k1_fe_cmov (& r , & a , 0 );
7577- CHECK (secp256k1_memcmp_var (& r , & one , sizeof ( r )) == 0 );
7579+ CHECK (fe_identical (& r , & one ) );
75787580}
75797581
75807582static void fe_storage_cmov_test (void ) {
0 commit comments