123456789101112131415161718192021222324252627282930313233343536373839 |
- /*
- D. J. Bernstein
- Public domain.
- */
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include "randombytes.h"
- /* it's really stupid that there isn't a syscall for this */
- static int fd = -1;
- void randombytes(unsigned char *x,unsigned long long xlen)
- {
- int i;
- if (fd == -1) {
- for (;;) {
- fd = open("/dev/urandom",O_RDONLY);
- if (fd != -1) break;
- sleep(1);
- }
- }
- while (xlen > 0) {
- if (xlen < 1048576) i = xlen; else i = 1048576;
- i = read(fd,x,i);
- if (i < 1) {
- sleep(1);
- continue;
- }
- x += i;
- xlen -= i;
- }
- }
|