|
@@ -42671,7 +42671,7 @@ static int mp_test_shbd(mp_int* a, mp_int* b, WC_RNG* rng)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-#if !defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
|
|
|
+#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
|
|
static int mp_test_div(mp_int* a, mp_int* d, mp_int* r, mp_int* rem,
|
|
|
WC_RNG* rng)
|
|
|
{
|
|
@@ -42787,6 +42787,24 @@ static int mp_test_div(mp_int* a, mp_int* d, mp_int* r, mp_int* rem,
|
|
|
if (ret != MP_OKAY)
|
|
|
return -13053;
|
|
|
|
|
|
+ /* Make sure [d | d] / d is handled. */
|
|
|
+ mp_zero(a);
|
|
|
+ mp_set_bit(a, DIGIT_BIT * 2 - 1);
|
|
|
+ mp_set_bit(a, DIGIT_BIT * 1 - 1);
|
|
|
+ mp_zero(d);
|
|
|
+ mp_set_bit(d, DIGIT_BIT - 1);
|
|
|
+ ret = mp_div(a, d, r, rem);
|
|
|
+ if (ret != MP_OKAY)
|
|
|
+ return -13054;
|
|
|
+ mp_zero(a);
|
|
|
+ mp_set_bit(a, DIGIT_BIT);
|
|
|
+ mp_set_bit(a, 0);
|
|
|
+ mp_zero(d);
|
|
|
+ if (mp_cmp(r, a) != MP_EQ)
|
|
|
+ return -13055;
|
|
|
+ if (mp_cmp(rem, d) != MP_EQ)
|
|
|
+ return -13056;
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
#endif
|
|
@@ -42808,7 +42826,7 @@ static int mp_test_prime(mp_int* a, WC_RNG* rng)
|
|
|
#endif
|
|
|
#ifndef WOLFSSL_SP_MATH
|
|
|
ret = mp_rand_prime(a, -5, rng, NULL);
|
|
|
- if (ret != 0)
|
|
|
+ if (ret != 0 || (a->dp[0] & 3) != 3)
|
|
|
return -13061;
|
|
|
#endif
|
|
|
ret = mp_prime_is_prime(a, 1, &res);
|
|
@@ -43642,6 +43660,21 @@ WOLFSSL_TEST_SUBROUTINE int mp_test(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /* Test adding and subtracting zero from zero. */
|
|
|
+ mp_zero(&a);
|
|
|
+ ret = mp_add_d(&a, 0, &r1);
|
|
|
+ if (ret != 0)
|
|
|
+ return -13329;
|
|
|
+ if (!mp_iszero(&r1)) {
|
|
|
+ return -13330;
|
|
|
+ }
|
|
|
+ ret = mp_sub_d(&a, 0, &r2);
|
|
|
+ if (ret != 0)
|
|
|
+ return -13331;
|
|
|
+ if (!mp_iszero(&r2)) {
|
|
|
+ return -13332;
|
|
|
+ }
|
|
|
+
|
|
|
#if DIGIT_BIT >= 32
|
|
|
/* Check that setting a 32-bit digit works. */
|
|
|
d &= 0xffffffffU;
|
|
@@ -43668,6 +43701,17 @@ WOLFSSL_TEST_SUBROUTINE int mp_test(void)
|
|
|
i = mp_cnt_lsb(&a);
|
|
|
if (i != 0)
|
|
|
return -13327;
|
|
|
+
|
|
|
+ mp_set(&a, 32);
|
|
|
+ i = mp_cnt_lsb(&a);
|
|
|
+ if (i != 5)
|
|
|
+ return -13328;
|
|
|
+
|
|
|
+ mp_zero(&a);
|
|
|
+ mp_set_bit(&a, 129);
|
|
|
+ i = mp_cnt_lsb(&a);
|
|
|
+ if (i != 129)
|
|
|
+ return -13328;
|
|
|
#endif
|
|
|
|
|
|
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
|
@@ -43712,7 +43756,7 @@ WOLFSSL_TEST_SUBROUTINE int mp_test(void)
|
|
|
if ((ret = mp_test_set_is_bit(&a)) != 0)
|
|
|
return ret;
|
|
|
#endif
|
|
|
-#if !defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
|
|
|
+#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
|
|
if ((ret = mp_test_div(&a, &b, &r1, &r2, &rng)) != 0)
|
|
|
return ret;
|
|
|
#endif
|