mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-01-09 19:25:35 +00:00
CTR_DRBG: add mbedtls_ctr_drbg_update_ret
Deprecate mbedtls_ctr_drbg_update (which returns void) in favor of a new function mbedtls_ctr_drbg_update_ret which reports error. The old function is not officially marked as deprecated in this branch because this is a stable maintenance branch.
This commit is contained in:
parent
f249e37e86
commit
9ce2972399
|
@ -227,14 +227,37 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
|
||||||
*
|
*
|
||||||
* \param ctx The CTR_DRBG context.
|
* \param ctx The CTR_DRBG context.
|
||||||
* \param additional The data to update the state with.
|
* \param additional The data to update the state with.
|
||||||
* \param add_len Length of \p additional data.
|
* \param add_len Length of \p additional in bytes. This must be at
|
||||||
|
* most #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT.
|
||||||
*
|
*
|
||||||
* \note If \p add_len is greater than #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT,
|
* \return \c 0 on success.
|
||||||
* only the first #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT Bytes are used.
|
* \return #MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG if
|
||||||
* The remaining Bytes are silently discarded.
|
* \p add_len is more than
|
||||||
|
* #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT.
|
||||||
|
* \return An error from the underlying AES cipher on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_ctr_drbg_update_ret( mbedtls_ctr_drbg_context *ctx,
|
||||||
|
const unsigned char *additional,
|
||||||
|
size_t add_len );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief This function updates the state of the CTR_DRBG context.
|
||||||
|
*
|
||||||
|
* \warning This function cannot report errors. You should use
|
||||||
|
* mbedtls_ctr_drbg_update_ret() instead.
|
||||||
|
*
|
||||||
|
* \note If \p add_len is greater than
|
||||||
|
* #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT, only the first
|
||||||
|
* #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT Bytes are used.
|
||||||
|
* The remaining Bytes are silently discarded.
|
||||||
|
*
|
||||||
|
* \param ctx The CTR_DRBG context.
|
||||||
|
* \param additional The data to update the state with.
|
||||||
|
* \param add_len Length of \p additional data.
|
||||||
*/
|
*/
|
||||||
void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx,
|
void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx,
|
||||||
const unsigned char *additional, size_t add_len );
|
const unsigned char *additional,
|
||||||
|
size_t add_len );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function updates a CTR_DRBG instance with additional
|
* \brief This function updates a CTR_DRBG instance with additional
|
||||||
|
|
|
@ -303,22 +303,36 @@ exit:
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx,
|
int mbedtls_ctr_drbg_update_ret( mbedtls_ctr_drbg_context *ctx,
|
||||||
const unsigned char *additional, size_t add_len )
|
const unsigned char *additional,
|
||||||
|
size_t add_len )
|
||||||
{
|
{
|
||||||
unsigned char add_input[MBEDTLS_CTR_DRBG_SEEDLEN];
|
unsigned char add_input[MBEDTLS_CTR_DRBG_SEEDLEN];
|
||||||
|
int ret;
|
||||||
|
|
||||||
if( add_len > 0 )
|
if( add_len == 0 )
|
||||||
{
|
return( 0 );
|
||||||
/* MAX_INPUT would be more logical here, but we have to match
|
|
||||||
* block_cipher_df()'s limits since we can't propagate errors */
|
|
||||||
if( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT )
|
|
||||||
add_len = MBEDTLS_CTR_DRBG_MAX_SEED_INPUT;
|
|
||||||
|
|
||||||
block_cipher_df( add_input, additional, add_len );
|
if( ( ret = block_cipher_df( add_input, additional, add_len ) ) != 0 )
|
||||||
ctr_drbg_update_internal( ctx, add_input );
|
goto exit;
|
||||||
mbedtls_zeroize( add_input, sizeof( add_input ) );
|
if( ( ret = ctr_drbg_update_internal( ctx, add_input ) ) != 0 )
|
||||||
}
|
goto exit;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_zeroize( add_input, sizeof( add_input ) );
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Deprecated function, kept for backward compatibility. */
|
||||||
|
void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx,
|
||||||
|
const unsigned char *additional,
|
||||||
|
size_t add_len )
|
||||||
|
{
|
||||||
|
/* MAX_INPUT would be more logical here, but we have to match
|
||||||
|
* block_cipher_df()'s limits since we can't propagate errors */
|
||||||
|
if( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT )
|
||||||
|
add_len = MBEDTLS_CTR_DRBG_MAX_SEED_INPUT;
|
||||||
|
(void) mbedtls_ctr_drbg_update_ret( ctx, additional, add_len );
|
||||||
}
|
}
|
||||||
|
|
||||||
int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
|
int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
|
||||||
|
@ -514,7 +528,7 @@ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char
|
||||||
if( fread( buf, 1, n, f ) != n )
|
if( fread( buf, 1, n, f ) != n )
|
||||||
ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR;
|
ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR;
|
||||||
else
|
else
|
||||||
mbedtls_ctr_drbg_update( ctx, buf, n );
|
ret = mbedtls_ctr_drbg_update_ret( ctx, buf, n );
|
||||||
|
|
||||||
fclose( f );
|
fclose( f );
|
||||||
|
|
||||||
|
|
|
@ -177,9 +177,11 @@ void ctr_drbg_entropy_usage( )
|
||||||
}
|
}
|
||||||
TEST_ASSERT( last_idx == test_offset_idx );
|
TEST_ASSERT( last_idx == test_offset_idx );
|
||||||
|
|
||||||
/* Call update with too much data (sizeof entropy > MAX(_SEED)_INPUT)
|
/* Call update with too much data (sizeof entropy > MAX(_SEED)_INPUT).
|
||||||
* (just make sure it doesn't cause memory corruption) */
|
* Make sure it's detected as an error and doesn't cause memory
|
||||||
mbedtls_ctr_drbg_update( &ctx, entropy, sizeof( entropy ) );
|
* corruption. */
|
||||||
|
TEST_ASSERT( mbedtls_ctr_drbg_update_ret(
|
||||||
|
&ctx, entropy, sizeof( entropy ) ) != 0 );
|
||||||
|
|
||||||
/* Now enable PR, so the next few calls should all reseed */
|
/* Now enable PR, so the next few calls should all reseed */
|
||||||
mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
|
mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
|
||||||
|
|
Loading…
Reference in a new issue