mirror of https://github.com/ARMmbed/mbed-os.git
Add behavior to throw away collected entropy on occurrence of a noise alarm.
parent
97ef051eba
commit
59b3bfa0ce
|
@ -218,11 +218,11 @@ int sl_trng_poll( TRNG_TypeDef *device,
|
||||||
size_t *olen )
|
size_t *olen )
|
||||||
{
|
{
|
||||||
size_t output_len = 0;
|
size_t output_len = 0;
|
||||||
size_t count = 0;
|
size_t chunk_len = 0;
|
||||||
size_t available;
|
size_t available;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
while (len > 0)
|
while (output_len < len)
|
||||||
{
|
{
|
||||||
available = device->FIFOLEVEL * 4;
|
available = device->FIFOLEVEL * 4;
|
||||||
if (available == 0)
|
if (available == 0)
|
||||||
|
@ -241,7 +241,17 @@ int sl_trng_poll( TRNG_TypeDef *device,
|
||||||
(ret == SL_TRNG_ERR_NOISE_ALARM) )
|
(ret == SL_TRNG_ERR_NOISE_ALARM) )
|
||||||
{
|
{
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
continue;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* Noise alarms trigger a FIFO clearing, and we need to throw
|
||||||
|
* away the collected entropy. */
|
||||||
|
if ( (ret == SL_TRNG_ERR_PRELIMINARY_NOISE_ALARM) ||
|
||||||
|
(ret == SL_TRNG_ERR_NOISE_ALARM) )
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
output_len = 0;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* Alarm has been signaled so we throw the generated data away. */
|
/* Alarm has been signaled so we throw the generated data away. */
|
||||||
|
@ -252,11 +262,9 @@ int sl_trng_poll( TRNG_TypeDef *device,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
count = SL_MIN(len, available);
|
chunk_len = SL_MIN(len - output_len, available);
|
||||||
sl_trng_read_chunk(device, output, count);
|
sl_trng_read_chunk(device, output + output_len, chunk_len);
|
||||||
output += count;
|
output_len += chunk_len;
|
||||||
output_len += count;
|
|
||||||
len -= count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*olen = output_len;
|
*olen = output_len;
|
||||||
|
|
Loading…
Reference in New Issue