Simplify the chunk loop in psa_generate_random
Make the code slightly more readable and slightly smaller.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 79b0633..4d32da7 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -6394,21 +6394,18 @@
#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */
- int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
-
- while( output_size > MBEDTLS_PSA_RANDOM_MAX_REQUEST )
+ int ret = 0;
+ while( output_size > 0 )
{
- ret = mbedtls_psa_get_random(
- MBEDTLS_PSA_RANDOM_STATE,
- output, MBEDTLS_PSA_RANDOM_MAX_REQUEST );
- if( ret != 0 )
- return( mbedtls_to_psa_error( ret ) );
- output += MBEDTLS_PSA_RANDOM_MAX_REQUEST;
- output_size -= MBEDTLS_PSA_RANDOM_MAX_REQUEST;
+ size_t request_size =
+ ( output_size > MBEDTLS_PSA_RANDOM_MAX_REQUEST ?
+ MBEDTLS_PSA_RANDOM_MAX_REQUEST :
+ output_size );
+ ret = mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE,
+ output, request_size );
+ output_size -= request_size;
+ output += request_size;
}
-
- ret = mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE,
- output, output_size );
return( mbedtls_to_psa_error( ret ) );
#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */
}