diff options
Diffstat (limited to 'random/rndw32ce.c')
-rw-r--r-- | random/rndw32ce.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/random/rndw32ce.c b/random/rndw32ce.c index 12239602..6cd5d57e 100644 --- a/random/rndw32ce.c +++ b/random/rndw32ce.c @@ -34,27 +34,33 @@ some extra random. We do this, despite that it is a questionable suggestion as the OS as better means of collecting entropy than an application. */ +static size_t filler_used; +static size_t filler_length; +static unsigned char *filler_buffer; + static void -fillup_buffer (unsigned char *buffer, size_t length) +filler (const void *data, size_t datalen, enum random_origins dummy) { - size_t used = 0; + (void)dummy; + if (filler_used + datalen > filler_length) + datalen = filler_length - filler_used; + memcpy (filler_buffer + filler_used, data, datalen); + filler_used += datalen; +} - /* This code uses gcc anyway, thus we can use a nested function. */ - void filler (const void *data, size_t datalen, enum random_origins dummy) - { - (void)dummy; - if (used + datalen > length) - datalen = length - used; - memcpy (buffer+used, data, datalen); - used += datalen; - } - while (used < length) +static void +fillup_buffer (unsigned char *buffer, size_t length) +{ + filler_used = 0; + filler_length = length; + filler_buffer = buffer; + + while (filler_used < length) _gcry_rndw32ce_gather_random_fast (filler, 0); } - int _gcry_rndw32ce_gather_random (void (*add)(const void*, size_t, enum random_origins), |