mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-30 03:14:22 +01:00
Merge remote-tracking branch 'origin/mbedtls-2.7' into mbedtls-2.7-restricted
* origin/mbedtls-2.7: Enable more test cases without MBEDTLS_MEMORY_DEBUG More accurate test case description Clarify that the "FATAL" message is expected Note that mbedtls_ctr_drbg_seed() must not be called twice Fix CTR_DRBG benchmark Changelog entry for xxx_drbg_set_entropy_len before xxx_drbg_seed CTR_DRBG: support set_entropy_len() before seed() CTR_DRBG: Don't use functions before they're defined HMAC_DRBG: support set_entropy_len() before seed()
This commit is contained in:
commit
d8180f8d84
@ -1,6 +1,6 @@
|
|||||||
mbed TLS ChangeLog (Sorted per branch, date)
|
mbed TLS ChangeLog (Sorted per branch, date)
|
||||||
|
|
||||||
= mbed TLS 2.7.x branch released xxxx-xx-xx
|
= mbed TLS 2.7.13 branch released 2020-01-15
|
||||||
|
|
||||||
Security
|
Security
|
||||||
* Fix side channel vulnerability in ECDSA. Our bignum implementation is not
|
* Fix side channel vulnerability in ECDSA. Our bignum implementation is not
|
||||||
@ -25,6 +25,12 @@ Security
|
|||||||
reported and fix proposed by Johan Uppman Bruce and Christoffer Lauri,
|
reported and fix proposed by Johan Uppman Bruce and Christoffer Lauri,
|
||||||
Sectra.
|
Sectra.
|
||||||
|
|
||||||
|
Bugfix
|
||||||
|
* Support mbedtls_hmac_drbg_set_entropy_len() and
|
||||||
|
mbedtls_ctr_drbg_set_entropy_len() before the DRBG is seeded. Before,
|
||||||
|
the initial seeding always reset the entropy length to the compile-time
|
||||||
|
default.
|
||||||
|
|
||||||
Changes
|
Changes
|
||||||
* Add unit tests for AES-GCM when called through mbedtls_cipher_auth_xxx()
|
* Add unit tests for AES-GCM when called through mbedtls_cipher_auth_xxx()
|
||||||
from the cipher abstraction layer. Fixes #2198.
|
from the cipher abstraction layer. Fixes #2198.
|
||||||
|
@ -190,11 +190,8 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx );
|
|||||||
* with mbedtls_entropy_init() (which registers the platform's default
|
* with mbedtls_entropy_init() (which registers the platform's default
|
||||||
* entropy sources).
|
* entropy sources).
|
||||||
*
|
*
|
||||||
* \p f_entropy is always called with a buffer size equal to the entropy
|
* The entropy length is #MBEDTLS_CTR_DRBG_ENTROPY_LEN by default.
|
||||||
* length. The entropy length is initially #MBEDTLS_CTR_DRBG_ENTROPY_LEN
|
* You can override it by calling mbedtls_ctr_drbg_set_entropy_len().
|
||||||
* and this value is always used for the initial seeding. You can change
|
|
||||||
* the entropy length for subsequent seeding by calling
|
|
||||||
* mbedtls_ctr_drbg_set_entropy_len() after this function.
|
|
||||||
*
|
*
|
||||||
* You can provide a personalization string in addition to the
|
* You can provide a personalization string in addition to the
|
||||||
* entropy source, to make this instantiation as unique as possible.
|
* entropy source, to make this instantiation as unique as possible.
|
||||||
@ -227,9 +224,18 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx );
|
|||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* \param ctx The CTR_DRBG context to seed.
|
* \param ctx The CTR_DRBG context to seed.
|
||||||
|
* It must have been initialized with
|
||||||
|
* mbedtls_ctr_drbg_init().
|
||||||
|
* After a successful call to mbedtls_ctr_drbg_seed(),
|
||||||
|
* you may not call mbedtls_ctr_drbg_seed() again on
|
||||||
|
* the same context unless you call
|
||||||
|
* mbedtls_ctr_drbg_free() and mbedtls_ctr_drbg_init()
|
||||||
|
* again first.
|
||||||
* \param f_entropy The entropy callback, taking as arguments the
|
* \param f_entropy The entropy callback, taking as arguments the
|
||||||
* \p p_entropy context, the buffer to fill, and the
|
* \p p_entropy context, the buffer to fill, and the
|
||||||
* length of the buffer.
|
* length of the buffer.
|
||||||
|
* \p f_entropy is always called with a buffer size
|
||||||
|
* equal to the entropy length.
|
||||||
* \param p_entropy The entropy context to pass to \p f_entropy.
|
* \param p_entropy The entropy context to pass to \p f_entropy.
|
||||||
* \param custom The personalization string.
|
* \param custom The personalization string.
|
||||||
* This can be \c NULL, in which case the personalization
|
* This can be \c NULL, in which case the personalization
|
||||||
@ -273,15 +279,10 @@ void mbedtls_ctr_drbg_set_prediction_resistance( mbedtls_ctr_drbg_context *ctx,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function sets the amount of entropy grabbed on each
|
* \brief This function sets the amount of entropy grabbed on each
|
||||||
* subsequent reseed.
|
* seed or reseed.
|
||||||
*
|
*
|
||||||
* The default value is #MBEDTLS_CTR_DRBG_ENTROPY_LEN.
|
* The default value is #MBEDTLS_CTR_DRBG_ENTROPY_LEN.
|
||||||
*
|
*
|
||||||
* \note mbedtls_ctr_drbg_seed() always sets the entropy length
|
|
||||||
* to #MBEDTLS_CTR_DRBG_ENTROPY_LEN, so this function
|
|
||||||
* only has an effect when it is called after
|
|
||||||
* mbedtls_ctr_drbg_seed().
|
|
||||||
*
|
|
||||||
* \note The security strength of CTR_DRBG is bounded by the
|
* \note The security strength of CTR_DRBG is bounded by the
|
||||||
* entropy length. Thus \p len must be at least
|
* entropy length. Thus \p len must be at least
|
||||||
* 32 (in bytes) to achieve a 256-bit strength.
|
* 32 (in bytes) to achieve a 256-bit strength.
|
||||||
|
@ -139,13 +139,11 @@ void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context *ctx );
|
|||||||
* Note that SHA-256 is just as efficient as SHA-224.
|
* Note that SHA-256 is just as efficient as SHA-224.
|
||||||
* The security strength can be reduced if a smaller
|
* The security strength can be reduced if a smaller
|
||||||
* entropy length is set with
|
* entropy length is set with
|
||||||
* mbedtls_hmac_drbg_set_entropy_len() afterwards.
|
* mbedtls_hmac_drbg_set_entropy_len().
|
||||||
*
|
*
|
||||||
* \note The entropy length for the initial seeding is
|
* \note The default entropy length is the security strength
|
||||||
* the security strength (converted from bits to bytes).
|
* (converted from bits to bytes). You can override
|
||||||
* You can set a different entropy length for subsequent
|
* it by calling mbedtls_hmac_drbg_set_entropy_len().
|
||||||
* seeding by calling mbedtls_hmac_drbg_set_entropy_len()
|
|
||||||
* after this function.
|
|
||||||
*
|
*
|
||||||
* \note During the initial seeding, this function calls
|
* \note During the initial seeding, this function calls
|
||||||
* the entropy source to obtain a nonce
|
* the entropy source to obtain a nonce
|
||||||
@ -224,14 +222,9 @@ void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function sets the amount of entropy grabbed on each
|
* \brief This function sets the amount of entropy grabbed on each
|
||||||
* reseed.
|
* seed or reseed.
|
||||||
*
|
*
|
||||||
* The default value is set by mbedtls_hmac_drbg_seed().
|
* See the documentation of mbedtls_hmac_drbg_seed() for the default value.
|
||||||
*
|
|
||||||
* \note mbedtls_hmac_drbg_seed() always sets the entropy length
|
|
||||||
* to the default value based on the chosen MD algorithm,
|
|
||||||
* so this function only has an effect if it is called
|
|
||||||
* after mbedtls_hmac_drbg_seed().
|
|
||||||
*
|
*
|
||||||
* \param ctx The HMAC_DRBG context.
|
* \param ctx The HMAC_DRBG context.
|
||||||
* \param len The amount of entropy to grab, in bytes.
|
* \param len The amount of entropy to grab, in bytes.
|
||||||
|
@ -66,56 +66,6 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Non-public function wrapped by mbedtls_ctr_drbg_seed(). Necessary to allow
|
|
||||||
* NIST tests to succeed (which require known length fixed entropy)
|
|
||||||
*/
|
|
||||||
int mbedtls_ctr_drbg_seed_entropy_len(
|
|
||||||
mbedtls_ctr_drbg_context *ctx,
|
|
||||||
int (*f_entropy)(void *, unsigned char *, size_t),
|
|
||||||
void *p_entropy,
|
|
||||||
const unsigned char *custom,
|
|
||||||
size_t len,
|
|
||||||
size_t entropy_len )
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
unsigned char key[MBEDTLS_CTR_DRBG_KEYSIZE];
|
|
||||||
|
|
||||||
memset( key, 0, MBEDTLS_CTR_DRBG_KEYSIZE );
|
|
||||||
|
|
||||||
mbedtls_aes_init( &ctx->aes_ctx );
|
|
||||||
|
|
||||||
ctx->f_entropy = f_entropy;
|
|
||||||
ctx->p_entropy = p_entropy;
|
|
||||||
|
|
||||||
ctx->entropy_len = entropy_len;
|
|
||||||
ctx->reseed_interval = MBEDTLS_CTR_DRBG_RESEED_INTERVAL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize with an empty key
|
|
||||||
*/
|
|
||||||
if( ( ret = mbedtls_aes_setkey_enc( &ctx->aes_ctx, key, MBEDTLS_CTR_DRBG_KEYBITS ) ) != 0 )
|
|
||||||
{
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ( ret = mbedtls_ctr_drbg_reseed( ctx, custom, len ) ) != 0 )
|
|
||||||
{
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx,
|
|
||||||
int (*f_entropy)(void *, unsigned char *, size_t),
|
|
||||||
void *p_entropy,
|
|
||||||
const unsigned char *custom,
|
|
||||||
size_t len )
|
|
||||||
{
|
|
||||||
return( mbedtls_ctr_drbg_seed_entropy_len( ctx, f_entropy, p_entropy, custom, len,
|
|
||||||
MBEDTLS_CTR_DRBG_ENTROPY_LEN ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx )
|
void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx )
|
||||||
{
|
{
|
||||||
if( ctx == NULL )
|
if( ctx == NULL )
|
||||||
@ -386,6 +336,52 @@ exit:
|
|||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx,
|
||||||
|
int (*f_entropy)(void *, unsigned char *, size_t),
|
||||||
|
void *p_entropy,
|
||||||
|
const unsigned char *custom,
|
||||||
|
size_t len )
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
unsigned char key[MBEDTLS_CTR_DRBG_KEYSIZE];
|
||||||
|
|
||||||
|
memset( key, 0, MBEDTLS_CTR_DRBG_KEYSIZE );
|
||||||
|
|
||||||
|
mbedtls_aes_init( &ctx->aes_ctx );
|
||||||
|
|
||||||
|
ctx->f_entropy = f_entropy;
|
||||||
|
ctx->p_entropy = p_entropy;
|
||||||
|
|
||||||
|
if( ctx->entropy_len == 0 )
|
||||||
|
ctx->entropy_len = MBEDTLS_CTR_DRBG_ENTROPY_LEN;
|
||||||
|
ctx->reseed_interval = MBEDTLS_CTR_DRBG_RESEED_INTERVAL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize with an empty key
|
||||||
|
*/
|
||||||
|
if( ( ret = mbedtls_aes_setkey_enc( &ctx->aes_ctx, key, MBEDTLS_CTR_DRBG_KEYBITS ) ) != 0 )
|
||||||
|
{
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( ret = mbedtls_ctr_drbg_reseed( ctx, custom, len ) ) != 0 )
|
||||||
|
{
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Backward compatibility wrapper */
|
||||||
|
int mbedtls_ctr_drbg_seed_entropy_len(
|
||||||
|
mbedtls_ctr_drbg_context *ctx,
|
||||||
|
int (*f_entropy)(void *, unsigned char *, size_t), void *p_entropy,
|
||||||
|
const unsigned char *custom, size_t len,
|
||||||
|
size_t entropy_len )
|
||||||
|
{
|
||||||
|
mbedtls_ctr_drbg_set_entropy_len( ctx, entropy_len );
|
||||||
|
return( mbedtls_ctr_drbg_seed( ctx, f_entropy, p_entropy, custom, len ) );
|
||||||
|
}
|
||||||
|
|
||||||
int mbedtls_ctr_drbg_random_with_add( void *p_rng,
|
int mbedtls_ctr_drbg_random_with_add( void *p_rng,
|
||||||
unsigned char *output, size_t output_len,
|
unsigned char *output, size_t output_len,
|
||||||
const unsigned char *additional, size_t add_len )
|
const unsigned char *additional, size_t add_len )
|
||||||
@ -617,8 +613,11 @@ int mbedtls_ctr_drbg_self_test( int verbose )
|
|||||||
mbedtls_printf( " CTR_DRBG (PR = TRUE) : " );
|
mbedtls_printf( " CTR_DRBG (PR = TRUE) : " );
|
||||||
|
|
||||||
test_offset = 0;
|
test_offset = 0;
|
||||||
CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy,
|
mbedtls_ctr_drbg_set_entropy_len( &ctx, 32 );
|
||||||
(void *) entropy_source_pr, nonce_pers_pr, 16, 32 ) );
|
CHK( mbedtls_ctr_drbg_seed( &ctx,
|
||||||
|
ctr_drbg_self_test_entropy,
|
||||||
|
(void *) entropy_source_pr,
|
||||||
|
nonce_pers_pr, 16 ) );
|
||||||
mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
|
mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
|
||||||
CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) );
|
CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) );
|
||||||
CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) );
|
CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) );
|
||||||
@ -638,8 +637,11 @@ int mbedtls_ctr_drbg_self_test( int verbose )
|
|||||||
mbedtls_ctr_drbg_init( &ctx );
|
mbedtls_ctr_drbg_init( &ctx );
|
||||||
|
|
||||||
test_offset = 0;
|
test_offset = 0;
|
||||||
CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy,
|
mbedtls_ctr_drbg_set_entropy_len( &ctx, 32 );
|
||||||
(void *) entropy_source_nopr, nonce_pers_nopr, 16, 32 ) );
|
CHK( mbedtls_ctr_drbg_seed( &ctx,
|
||||||
|
ctr_drbg_self_test_entropy,
|
||||||
|
(void *) entropy_source_nopr,
|
||||||
|
nonce_pers_nopr, 16 ) );
|
||||||
CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) );
|
CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) );
|
||||||
CHK( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) );
|
CHK( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) );
|
||||||
CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) );
|
CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) );
|
||||||
|
@ -275,6 +275,8 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx,
|
|||||||
|
|
||||||
ctx->reseed_interval = MBEDTLS_HMAC_DRBG_RESEED_INTERVAL;
|
ctx->reseed_interval = MBEDTLS_HMAC_DRBG_RESEED_INTERVAL;
|
||||||
|
|
||||||
|
if( ctx->entropy_len == 0 )
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
* See SP800-57 5.6.1 (p. 65-66) for the security strength provided by
|
* See SP800-57 5.6.1 (p. 65-66) for the security strength provided by
|
||||||
* each hash function, then according to SP800-90A rev1 10.1 table 2,
|
* each hash function, then according to SP800-90A rev1 10.1 table 2,
|
||||||
@ -285,6 +287,7 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx,
|
|||||||
ctx->entropy_len = md_size <= 20 ? 16 : /* 160-bits hash -> 128 bits */
|
ctx->entropy_len = md_size <= 20 ? 16 : /* 160-bits hash -> 128 bits */
|
||||||
md_size <= 28 ? 24 : /* 224-bits hash -> 192 bits */
|
md_size <= 28 ? 24 : /* 224-bits hash -> 192 bits */
|
||||||
32; /* better (256+) -> 256 bits */
|
32; /* better (256+) -> 256 bits */
|
||||||
|
}
|
||||||
|
|
||||||
if( ( ret = hmac_drbg_reseed_core( ctx, custom, len,
|
if( ( ret = hmac_drbg_reseed_core( ctx, custom, len,
|
||||||
1 /* add nonce */ ) ) != 0 )
|
1 /* add nonce */ ) ) != 0 )
|
||||||
@ -305,7 +308,7 @@ void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set entropy length grabbed for reseeds
|
* Set entropy length grabbed for seeding
|
||||||
*/
|
*/
|
||||||
void mbedtls_hmac_drbg_set_entropy_len( mbedtls_hmac_drbg_context *ctx, size_t len )
|
void mbedtls_hmac_drbg_set_entropy_len( mbedtls_hmac_drbg_context *ctx, size_t len )
|
||||||
{
|
{
|
||||||
|
@ -560,13 +560,14 @@ int main( int argc, char *argv[] )
|
|||||||
mbedtls_ctr_drbg_context ctr_drbg;
|
mbedtls_ctr_drbg_context ctr_drbg;
|
||||||
|
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
|
|
||||||
if( mbedtls_ctr_drbg_seed( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
|
if( mbedtls_ctr_drbg_seed( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
|
||||||
mbedtls_exit(1);
|
mbedtls_exit(1);
|
||||||
TIME_AND_TSC( "CTR_DRBG (NOPR)",
|
TIME_AND_TSC( "CTR_DRBG (NOPR)",
|
||||||
if( mbedtls_ctr_drbg_random( &ctr_drbg, buf, BUFSIZE ) != 0 )
|
if( mbedtls_ctr_drbg_random( &ctr_drbg, buf, BUFSIZE ) != 0 )
|
||||||
mbedtls_exit(1) );
|
mbedtls_exit(1) );
|
||||||
|
mbedtls_ctr_drbg_free( &ctr_drbg );
|
||||||
|
|
||||||
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
if( mbedtls_ctr_drbg_seed( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
|
if( mbedtls_ctr_drbg_seed( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
|
||||||
mbedtls_exit(1);
|
mbedtls_exit(1);
|
||||||
mbedtls_ctr_drbg_set_prediction_resistance( &ctr_drbg, MBEDTLS_CTR_DRBG_PR_ON );
|
mbedtls_ctr_drbg_set_prediction_resistance( &ctr_drbg, MBEDTLS_CTR_DRBG_PR_ON );
|
||||||
|
@ -72,7 +72,10 @@ void ctr_drbg_validate_pr( char *add_init_string, char *entropy_string,
|
|||||||
add2_len = unhexify( add2, add2_string );
|
add2_len = unhexify( add2, add2_string );
|
||||||
|
|
||||||
test_offset_idx = 0;
|
test_offset_idx = 0;
|
||||||
TEST_ASSERT( mbedtls_ctr_drbg_seed_entropy_len( &ctx, mbedtls_test_entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
|
mbedtls_ctr_drbg_set_entropy_len( &ctx, 32 );
|
||||||
|
TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx,
|
||||||
|
mbedtls_test_entropy_func, entropy,
|
||||||
|
add_init, add_init_len ) == 0 );
|
||||||
mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
|
mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
|
||||||
|
|
||||||
TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
|
TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
|
||||||
@ -110,7 +113,10 @@ void ctr_drbg_validate_nopr( char *add_init_string, char *entropy_string,
|
|||||||
add2_len = unhexify( add2, add2_string );
|
add2_len = unhexify( add2, add2_string );
|
||||||
|
|
||||||
test_offset_idx = 0;
|
test_offset_idx = 0;
|
||||||
TEST_ASSERT( mbedtls_ctr_drbg_seed_entropy_len( &ctx, mbedtls_test_entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
|
mbedtls_ctr_drbg_set_entropy_len( &ctx, 32 );
|
||||||
|
TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx,
|
||||||
|
mbedtls_test_entropy_func, entropy,
|
||||||
|
add_init, add_init_len ) == 0 );
|
||||||
|
|
||||||
TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
|
TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
|
||||||
TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, add_reseed, add_reseed_len ) == 0 );
|
TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, add_reseed, add_reseed_len ) == 0 );
|
||||||
|
@ -16,8 +16,8 @@ memory_buffer_alloc_free_alloc:100:64:100:100:0:0:0:1:200:0
|
|||||||
Memory buffer alloc - Out of Memory test
|
Memory buffer alloc - Out of Memory test
|
||||||
memory_buffer_alloc_oom_test:
|
memory_buffer_alloc_oom_test:
|
||||||
|
|
||||||
Memory buffer small buffer
|
Memory buffer: heap too small (header verification should fail)
|
||||||
memory_buffer_small_buffer:
|
memory_buffer_heap_too_small:
|
||||||
|
|
||||||
Memory buffer underalloc
|
Memory buffer: attempt to allocate SIZE_MAX
|
||||||
memory_buffer_underalloc:
|
memory_buffer_underalloc:
|
||||||
|
@ -29,7 +29,7 @@ void mbedtls_memory_buffer_alloc_self_test( )
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
|
/* BEGIN_CASE */
|
||||||
void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
||||||
int d_bytes,
|
int d_bytes,
|
||||||
int free_a, int free_b, int free_c,
|
int free_a, int free_b, int free_c,
|
||||||
@ -40,8 +40,11 @@ void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
|||||||
unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL, *ptr_d = NULL,
|
unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL, *ptr_d = NULL,
|
||||||
*ptr_e = NULL, *ptr_f = NULL;
|
*ptr_e = NULL, *ptr_f = NULL;
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
size_t reported_blocks;
|
size_t reported_blocks;
|
||||||
size_t allocated_bytes = 0, reported_bytes;
|
size_t reported_bytes;
|
||||||
|
#endif
|
||||||
|
size_t allocated_bytes = 0;
|
||||||
|
|
||||||
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
|
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
|
||||||
|
|
||||||
@ -79,8 +82,10 @@ void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
|||||||
allocated_bytes += d_bytes * sizeof(char);
|
allocated_bytes += d_bytes * sizeof(char);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||||
TEST_ASSERT( reported_bytes == allocated_bytes );
|
TEST_ASSERT( reported_bytes == allocated_bytes );
|
||||||
|
#endif
|
||||||
|
|
||||||
if( free_a )
|
if( free_a )
|
||||||
{
|
{
|
||||||
@ -118,8 +123,10 @@ void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
|||||||
allocated_bytes -= d_bytes * sizeof(char);
|
allocated_bytes -= d_bytes * sizeof(char);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||||
TEST_ASSERT( reported_bytes == allocated_bytes );
|
TEST_ASSERT( reported_bytes == allocated_bytes );
|
||||||
|
#endif
|
||||||
|
|
||||||
if( e_bytes > 0 )
|
if( e_bytes > 0 )
|
||||||
{
|
{
|
||||||
@ -179,8 +186,10 @@ void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
|||||||
ptr_f = NULL;
|
ptr_f = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||||
TEST_ASSERT( reported_bytes == 0 );
|
TEST_ASSERT( reported_bytes == 0 );
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||||
|
|
||||||
@ -189,12 +198,14 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
|
/* BEGIN_CASE */
|
||||||
void memory_buffer_alloc_oom_test( )
|
void memory_buffer_alloc_oom_test( )
|
||||||
{
|
{
|
||||||
unsigned char buf[1024];
|
unsigned char buf[1024];
|
||||||
unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL;
|
unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL;
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
size_t reported_blocks, reported_bytes;
|
size_t reported_blocks, reported_bytes;
|
||||||
|
#endif
|
||||||
|
|
||||||
(void)ptr_c;
|
(void)ptr_c;
|
||||||
|
|
||||||
@ -211,8 +222,10 @@ void memory_buffer_alloc_oom_test()
|
|||||||
ptr_c = mbedtls_calloc( 431, sizeof(char) );
|
ptr_c = mbedtls_calloc( 431, sizeof(char) );
|
||||||
TEST_ASSERT( ptr_c == NULL );
|
TEST_ASSERT( ptr_c == NULL );
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||||
TEST_ASSERT( reported_bytes >= 864 && reported_bytes <= sizeof(buf) );
|
TEST_ASSERT( reported_bytes >= 864 && reported_bytes <= sizeof(buf) );
|
||||||
|
#endif
|
||||||
|
|
||||||
mbedtls_free( ptr_a );
|
mbedtls_free( ptr_a );
|
||||||
ptr_a = NULL;
|
ptr_a = NULL;
|
||||||
@ -222,8 +235,10 @@ void memory_buffer_alloc_oom_test()
|
|||||||
ptr_b = NULL;
|
ptr_b = NULL;
|
||||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_MEMORY_DEBUG)
|
||||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||||
TEST_ASSERT( reported_bytes == 0 );
|
TEST_ASSERT( reported_bytes == 0 );
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||||
|
|
||||||
@ -232,17 +247,20 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
|
/* BEGIN_CASE */
|
||||||
void memory_buffer_small_buffer( )
|
void memory_buffer_heap_too_small( )
|
||||||
{
|
{
|
||||||
unsigned char buf[1];
|
unsigned char buf[1];
|
||||||
|
|
||||||
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
|
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
|
||||||
|
/* With MBEDTLS_MEMORY_DEBUG enabled, this prints a message
|
||||||
|
* "FATAL: verification of first header failed".
|
||||||
|
*/
|
||||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() != 0 );
|
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() != 0 );
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
|
/* BEGIN_CASE */
|
||||||
void memory_buffer_underalloc( )
|
void memory_buffer_underalloc( )
|
||||||
{
|
{
|
||||||
unsigned char buf[100];
|
unsigned char buf[100];
|
||||||
|
Loading…
Reference in New Issue
Block a user