Add an explicit mbedtls_mpi_core_montmul_working_limbs() function
Signed-off-by: Tom Cosgrove <tom.cosgrove@arm.com>
This commit is contained in:
parent
30f3b4d601
commit
28ff92cc3a
5 changed files with 38 additions and 3 deletions
|
@ -502,6 +502,10 @@ int mbedtls_mpi_core_fill_random( mbedtls_mpi_uint *X, size_t X_limbs,
|
|||
* \brief Returns the number of limbs of working memory required for
|
||||
* a call to `mbedtls_mpi_core_exp_mod()`.
|
||||
*
|
||||
* \note This will always be at least
|
||||
* `mbedtls_mpi_core_montmul_working_limbs(AN_limbs)`,
|
||||
* i.e. sufficient for a call to `mbedtls_mpi_core_montmul()`.
|
||||
*
|
||||
* \param AN_limbs The number of limbs in the input `A` and the modulus `N`
|
||||
* (they must be the same size) that will be given to
|
||||
* `mbedtls_mpi_core_exp_mod()`.
|
||||
|
@ -585,6 +589,23 @@ mbedtls_mpi_uint mbedtls_mpi_core_sub_int( mbedtls_mpi_uint *X,
|
|||
mbedtls_mpi_uint mbedtls_mpi_core_check_zero_ct( const mbedtls_mpi_uint *A,
|
||||
size_t limbs );
|
||||
|
||||
/**
|
||||
* \brief Returns the number of limbs of working memory required for
|
||||
* a call to `mbedtls_mpi_core_montmul()`.
|
||||
*
|
||||
* \param AN_limbs The number of limbs in the input `A` and the modulus `N`
|
||||
* (they must be the same size) that will be given to
|
||||
* `mbedtls_mpi_core_montmul()` or one of the other functions
|
||||
* that specifies this as the amount of working memory needed.
|
||||
*
|
||||
* \return The number of limbs of working memory required by
|
||||
* `mbedtls_mpi_core_montmul()` (or other similar function).
|
||||
*/
|
||||
static inline size_t mbedtls_mpi_core_montmul_working_limbs( size_t AN_limbs )
|
||||
{
|
||||
return( 2 * AN_limbs + 1 );
|
||||
}
|
||||
|
||||
/* END MERGE SLOT 3 */
|
||||
|
||||
/* BEGIN MERGE SLOT 4 */
|
||||
|
|
|
@ -183,7 +183,7 @@ int mbedtls_mpi_mod_raw_to_mont_rep( mbedtls_mpi_uint *X,
|
|||
const mbedtls_mpi_mod_modulus *m )
|
||||
{
|
||||
mbedtls_mpi_uint *T;
|
||||
const size_t t_limbs = m->limbs * 2 + 1;
|
||||
const size_t t_limbs = mbedtls_mpi_core_montmul_working_limbs( m->limbs );
|
||||
|
||||
if( ( T = (mbedtls_mpi_uint *) mbedtls_calloc( t_limbs, ciL ) ) == NULL )
|
||||
return( MBEDTLS_ERR_MPI_ALLOC_FAILED );
|
||||
|
@ -200,7 +200,7 @@ int mbedtls_mpi_mod_raw_from_mont_rep( mbedtls_mpi_uint *X,
|
|||
const mbedtls_mpi_mod_modulus *m )
|
||||
{
|
||||
const mbedtls_mpi_uint one = 1;
|
||||
const size_t t_limbs = m->limbs * 2 + 1;
|
||||
const size_t t_limbs = mbedtls_mpi_core_montmul_working_limbs( m->limbs );
|
||||
mbedtls_mpi_uint *T;
|
||||
|
||||
if( ( T = (mbedtls_mpi_uint *) mbedtls_calloc( t_limbs, ciL ) ) == NULL )
|
||||
|
|
|
@ -178,6 +178,10 @@ void mbedtls_mpi_mod_raw_sub( mbedtls_mpi_uint *X,
|
|||
* \brief Returns the number of limbs of working memory required for
|
||||
* a call to `mbedtls_mpi_mod_raw_inv_prime()`.
|
||||
*
|
||||
* \note This will always be at least
|
||||
* `mbedtls_mpi_core_montmul_working_limbs(AN_limbs)`,
|
||||
* i.e. sufficient for a call to `mbedtls_mpi_core_montmul()`.
|
||||
*
|
||||
* \param AN_limbs The number of limbs in the input `A` and the modulus `N`
|
||||
* (they must be the same size) that will be given to
|
||||
* `mbedtls_mpi_mod_raw_inv_prime()`.
|
||||
|
|
|
@ -798,7 +798,9 @@ void mpi_core_montmul( int limbs_AN4, int limbs_B4,
|
|||
TEST_EQUAL( 0, mbedtls_mpi_grow( X, limbs_AN ) );
|
||||
TEST_EQUAL( 0, mbedtls_mpi_grow( &B, limbs_B ) );
|
||||
|
||||
TEST_EQUAL( 0, mbedtls_mpi_grow( &T, limbs_AN * 2 + 1 ) );
|
||||
size_t working_limbs = mbedtls_mpi_core_montmul_working_limbs( limbs_AN );
|
||||
TEST_EQUAL( working_limbs, limbs_AN * 2 + 1 );
|
||||
TEST_EQUAL( 0, mbedtls_mpi_grow( &T, working_limbs ) );
|
||||
|
||||
/* Calculate the Montgomery constant (this is unit tested separately) */
|
||||
mbedtls_mpi_uint mm = mbedtls_mpi_core_montmul_init( N.p );
|
||||
|
@ -1083,6 +1085,10 @@ void mpi_core_exp_mod( char * input_N, char * input_A,
|
|||
TEST_LE_U( min_expected_working_limbs, working_limbs );
|
||||
TEST_LE_U( working_limbs, max_expected_working_limbs );
|
||||
|
||||
/* Should also be at least mbedtls_mpi_core_montmul_working_limbs() */
|
||||
TEST_LE_U( mbedtls_mpi_core_montmul_working_limbs( N_limbs ),
|
||||
working_limbs );
|
||||
|
||||
ASSERT_ALLOC( T, working_limbs );
|
||||
|
||||
mbedtls_mpi_core_exp_mod( Y, A, N, N_limbs, E, E_limbs, R2, T );
|
||||
|
|
|
@ -394,6 +394,10 @@ void mpi_mod_raw_inv_prime( char * input_N, char * input_A, char * input_X )
|
|||
TEST_LE_U( min_expected_working_limbs, working_limbs );
|
||||
TEST_LE_U( working_limbs, max_expected_working_limbs );
|
||||
|
||||
/* Should also be at least mbedtls_mpi_core_montmul_working_limbs() */
|
||||
TEST_LE_U( mbedtls_mpi_core_montmul_working_limbs( N_limbs ),
|
||||
working_limbs );
|
||||
|
||||
ASSERT_ALLOC( T, working_limbs );
|
||||
|
||||
mbedtls_mpi_mod_raw_inv_prime( Y, A, N, N_limbs, R2, T );
|
||||
|
|
Loading…
Reference in a new issue