@@ -3285,18 +3285,31 @@ static void run_fe_mul(void) {
3285
3285
}
3286
3286
3287
3287
static void run_sqr (void ) {
3288
- secp256k1_fe x , s ;
3288
+ int i ;
3289
+ secp256k1_fe x , y , lhs , rhs , tmp ;
3289
3290
3290
- {
3291
- int i ;
3292
- secp256k1_fe_set_int (& x , 1 );
3293
- secp256k1_fe_negate (& x , & x , 1 );
3291
+ secp256k1_fe_set_int (& x , 1 );
3292
+ secp256k1_fe_negate (& x , & x , 1 );
3294
3293
3295
- for (i = 1 ; i <= 512 ; ++ i ) {
3296
- secp256k1_fe_mul_int (& x , 2 );
3297
- secp256k1_fe_normalize (& x );
3298
- secp256k1_fe_sqr (& s , & x );
3299
- }
3294
+ for (i = 1 ; i <= 512 ; ++ i ) {
3295
+ secp256k1_fe_mul_int (& x , 2 );
3296
+ secp256k1_fe_normalize (& x );
3297
+
3298
+ /* Check that (x+y)*(x-y) = x^2 - y*2 for some random values y */
3299
+ random_fe_test (& y );
3300
+
3301
+ lhs = x ;
3302
+ secp256k1_fe_add (& lhs , & y ); /* lhs = x+y */
3303
+ secp256k1_fe_negate (& tmp , & y , 1 ); /* tmp = -y */
3304
+ secp256k1_fe_add (& tmp , & x ); /* tmp = x-y */
3305
+ secp256k1_fe_mul (& lhs , & lhs , & tmp ); /* lhs = (x+y)*(x-y) */
3306
+
3307
+ secp256k1_fe_sqr (& rhs , & x ); /* rhs = x^2 */
3308
+ secp256k1_fe_sqr (& tmp , & y ); /* tmp = y^2 */
3309
+ secp256k1_fe_negate (& tmp , & tmp , 1 ); /* tmp = -y^2 */
3310
+ secp256k1_fe_add (& rhs , & tmp ); /* rhs = x^2 - y^2 */
3311
+
3312
+ CHECK (fe_equal (& lhs , & rhs ));
3300
3313
}
3301
3314
}
3302
3315
0 commit comments