From 791e5558d6b8d4e548fcf1ceffa7bff61c04b5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Sun, 21 Jan 2007 09:56:30 +0000 Subject: [PATCH] access private functions though the RAND_METHOD switch, move global egd function to rand-egd.c git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20030 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/des/rand-egd.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/des/rand-egd.c b/lib/des/rand-egd.c index 4ec9324e7..5c516d275 100644 --- a/lib/des/rand-egd.c +++ b/lib/des/rand-egd.c @@ -151,7 +151,7 @@ egd_seed(const void *indata, int size) } int -_hc_rand_egd_bytes(const char *path, unsigned char *outdata, int size) +get_bytes(const char *path, unsigned char *outdata, int size) { size_t len; int fd, ret = 1; @@ -181,7 +181,7 @@ _hc_rand_egd_bytes(const char *path, unsigned char *outdata, int size) static int egd_bytes(unsigned char *outdata, int size) { - return _hc_rand_egd_bytes(NULL, outdata, size); + return get_bytes(NULL, outdata, size); } static void @@ -198,7 +198,7 @@ egd_add(const void *indata, int size, double entropi) static int egd_pseudorand(unsigned char *outdata, int size) { - return _hc_rand_egd_bytes(NULL, outdata, size); + return get_bytes(NULL, outdata, size); } static int @@ -226,3 +226,37 @@ RAND_egd_method(void) { return &hc_rand_egd_method; } + + +int +RAND_egd(const char *filename) +{ + return RAND_egd_bytes(filename, 128); +} + +int +RAND_egd_bytes(const char *filename, int size) +{ + void *data; + int ret; + + if (size <= 0) + return 0; + + data = malloc(size); + if (data == NULL) + return 0; + + ret = get_bytes(filename, data, size); + if (ret != 1) { + free(data); + return ret; + } + + RAND_seed(data, size); + + memset(data, 0, sizeof(data)); + free(data); + + return 1; +}