diff --git a/library/bignum_mod_raw.c b/library/bignum_mod_raw.c index b43add77d..7c17e5602 100644 --- a/library/bignum_mod_raw.c +++ b/library/bignum_mod_raw.c @@ -119,7 +119,18 @@ int mbedtls_mpi_mod_raw_write( const mbedtls_mpi_uint *A, /* END MERGE SLOT 4 */ /* BEGIN MERGE SLOT 5 */ - +void MPI_CORE(add_mod)( mbedtls_mpi_uint *X, + mbedtls_mpi_uint const *A, + mbedtls_mpi_uint const *B, + const mbedtls_mpi_uint *N, + size_t n ) +{ + size_t carry, borrow = 0, fixup; + carry = mbedtls_mpi_core_add( X, A, B, n ); + borrow = mbedtls_mpi_core_sub( X, X, N, n); + fixup = ( carry < borrow ); + (void) mbedtls_mpi_core_add_if( X, N, n, fixup ); +} /* END MERGE SLOT 5 */ /* BEGIN MERGE SLOT 6 */ diff --git a/library/bignum_mod_raw.h b/library/bignum_mod_raw.h index f738e917e..c57372c94 100644 --- a/library/bignum_mod_raw.h +++ b/library/bignum_mod_raw.h @@ -155,7 +155,20 @@ int mbedtls_mpi_mod_raw_write( const mbedtls_mpi_uint *A, /* END MERGE SLOT 4 */ /* BEGIN MERGE SLOT 5 */ - +/** + * \brief Perform a known-size modular addition. + * + * Calculate A + B mod N. + * + * \param[out] X The result of the modular addition. + * \param[in] A The left operand. This must be smaller than \p N. + * \param[in] B The right operand. This must be smaller than \p N. + * \param[in] N The modulus. + * \param n Number of limbs of \p X, \p A, \p B and \p N. + */ +void MPI_CORE(add_mod)( mbedtls_mpi_uint *X, mbedtls_mpi_uint const *A, + mbedtls_mpi_uint const *B, const mbedtls_mpi_uint *N, + size_t n ); /* END MERGE SLOT 5 */ /* BEGIN MERGE SLOT 6 */