Merge pull request #4123 from SparkiDev/sp_int_neg_cmp

SP math all: sp_cmp handling of negative values
This commit is contained in:
David Garske
2021-06-15 15:33:29 -07:00
committed by GitHub
2 changed files with 31 additions and 0 deletions

View File

@ -2607,6 +2607,12 @@ static int _sp_cmp(sp_int* a, sp_int* b)
#endif
ret = _sp_cmp_abs(a, b);
#ifdef WOLFSSL_SP_INT_NEGATIVE
if (a->sign == MP_NEG) {
/* MP_GT = 1, MP_LT = -1, MP_EQ = 0
* Swapping MP_GT and MP_LT results.
*/
ret = -ret;
}
}
else if (a->sign > b->sign) {
ret = MP_LT;

View File

@ -34974,6 +34974,31 @@ static int mp_test_cmp(mp_int* a, mp_int* b)
if (ret != MP_EQ)
return -13010;
#if (!defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL)) || \
defined(WOLFSSL_SP_INT_NEGATIVE)
mp_read_radix(a, "-1", MP_RADIX_HEX);
mp_read_radix(a, "1", MP_RADIX_HEX);
ret = mp_cmp(a, b);
if (ret != MP_LT)
return -13011;
ret = mp_cmp(b, a);
if (ret != MP_GT)
return -13012;
mp_read_radix(b, "-2", MP_RADIX_HEX);
ret = mp_cmp(a, b);
if (ret != MP_GT)
return -13013;
ret = mp_cmp(b, a);
if (ret != MP_LT)
return -13014;
mp_read_radix(a, "-2", MP_RADIX_HEX);
ret = mp_cmp(a, b);
if (ret != MP_EQ)
return -13015;
#endif
return 0;
}