Fix crypto/ec/ec_mult.c to work properly with scalars of value 0
[openssl.git] / crypto / ec / ectest.c
index 85f63c00bbdf74f8a896d4c75d736440cb4cd62f..b74d6435be9680faf49dc570a13ff204982e6544 100644 (file)
@@ -649,13 +649,15 @@ void prime_field_tests()
        if (!EC_POINT_is_at_infinity(group, R)) ABORT; /* R = P + 2Q */
 
        {
        if (!EC_POINT_is_at_infinity(group, R)) ABORT; /* R = P + 2Q */
 
        {
-               const EC_POINT *points[3];
-               const BIGNUM *scalars[3];
+               const EC_POINT *points[4];
+               const BIGNUM *scalars[4];
+               BIGNUM scalar3;
        
                if (EC_POINT_is_at_infinity(group, Q)) ABORT;
                points[0] = Q;
                points[1] = Q;
                points[2] = Q;
        
                if (EC_POINT_is_at_infinity(group, Q)) ABORT;
                points[0] = Q;
                points[1] = Q;
                points[2] = Q;
+               points[3] = Q;
 
                if (!BN_add(y, z, BN_value_one())) ABORT;
                if (BN_is_odd(y)) ABORT;
 
                if (!BN_add(y, z, BN_value_one())) ABORT;
                if (BN_is_odd(y)) ABORT;
@@ -694,10 +696,16 @@ void prime_field_tests()
                scalars[1] = y;
                scalars[2] = z; /* z = -(x+y) */
 
                scalars[1] = y;
                scalars[2] = z; /* z = -(x+y) */
 
-               if (!EC_POINTs_mul(group, P, NULL, 3, points, scalars, ctx)) ABORT;
+               BN_init(&scalar3);
+               BN_zero(&scalar3);
+               scalars[3] = &scalar3;
+
+               if (!EC_POINTs_mul(group, P, NULL, 4, points, scalars, ctx)) ABORT;
                if (!EC_POINT_is_at_infinity(group, P)) ABORT;
 
                fprintf(stdout, " ok\n\n");
                if (!EC_POINT_is_at_infinity(group, P)) ABORT;
 
                fprintf(stdout, " ok\n\n");
+
+               BN_free(&scalar3);
        }
 
 
        }