From 86258f51b5bcbe4e2f8cbad6ef3c2e162f0d619b Mon Sep 17 00:00:00 2001 From: Janos Follath Date: Wed, 21 Feb 2024 11:25:41 +0000 Subject: [PATCH] Exp mod: handle negative zero Signed-off-by: Janos Follath --- library/bignum.c | 4 +++- tests/suites/test_suite_bignum.misc.data | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/library/bignum.c b/library/bignum.c index 768198229..08b8b3429 100644 --- a/library/bignum.c +++ b/library/bignum.c @@ -1689,7 +1689,9 @@ int mbedtls_mpi_exp_mod(mbedtls_mpi *X, const mbedtls_mpi *A, * Correct for negative A. */ if (A->s == -1 && (E->p[0] & 1) != 0) { - X->s = -1; + mbedtls_ct_condition_t is_x_non_zero = mbedtls_mpi_core_check_zero_ct(X->p, X->n); + X->s = mbedtls_ct_uint_if(is_x_non_zero, -1, 1); + MBEDTLS_MPI_CHK(mbedtls_mpi_add_mpi(X, N, X)); } diff --git a/tests/suites/test_suite_bignum.misc.data b/tests/suites/test_suite_bignum.misc.data index 8f5218c1f..a953153ab 100644 --- a/tests/suites/test_suite_bignum.misc.data +++ b/tests/suites/test_suite_bignum.misc.data @@ -1362,6 +1362,9 @@ mpi_exp_mod:"04":"00":"09":"1":0 Test mbedtls_mpi_exp_mod: 10 ^ 0 (1 limb) mod 9 mpi_exp_mod:"0a":"00":"09":"1":0 +Test mbedtls_mpi_exp_mod: -3 ^ 3 mod 27 +mpi_exp_mod:"-3":"3":"1b":"1b":0 + Test mbedtls_mpi_exp_mod: MAX_SIZE exponent mpi_exp_mod_size:2:MBEDTLS_MPI_MAX_SIZE:10:"":0