Merge branch 'mbedtls-2.7-restricted' into mbedtls-2.7.18r0-pr
This commit is contained in:
commit
3c463b51d0
20 changed files with 765 additions and 463 deletions
|
@ -1,5 +1,10 @@
|
|||
/* BEGIN_HEADER */
|
||||
#include "mbedtls/bignum.h"
|
||||
#include "mbedtls/entropy.h"
|
||||
|
||||
#if MBEDTLS_MPI_MAX_BITS > 792
|
||||
#define MPI_MAX_BITS_LARGER_THAN_792
|
||||
#endif
|
||||
|
||||
typedef struct mbedtls_test_mpi_random
|
||||
{
|
||||
|
@ -44,6 +49,22 @@ int mbedtls_test_mpi_miller_rabin_determinizer( void* state,
|
|||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/* Random generator that is told how many bytes to return. */
|
||||
static int f_rng_bytes_left( void *state, unsigned char *buf, size_t len )
|
||||
{
|
||||
size_t *bytes_left = state;
|
||||
size_t i;
|
||||
for( i = 0; i < len; i++ )
|
||||
{
|
||||
if( *bytes_left == 0 )
|
||||
return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED );
|
||||
buf[i] = *bytes_left & 0xff;
|
||||
--( *bytes_left );
|
||||
}
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/* END_HEADER */
|
||||
|
||||
/* BEGIN_DEPENDENCIES
|
||||
|
@ -901,6 +922,40 @@ exit:
|
|||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_mpi_exp_mod_size( int A_bytes, int E_bytes, int N_bytes,
|
||||
int radix_RR, char * input_RR, int exp_result )
|
||||
{
|
||||
mbedtls_mpi A, E, N, RR, Z;
|
||||
mbedtls_mpi_init( &A ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &N );
|
||||
mbedtls_mpi_init( &RR ); mbedtls_mpi_init( &Z );
|
||||
|
||||
/* Set A to 2^(A_bytes - 1) + 1 */
|
||||
TEST_ASSERT( mbedtls_mpi_lset( &A, 1 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_shift_l( &A, ( A_bytes * 8 ) - 1 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_set_bit( &A, 0, 1 ) == 0 );
|
||||
|
||||
/* Set E to 2^(E_bytes - 1) + 1 */
|
||||
TEST_ASSERT( mbedtls_mpi_lset( &E, 1 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_shift_l( &E, ( E_bytes * 8 ) - 1 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_set_bit( &E, 0, 1 ) == 0 );
|
||||
|
||||
/* Set N to 2^(N_bytes - 1) + 1 */
|
||||
TEST_ASSERT( mbedtls_mpi_lset( &N, 1 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_shift_l( &N, ( N_bytes * 8 ) - 1 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_set_bit( &N, 0, 1 ) == 0 );
|
||||
|
||||
if( strlen( input_RR ) )
|
||||
TEST_ASSERT( mbedtls_mpi_read_string( &RR, radix_RR, input_RR ) == 0 );
|
||||
|
||||
TEST_ASSERT( mbedtls_mpi_exp_mod( &Z, &A, &E, &N, &RR ) == exp_result );
|
||||
|
||||
exit:
|
||||
mbedtls_mpi_free( &A ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &N );
|
||||
mbedtls_mpi_free( &RR ); mbedtls_mpi_free( &Z );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_mpi_inv_mod( int radix_X, char *input_X, int radix_Y, char *input_Y,
|
||||
int radix_A, char *input_A, int div_result )
|
||||
|
@ -1039,6 +1094,37 @@ exit:
|
|||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mpi_fill_random( int wanted_bytes, int rng_bytes, int expected_ret )
|
||||
{
|
||||
mbedtls_mpi X;
|
||||
int ret;
|
||||
size_t bytes_left = rng_bytes;
|
||||
mbedtls_mpi_init( &X );
|
||||
|
||||
ret = mbedtls_mpi_fill_random( &X, wanted_bytes,
|
||||
f_rng_bytes_left, &bytes_left );
|
||||
TEST_ASSERT( ret == expected_ret );
|
||||
|
||||
if( expected_ret == 0 )
|
||||
{
|
||||
/* mbedtls_mpi_fill_random is documented to use bytes from the RNG
|
||||
* as a big-endian representation of the number. We know when
|
||||
* our RNG function returns null bytes, so we know how many
|
||||
* leading zero bytes the number has. */
|
||||
size_t leading_zeros = 0;
|
||||
if( wanted_bytes > 0 && rng_bytes % 256 == 0 )
|
||||
leading_zeros = 1;
|
||||
TEST_ASSERT( mbedtls_mpi_size( &X ) + leading_zeros ==
|
||||
(size_t) wanted_bytes );
|
||||
TEST_ASSERT( (int) bytes_left == rng_bytes - wanted_bytes );
|
||||
}
|
||||
|
||||
exit:
|
||||
mbedtls_mpi_free( &X );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
||||
void mpi_selftest()
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue