| /** |
| * \file bignum_internal.h |
| * |
| * \brief Internal-only bignum public-key cryptosystem API. |
| * |
| * This file declares bignum-related functions that are to be used |
| * only from within the Mbed TLS library itself. |
| * |
| */ |
| /* |
| * Copyright The Mbed TLS Contributors |
| * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later |
| */ |
| #ifndef MBEDTLS_BIGNUM_INTERNAL_H |
| #define MBEDTLS_BIGNUM_INTERNAL_H |
| |
| /** |
| * \brief Perform a modular exponentiation: X = A^E mod N |
| * |
| * \warning This function is not constant time with respect to \p E (the exponent). |
| * |
| * \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. |
| * |
| */ |
| int mbedtls_mpi_exp_mod_unsafe(mbedtls_mpi *X, const mbedtls_mpi *A, |
| const mbedtls_mpi *E, const mbedtls_mpi *N, |
| mbedtls_mpi *prec_RR); |
| |
| #endif /* bignum_internal.h */ |