--- /dev/null
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "random.h"
+
+#define RAND_BUF_SIZE 1024
+#define RND_DEV "/dev/urandom"
+
+int get_random(void)
+{
+ static int rndbuf[RAND_BUF_SIZE];
+ static int index = RAND_BUF_SIZE;
+ int fd, error, i = 0, ret;
+
+ if (index < RAND_BUF_SIZE)
+ return rndbuf[index++];
+
+ fd = open(RND_DEV, O_RDONLY);
+ if (fd < 0) {
+ error = errno;
+ fprintf(stderr, "Error opening file %s: %s\n",
+ RND_DEV, strerror(error));
+ return -1;
+ }
+
+ do {
+ ret = read(fd, rndbuf + i,
+ RAND_BUF_SIZE * (sizeof(rndbuf[0]) - i));
+
+ if (ret <= 0) {
+ error = errno;
+ fprintf(stderr, "Error reading file %s: %s\n",
+ RND_DEV, strerror(error));
+ goto out;
+ }
+
+ i += ret;
+ } while (i < RAND_BUF_SIZE * sizeof(rndbuf[0]));
+ out:
+ close(fd);
+}