mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	mbedtls_mpi_random: check for invalid arguments
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
		
							parent
							
								
									02ac93a1a3
								
							
						
					
					
						commit
						1e918f44c9
					
				@ -894,6 +894,8 @@ int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size,
 | 
			
		||||
 *
 | 
			
		||||
 * \return         \c 0 if successful.
 | 
			
		||||
 * \return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.
 | 
			
		||||
 * \return         #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if \p min or \p N is invalid
 | 
			
		||||
 *                 or if they are incompatible.
 | 
			
		||||
 * \return         Another negative error code on failure.
 | 
			
		||||
 */
 | 
			
		||||
int mbedtls_mpi_random( mbedtls_mpi *X,
 | 
			
		||||
 | 
			
		||||
@ -2445,6 +2445,11 @@ int mbedtls_mpi_random( mbedtls_mpi *X,
 | 
			
		||||
    size_t n_bits = mbedtls_mpi_bitlen( N );
 | 
			
		||||
    size_t n_bytes = ( n_bits + 7 ) / 8;
 | 
			
		||||
 | 
			
		||||
    if( min < 0 )
 | 
			
		||||
        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
 | 
			
		||||
    if( mbedtls_mpi_cmp_int( N, min ) <= 0 )
 | 
			
		||||
        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Match the procedure given in RFC 6979 §3.3 (deterministic ECDSA)
 | 
			
		||||
     * when f_rng is a suitably parametrized instance of HMAC_DRBG:
 | 
			
		||||
 | 
			
		||||
@ -1132,6 +1132,15 @@ mpi_random_many:1:"04":1000
 | 
			
		||||
MPI random in range: 3..4
 | 
			
		||||
mpi_random_many:1:"04":1000
 | 
			
		||||
 | 
			
		||||
MPI random bad arguments: min < 0
 | 
			
		||||
mpi_random_fail:-1:"04":MBEDTLS_ERR_MPI_BAD_INPUT_DATA
 | 
			
		||||
 | 
			
		||||
MPI random bad arguments: min = N = 0
 | 
			
		||||
mpi_random_fail:0:"00":MBEDTLS_ERR_MPI_BAD_INPUT_DATA
 | 
			
		||||
 | 
			
		||||
MPI random bad arguments: min = N = 1
 | 
			
		||||
mpi_random_fail:1:"01":MBEDTLS_ERR_MPI_BAD_INPUT_DATA
 | 
			
		||||
 | 
			
		||||
MPI Selftest
 | 
			
		||||
depends_on:MBEDTLS_SELF_TEST
 | 
			
		||||
mpi_selftest:
 | 
			
		||||
 | 
			
		||||
@ -1537,6 +1537,28 @@ exit:
 | 
			
		||||
}
 | 
			
		||||
/* END_CASE */
 | 
			
		||||
 | 
			
		||||
/* BEGIN_CASE */
 | 
			
		||||
void mpi_random_fail( int min, data_t *bound_bytes, int expected_ret )
 | 
			
		||||
{
 | 
			
		||||
    mbedtls_mpi upper_bound;
 | 
			
		||||
    mbedtls_mpi result;
 | 
			
		||||
    int actual_ret;
 | 
			
		||||
 | 
			
		||||
    mbedtls_mpi_init( &upper_bound );
 | 
			
		||||
    mbedtls_mpi_init( &result );
 | 
			
		||||
 | 
			
		||||
    TEST_EQUAL( 0, mbedtls_mpi_read_binary( &upper_bound,
 | 
			
		||||
                                            bound_bytes->x, bound_bytes->len ) );
 | 
			
		||||
    actual_ret = mbedtls_mpi_random( &result, min, &upper_bound,
 | 
			
		||||
                                     mbedtls_test_rnd_std_rand, NULL );
 | 
			
		||||
    TEST_EQUAL( expected_ret, actual_ret );
 | 
			
		||||
 | 
			
		||||
exit:
 | 
			
		||||
    mbedtls_mpi_free( &upper_bound );
 | 
			
		||||
    mbedtls_mpi_free( &result );
 | 
			
		||||
}
 | 
			
		||||
/* END_CASE */
 | 
			
		||||
 | 
			
		||||
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
 | 
			
		||||
void mpi_selftest(  )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user