mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-12-24 13:25:37 +00:00
CTR_DRBG: Don't use functions before they're defined
Move the definitions of mbedtls_ctr_drbg_seed_entropy_len() and mbedtls_ctr_drbg_seed() to after they are used. This makes the code easier to read and to maintain.
This commit is contained in:
parent
1d2a9e88c3
commit
f0bf757f9c
|
@ -62,68 +62,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)
|
|
||||||
*/
|
|
||||||
/* CTR_DRBG_Instantiate with derivation function (SP 800-90A §10.2.1.3.2)
|
|
||||||
* mbedtls_ctr_drbg_seed_entropy_len(ctx, f_entropy, p_entropy,
|
|
||||||
* custom, len, entropy_len)
|
|
||||||
* implements
|
|
||||||
* CTR_DRBG_Instantiate(entropy_input, nonce, personalization_string,
|
|
||||||
* security_strength) -> initial_working_state
|
|
||||||
* with inputs
|
|
||||||
* custom[:len] = nonce || personalization_string
|
|
||||||
* where entropy_input comes from f_entropy for entropy_len bytes
|
|
||||||
* and with outputs
|
|
||||||
* ctx = initial_working_state
|
|
||||||
*/
|
|
||||||
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];
|
|
||||||
|
|
||||||
mbedtls_platform_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 )
|
||||||
|
@ -427,6 +365,68 @@ exit:
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Non-public function wrapped by mbedtls_ctr_drbg_seed(). Necessary to allow
|
||||||
|
* NIST tests to succeed (which require known length fixed entropy)
|
||||||
|
*/
|
||||||
|
/* CTR_DRBG_Instantiate with derivation function (SP 800-90A §10.2.1.3.2)
|
||||||
|
* mbedtls_ctr_drbg_seed_entropy_len(ctx, f_entropy, p_entropy,
|
||||||
|
* custom, len, entropy_len)
|
||||||
|
* implements
|
||||||
|
* CTR_DRBG_Instantiate(entropy_input, nonce, personalization_string,
|
||||||
|
* security_strength) -> initial_working_state
|
||||||
|
* with inputs
|
||||||
|
* custom[:len] = nonce || personalization_string
|
||||||
|
* where entropy_input comes from f_entropy for entropy_len bytes
|
||||||
|
* and with outputs
|
||||||
|
* ctx = initial_working_state
|
||||||
|
*/
|
||||||
|
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 ) );
|
||||||
|
}
|
||||||
|
|
||||||
/* CTR_DRBG_Generate with derivation function (SP 800-90A §10.2.1.5.2)
|
/* CTR_DRBG_Generate with derivation function (SP 800-90A §10.2.1.5.2)
|
||||||
* mbedtls_ctr_drbg_random_with_add(ctx, output, output_len, additional, add_len)
|
* mbedtls_ctr_drbg_random_with_add(ctx, output, output_len, additional, add_len)
|
||||||
* implements
|
* implements
|
||||||
|
|
Loading…
Reference in a new issue