diff --git a/tests/include/test/bignum_helpers.h b/tests/include/test/bignum_helpers.h index ab3c86a12f..164017e69f 100644 --- a/tests/include/test/bignum_helpers.h +++ b/tests/include/test/bignum_helpers.h @@ -61,7 +61,8 @@ int mbedtls_test_read_mpi_core( mbedtls_mpi_uint **pX, size_t *plimbs, * the length of the input. In other words, it preserves leading zeros. * * The limb array is allocated with mbedtls_calloc() and must later be - * freed with mbedtls_free(). + * freed with mbedtls_free(). You can do that by calling + * mbedtls_test_mpi_mod_modulus_free_with_limbs(). * * \param[in,out] N A modulus structure. It must be initialized, but * not set up. @@ -74,6 +75,13 @@ int mbedtls_test_read_mpi_modulus( mbedtls_mpi_mod_modulus *N, const char *s, mbedtls_mpi_mod_rep_selector int_rep ); +/** Free a modulus and its limbs. + * + * \param[in] N A modulus structure such that there is no other + * reference to `N->p`. + */ +void mbedtls_test_mpi_mod_modulus_free_with_limbs( mbedtls_mpi_mod_modulus *N ); + /** Read an MPI from a hexadecimal string. * * Like mbedtls_mpi_read_string(), but with tighter guarantees around diff --git a/tests/src/bignum_helpers.c b/tests/src/bignum_helpers.c index eb819f5ce1..d6ec9bd3cc 100644 --- a/tests/src/bignum_helpers.c +++ b/tests/src/bignum_helpers.c @@ -102,6 +102,12 @@ int mbedtls_test_read_mpi_modulus( mbedtls_mpi_mod_modulus *N, return( ret ); } +void mbedtls_test_mpi_mod_modulus_free_with_limbs( mbedtls_mpi_mod_modulus *N ) +{ + mbedtls_free( (mbedtls_mpi_uint*) N->p ); + mbedtls_mpi_mod_modulus_free( N ); +} + int mbedtls_test_read_mpi( mbedtls_mpi *X, const char *s ) { int negative = 0; diff --git a/tests/suites/test_suite_bignum_random.function b/tests/suites/test_suite_bignum_random.function index a837e1b04b..5064a62d0b 100644 --- a/tests/suites/test_suite_bignum_random.function +++ b/tests/suites/test_suite_bignum_random.function @@ -208,7 +208,7 @@ void mpi_mod_random_values( int min, char *max_hex ) &rnd_mod_raw, sizeof( rnd_mod_raw ) ); exit: - mbedtls_mpi_mod_modulus_free( &N ); + mbedtls_test_mpi_mod_modulus_free_with_limbs( &N ); mbedtls_free( R_core ); mbedtls_free( R_mod_raw ); }