From e8f1d22d65aadcbb08ea1b4f00cd8c709a43b7ed Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 6 Sep 2017 15:06:57 +1000 Subject: [PATCH] mbedtls: Re-apply MBEDTLS_BIGNUM_ALT & related macros for custom bignum functions (IDF-specific patch.) (cherry picked from commit f859b9bc7579246703446c158270ae038442351c) --- include/mbedtls/bignum.h | 5 +++++ library/bignum.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/mbedtls/bignum.h b/include/mbedtls/bignum.h index 618785671..22c3efcd5 100644 --- a/include/mbedtls/bignum.h +++ b/include/mbedtls/bignum.h @@ -100,6 +100,8 @@ MBEDTLS_LN_2_DIV_LN_10_SCALE100 - 1) / \ MBEDTLS_LN_2_DIV_LN_10_SCALE100) + 10 + 6) +#if !defined(MBEDTLS_BIGNUM_ALT) + /* * Define the base integer type, architecture-wise. * @@ -1069,6 +1071,9 @@ typedef enum { int mbedtls_mpi_gen_prime(mbedtls_mpi *X, size_t nbits, int flags, mbedtls_f_rng_t *f_rng, void *p_rng); +#else /* MBEDTLS_BIGNUM_ALT */ +#include "bignum_alt.h" +#endif /* MBEDTLS_BIGNUM_ALT */ #if defined(MBEDTLS_SELF_TEST) diff --git a/library/bignum.c b/library/bignum.c index f6b8f9998..03f5f8959 100644 --- a/library/bignum.c +++ b/library/bignum.c @@ -38,7 +38,7 @@ #include "mbedtls/platform.h" - +#if !defined(MBEDTLS_BIGNUM_ALT) /* * Conditionally select an MPI sign in constant time. @@ -1192,6 +1192,7 @@ int mbedtls_mpi_sub_int(mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b return mbedtls_mpi_sub_mpi(X, A, &B); } +#if !defined(MBEDTLS_MPI_MUL_MPI_ALT) /* * Baseline multiplication: X = A * B (HAC 14.12) */ @@ -1287,6 +1288,7 @@ int mbedtls_mpi_mul_int(mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint b cleanup: return ret; } +#endif /* * Unsigned integer divide - double mbedtls_mpi_uint dividend, u1/u0, and @@ -1733,13 +1735,19 @@ cleanup: return ret; } - + +#if !defined(MBEDTLS_MPI_EXP_MOD_ALT) + +/* +* Sliding-window exponentiation: X = A^E mod N (HAC 14.85) +*/ int mbedtls_mpi_exp_mod(mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *E, const mbedtls_mpi *N, mbedtls_mpi *prec_RR) { return mbedtls_mpi_exp_mod_optionally_safe(X, A, E, MBEDTLS_MPI_IS_SECRET, N, prec_RR); } +#endif int mbedtls_mpi_exp_mod_unsafe(mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *E, const mbedtls_mpi *N, @@ -1747,6 +1755,7 @@ int mbedtls_mpi_exp_mod_unsafe(mbedtls_mpi *X, const mbedtls_mpi *A, { return mbedtls_mpi_exp_mod_optionally_safe(X, A, E, MBEDTLS_MPI_IS_PUBLIC, N, prec_RR); } + /* Constant-time GCD and/or modinv with odd modulus and A <= N */ int mbedtls_mpi_gcd_modinv_odd(mbedtls_mpi *G, @@ -2369,6 +2378,7 @@ cleanup: } #endif /* MBEDTLS_GENPRIME */ +#endif /* MBEDTLS_BIGNUM_ALT */ #if defined(MBEDTLS_SELF_TEST)