12 void randombytes(void *ptr, size_t length)
17 static HCRYPTPROV prov = 0;
19 if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, 0)) {
23 if (!failed && !CryptGenRandom(prov, length, ptr)) {
29 if (fh >= 0 || (fh = open("/dev/urandom", O_RDONLY)) >= 0 || (fh = open("/dev/random", O_RDONLY)) >= 0) {
30 const ssize_t ret = read(fh, ptr, length);
31 if (ret < 0 || (size_t) ret != length) {
40 ErrorExit("%s: ERROR: randombytes failed for all possible methods for accessing random data", __local_name);
44 void srandom_init(void)
51 randombytes(&seed, sizeof seed);
53 #endif /* !__OpenBSD__ */