bignum: add provision for combined software and hardware MPI approach

For exponential mod (API mbedtls_mpi_exp_mod) operation, some ESP target
chips needs to have ability for both hardware and software implementation.

Hardware implementation provided performance advantage but it can only
support upto 3072 bit operations (e.g., ESP32-C3) and hence we fallback
to software implementation in such cases (e.g., 4096 bit operations).

Earlier this was handled using linker "--wrap" flag but that does not
work in all scenarios as API `mbedtls_mpi_exp_mod` is being used in
same tranlation (compilation unit).

This approach was found to be next best option with minimal changes in
mbedTLS library.
This commit is contained in:
Mahavir Jain 2021-11-18 15:39:30 +05:30 committed by Laukik Hase
parent f859b9bc75
commit ab3a845107
No known key found for this signature in database
GPG Key ID: 11C571361F51A199

View File

@ -1591,9 +1591,15 @@ cleanup:
/*
* Sliding-window exponentiation: X = A^E mod N (HAC 14.85)
*/
#if !defined(MBEDTLS_MPI_EXP_MOD_ALT_FALLBACK)
int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A,
const mbedtls_mpi *E, const mbedtls_mpi *N,
mbedtls_mpi *prec_RR )
#else
int mbedtls_mpi_exp_mod_soft( mbedtls_mpi *X, const mbedtls_mpi *A,
const mbedtls_mpi *E, const mbedtls_mpi *N,
mbedtls_mpi *prec_RR )
#endif
{
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
size_t window_bitsize;