@@ -47,9 +47,7 @@ void random_field_element_magnitude(secp256k1_fe_t *fe) {
4747 secp256k1_fe_negate (& zero , & zero , 0 );
4848 secp256k1_fe_mul_int (& zero , n - 1 );
4949 secp256k1_fe_add (fe , & zero );
50- #ifdef VERIFY
51- CHECK (fe -> magnitude == n );
52- #endif
50+ VERIFY_CHECK (fe -> magnitude == n );
5351}
5452
5553void random_group_element_test (secp256k1_ge_t * ge ) {
@@ -737,13 +735,22 @@ void run_field_convert(void) {
737735 CHECK (memcmp (& fes2 , & fes , sizeof (fes )) == 0 );
738736}
739737
738+ int fe_memcmp (const secp256k1_fe_t * a , const secp256k1_fe_t * b ) {
739+ secp256k1_fe_t t = * b ;
740+ #ifdef VERIFY
741+ t .magnitude = a -> magnitude ;
742+ t .normalized = a -> normalized ;
743+ #endif
744+ return memcmp (a , & t , sizeof (secp256k1_fe_t ));
745+ }
746+
740747void run_field_misc (void ) {
741748 secp256k1_fe_t x ;
742749 secp256k1_fe_t y ;
743750 secp256k1_fe_t z ;
744751 secp256k1_fe_t q ;
745752 secp256k1_fe_t fe5 = SECP256K1_FE_CONST (0 , 0 , 0 , 0 , 0 , 0 , 0 , 5 );
746- int i ;
753+ int i , j ;
747754 for (i = 0 ; i < 5 * count ; i ++ ) {
748755 secp256k1_fe_storage_t xs , ys , zs ;
749756 random_fe (& x );
@@ -756,14 +763,27 @@ void run_field_misc(void) {
756763 /* Test fe conditional move; z is not normalized here. */
757764 q = x ;
758765 secp256k1_fe_cmov (& x , & z , 0 );
766+ VERIFY_CHECK (!x .normalized && x .magnitude == z .magnitude );
759767 secp256k1_fe_cmov (& x , & x , 1 );
760- CHECK (memcmp (& x , & z , sizeof ( x ) ) != 0 );
761- CHECK (memcmp (& x , & q , sizeof ( x ) ) == 0 );
768+ CHECK (fe_memcmp (& x , & z ) != 0 );
769+ CHECK (fe_memcmp (& x , & q ) == 0 );
762770 secp256k1_fe_cmov (& q , & z , 1 );
763- CHECK (memcmp (& q , & z , sizeof (q )) == 0 );
764- /* Test storage conversion and conditional moves. */
765- secp256k1_fe_normalize (& z );
771+ VERIFY_CHECK (!q .normalized && q .magnitude == z .magnitude );
772+ CHECK (fe_memcmp (& q , & z ) == 0 );
773+ secp256k1_fe_normalize_var (& x );
774+ secp256k1_fe_normalize_var (& z );
766775 CHECK (!secp256k1_fe_equal_var (& x , & z ));
776+ secp256k1_fe_normalize_var (& q );
777+ secp256k1_fe_cmov (& q , & z , (i & 1 ));
778+ VERIFY_CHECK (q .normalized && q .magnitude == 1 );
779+ for (j = 0 ; j < 6 ; j ++ ) {
780+ secp256k1_fe_negate (& z , & z , j + 1 );
781+ secp256k1_fe_normalize_var (& q );
782+ secp256k1_fe_cmov (& q , & z , (j & 1 ));
783+ VERIFY_CHECK (!q .normalized && q .magnitude == (j + 2 ));
784+ }
785+ secp256k1_fe_normalize_var (& z );
786+ /* Test storage conversion and conditional moves. */
767787 secp256k1_fe_to_storage (& xs , & x );
768788 secp256k1_fe_to_storage (& ys , & y );
769789 secp256k1_fe_to_storage (& zs , & z );
@@ -1661,7 +1681,7 @@ void test_ecdsa_end_to_end(void) {
16611681 extra [31 ] = 0 ;
16621682 extra [0 ] = 1 ;
16631683 CHECK (secp256k1_ecdsa_sign (ctx , message , signature4 , & signaturelen4 , privkey , NULL , extra ) == 1 );
1664- CHECK (signaturelen3 > 0 );
1684+ CHECK (signaturelen4 > 0 );
16651685 CHECK ((signaturelen != signaturelen2 ) || (memcmp (signature , signature2 , signaturelen ) != 0 ));
16661686 CHECK ((signaturelen != signaturelen3 ) || (memcmp (signature , signature3 , signaturelen ) != 0 ));
16671687 CHECK ((signaturelen3 != signaturelen2 ) || (memcmp (signature3 , signature2 , signaturelen3 ) != 0 ));
0 commit comments