summaryrefslogtreecommitdiff
path: root/random/rndw32ce.c
diff options
context:
space:
mode:
Diffstat (limited to 'random/rndw32ce.c')
-rw-r--r--random/rndw32ce.c32
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),