diff --git a/api/stse_random.c b/api/stse_random.c index 6e6a483..4ecfac3 100644 --- a/api/stse_random.c +++ b/api/stse_random.c @@ -30,6 +30,10 @@ stse_ReturnCode_t stse_generate_random( return (STSE_API_HANDLER_NOT_INITIALISED); } + if (random_size == 0) { + return (STSE_OK); + } + if (pRandom == NULL) { return (STSE_API_INVALID_PARAMETER); } @@ -38,17 +42,18 @@ stse_ReturnCode_t stse_generate_random( #ifdef STSE_CONF_STSAFE_L_SUPPORT if (pSTSE->device_type != STSAFE_L010) { #endif /* STSE_CONF_STSAFE_L_SUPPORT */ - for (PLAT_UI16 index = 0; index < random_size;) { - ret = stsafea_generate_random( - pSTSE, - &pRandom[index], - ((random_size - index) < STSAFEA_MAXIMUM_RNG_SIZE) ? (random_size - index) : STSAFEA_MAXIMUM_RNG_SIZE); + while (0 < random_size) { + PLAT_UI16 chunk = (random_size < STSAFEA_MAXIMUM_RNG_SIZE) ? + random_size : STSAFEA_MAXIMUM_RNG_SIZE; + + ret = stsafea_generate_random(pSTSE, pRandom, chunk); if (ret != STSE_OK) { break; } - index += STSAFEA_MAXIMUM_RNG_SIZE; + random_size -= chunk; + pRandom += chunk; } #ifdef STSE_CONF_STSAFE_L_SUPPORT } diff --git a/api/stse_random.h b/api/stse_random.h index f391def..cfa75b9 100644 --- a/api/stse_random.h +++ b/api/stse_random.h @@ -33,7 +33,7 @@ * \details This API use the STSE to generate random number * \param[in] pSTSE Pointer to target STSecureElement device * \param[in,out] pRandom Pointer to random buffer - * \param[in,out] random_size Random size + * \param[in] random_size Random size * \return \ref STSE_OK on success ; \ref stse_ReturnCode_t error code otherwise */ stse_ReturnCode_t stse_generate_random(