# Function esp_idf_svc::sys::mbedtls_mpi_exp_mod

source · ```
pub unsafe extern "C" fn mbedtls_mpi_exp_mod(
X: *mut mbedtls_mpi,
A: *const mbedtls_mpi,
E: *const mbedtls_mpi,
N: *const mbedtls_mpi,
prec_RR: *mut mbedtls_mpi,
) -> i32
```

## Expand description

\brief Perform a sliding-window exponentiation: X = A^E mod N

\param X The destination MPI. This must point to an initialized MPI. This must not alias E or N. \param A The base of the exponentiation. This must point to an initialized MPI. \param E The exponent MPI. This must point to an initialized MPI. \param N The base for the modular reduction. This must point to an initialized MPI. \param prec_RR A helper MPI depending solely on \p N which can be used to speed-up multiple modular exponentiations for the same value of \p N. This may be \c NULL. If it is not \c NULL, it must point to an initialized MPI. If it hasn’t been used after the call to mbedtls_mpi_init(), this function will compute the helper value and store it in \p prec_RR for reuse on subsequent calls to this function. Otherwise, the function will assume that \p prec_RR holds the helper value set by a previous call to mbedtls_mpi_exp_mod(), and reuse it.

\return \c 0 if successful. \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if \c N is negative or even, or if \c E is negative. \return Another negative error code on different kinds of failures.