bignum_mod: `mbedtls_mpi_mod_modulus_setup()` refactoring.
This patch addresses more review comments, and fixes
a circular depedency in the `mbedtls_mpi_mod_modulus_setup()`.
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
diff --git a/library/bignum_mod.c b/library/bignum_mod.c
index 705b2db..60c073a 100644
--- a/library/bignum_mod.c
+++ b/library/bignum_mod.c
@@ -77,10 +77,13 @@
switch( m->int_rep )
{
case MBEDTLS_MPI_MOD_REP_MONTGOMERY:
- mbedtls_platform_zeroize( (mbedtls_mpi_uint *) m->rep.mont.rr,
- m->limbs );
- mbedtls_free( (mbedtls_mpi_uint *)m->rep.mont.rr );
- m->rep.mont.rr = NULL;
+ if (m->rep.mont.rr != NULL)
+ {
+ mbedtls_platform_zeroize( (mbedtls_mpi_uint *) m->rep.mont.rr,
+ m->limbs );
+ mbedtls_free( (mbedtls_mpi_uint *)m->rep.mont.rr );
+ m->rep.mont.rr = NULL;
+ }
m->rep.mont.mm = 0;
break;
case MBEDTLS_MPI_MOD_REP_OPT_RED:
@@ -104,6 +107,7 @@
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
mbedtls_mpi N;
mbedtls_mpi RR;
+ *X = NULL;
mbedtls_mpi_init( &N );
mbedtls_mpi_init( &RR );
@@ -111,16 +115,18 @@
if ( A == NULL || limbs == 0 || limbs >= ( MBEDTLS_MPI_MAX_LIMBS / 2 ) - 2 )
goto cleanup;
- if ( mbedtls_mpi_grow( &N, limbs ))
+ if ( mbedtls_mpi_grow( &N, limbs ) )
goto cleanup;
- memcpy( N.p, A, sizeof(mbedtls_mpi_uint) * limbs );
+ memcpy( N.p, A, sizeof(mbedtls_mpi_uint) * limbs );
- mbedtls_mpi_core_get_mont_r2_unsafe(&RR, &N);
+ ret = mbedtls_mpi_core_get_mont_r2_unsafe(&RR, &N);
- *X = RR.p;
- RR.p = NULL;
- ret = 0;
+ if ( ret == 0 )
+ {
+ *X = RR.p;
+ RR.p = NULL;
+ }
cleanup:
mbedtls_mpi_free(&N);
@@ -157,7 +163,7 @@
case MBEDTLS_MPI_MOD_REP_MONTGOMERY:
m->int_rep = int_rep;
m->rep.mont.mm = mbedtls_mpi_core_montmul_init( m->p );
- set_mont_const_square( &m->rep.mont.rr, m->p, m->limbs );
+ ret = set_mont_const_square( &m->rep.mont.rr, m->p, m->limbs );
break;
case MBEDTLS_MPI_MOD_REP_OPT_RED:
m->int_rep = int_rep;