From 396a8ad5b3291776d455a10ebb4951904dbe01bd Mon Sep 17 00:00:00 2001 From: Oskari Timperi Date: Thu, 17 Sep 2015 01:04:49 +0300 Subject: initial commit --- randgen_unix.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 randgen_unix.c (limited to 'randgen_unix.c') diff --git a/randgen_unix.c b/randgen_unix.c new file mode 100644 index 0000000..f7d12bb --- /dev/null +++ b/randgen_unix.c @@ -0,0 +1,42 @@ +#include "randgen.h" + +#include +#include +#include +#include + +struct randgen *randgen_open(const char *device) +{ + const char *filename = "/dev/urandom"; + FILE *fp; + + if (device) + filename = device; + + if ((fp = fopen(filename, "r")) == NULL) + { + fprintf(stderr, "failed to open random generator (%s): %s\n", filename, strerror(errno)); + return NULL; + } + + return (struct randgen *) fp; +} + +int randgen_close(struct randgen *randgen) +{ + assert(randgen != NULL); + fclose((FILE *) randgen); + return 0; +} + +int randgen_generate(struct randgen *randgen, void *buf, size_t size) +{ + assert(randgen != NULL); + assert(buf != NULL); + assert(size > 0); + + if (fread(buf, 1, size, (FILE *) randgen) != size) + return -1; + + return 0; +} -- cgit v1.2.3