From 7db92fb1932065e40cd4709989e429fca2d49778 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 25 May 2014 16:26:37 +0200 Subject: [PATCH] Use CryptGenRandom() instead of /dev/[u]random on Windows. --- src/crypto.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/crypto.c b/src/crypto.c index cf000c8a..2e2fa538 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -23,6 +23,8 @@ //TODO: use a strict random source once to seed a PRNG? +#ifndef HAVE_MINGW + static int random_fd = -1; void crypto_init(void) { @@ -36,11 +38,30 @@ void crypto_init(void) { } void crypto_exit(void) { + close(random_fd); +} + +#else + +#include +HCRYPTPROV prov; + +void crypto_init(void) { + if(!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { + fprintf(stderr, "CryptAcquireContext() failed!\n"); + abort(); + } +} + +void crypto_exit(void) { + CryptReleaseContext(prov, 0); } void randomize(void *out, size_t outlen) { - if(read(random_fd, out, outlen) != outlen) { - fprintf(stderr, "Error reading random numbers: %s\n", strerror(errno)); + if(!CryptGenRandom(prov, outlen, out)) { + fprintf(stderr, "CryptGenRandom() failed\n"); abort(); } } + +#endif -- 2.39.5