Skip to content

Commit f181eca

Browse files
Fix psa_generate_random for >1024 bytes
mbedtls_ctr_drbg_random can only return up to MBEDTLS_CTR_DRBG_MAX_REQUEST (normally 1024) bytes at a time. So if more than that is requested, call mbedtls_ctr_drbg_random in a loop.
1 parent bdc96fd commit f181eca

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

library/psa_crypto.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5650,6 +5650,17 @@ psa_status_t psa_generate_random( uint8_t *output,
56505650
int ret;
56515651
GUARD_MODULE_INITIALIZED;
56525652

5653+
while( output_size > MBEDTLS_CTR_DRBG_MAX_REQUEST )
5654+
{
5655+
ret = mbedtls_ctr_drbg_random( &global_data.ctr_drbg,
5656+
output,
5657+
MBEDTLS_CTR_DRBG_MAX_REQUEST );
5658+
if( ret != 0 )
5659+
return( mbedtls_to_psa_error( ret ) );
5660+
output += MBEDTLS_CTR_DRBG_MAX_REQUEST;
5661+
output_size -= MBEDTLS_CTR_DRBG_MAX_REQUEST;
5662+
}
5663+
56535664
ret = mbedtls_ctr_drbg_random( &global_data.ctr_drbg, output, output_size );
56545665
return( mbedtls_to_psa_error( ret ) );
56555666
}

0 commit comments

Comments
 (0)