Make a public version of mpi_montg_init() in bignum_new.c and add unit tests

The unit tests were created by capturing runs of the existing function during
execution of existing unit tests.

Signed-off-by: Tom Cosgrove <tom.cosgrove@arm.com>
This commit is contained in:
Tom Cosgrove 2022-08-17 06:17:00 +01:00
parent 659c84add9
commit 79b70f6394
5 changed files with 108 additions and 11 deletions

View file

@ -1991,6 +1991,41 @@ exit:
}
/* END_CASE */
/* BEGIN_CASE */
void mbedtls_mpi_montg_init( char * input_N, char * input_mm )
{
mbedtls_mpi N, mm;
mbedtls_mpi_init( &N );
mbedtls_mpi_init( &mm );
TEST_EQUAL( mbedtls_test_read_mpi( &N, input_N ), 0 );
TEST_EQUAL( mbedtls_test_read_mpi( &mm, input_mm ), 0 );
/* The MPI encoding of mm should be 1 limb (sizeof(mbedtls_mpi_uint) == 8) or
* 2 limbs (sizeof(mbedtls_mpi_uint) == 4).
*
* The data file contains the expected result for sizeof(mbedtls_mpi_uint) == 8;
* for sizeof(mbedtls_mpi_uint) == 4 it's just the LSW of this.
*/
TEST_ASSERT( mm.n == 1 || mm.n == 2);
/* All of the inputs are +ve (or zero) */
TEST_EQUAL( N.s, 1 );
TEST_EQUAL( mm.s, 1 );
/* mbedtls_mpi_montg_init() only returns a result, no error possible */
mbedtls_mpi_uint result = mbedtls_mpi_montg_init( N.p[0] );
/* Check we got the correct result */
TEST_EQUAL( result, mm.p[0] );
exit:
mbedtls_mpi_free( &N );
mbedtls_mpi_free( &mm );
}
/* END_CASE */
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
void mpi_selftest( )
{