Merge branch 'pr_1480' into development-proposed

This commit is contained in:
Gilles Peskine 2018-04-01 12:44:06 +02:00
commit 90a8b5219f
3 changed files with 19 additions and 5 deletions

View file

@ -63,6 +63,8 @@ Changes
Alex Hixon. Alex Hixon.
* Allow configuring the shared library extension by setting the DLEXT * Allow configuring the shared library extension by setting the DLEXT
environment variable when using the project makefiles. environment variable when using the project makefiles.
* Optimize unnecessary zeroing in mbedtls_mpi_copy. Based on a contribution
by Alexey Skalozub in #405.
= mbed TLS 2.8.0 branch released 2018-03-16 = mbed TLS 2.8.0 branch released 2018-03-16

View file

@ -204,6 +204,8 @@ void mbedtls_mpi_free( mbedtls_mpi *X );
/** /**
* \brief Enlarge to the specified number of limbs * \brief Enlarge to the specified number of limbs
* *
* This function does nothing if the MPI is already large enough.
*
* \param X MPI to grow * \param X MPI to grow
* \param nblimbs The target number of limbs * \param nblimbs The target number of limbs
* *
@ -215,19 +217,23 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs );
/** /**
* \brief Resize down, keeping at least the specified number of limbs * \brief Resize down, keeping at least the specified number of limbs
* *
* If \c X is smaller than \c nblimbs, it is resized up
* instead.
*
* \param X MPI to shrink * \param X MPI to shrink
* \param nblimbs The minimum number of limbs to keep * \param nblimbs The minimum number of limbs to keep
* *
* \return 0 if successful, * \return 0 if successful,
* MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
* (this can only happen when resizing up).
*/ */
int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ); int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs );
/** /**
* \brief Copy the contents of Y into X * \brief Copy the contents of Y into X
* *
* \param X Destination MPI * \param X Destination MPI. It is enlarged if necessary.
* \param Y Source MPI * \param Y Source MPI.
* *
* \return 0 if successful, * \return 0 if successful,
* MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

View file

@ -184,7 +184,7 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs )
*/ */
int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y )
{ {
int ret; int ret = 0;
size_t i; size_t i;
if( X == Y ) if( X == Y )
@ -203,9 +203,15 @@ int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y )
X->s = Y->s; X->s = Y->s;
MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i ) ); if( X->n < i )
{
MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i ) );
}
else
{
memset( X->p + i, 0, ( X->n - i ) * ciL );
}
memset( X->p, 0, X->n * ciL );
memcpy( X->p, Y->p, i * ciL ); memcpy( X->p, Y->p, i * ciL );
cleanup: cleanup: