X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=inline;f=lib%2Fentropy.c;h=f9808553dc26f9ad150dfd2d150555b1f30e46f9;hb=0ef165ecb57943e17a8ee8270df68ffb8d032e29;hp=02f56e0f447ab15fde978e818985ecb6b1f4501a;hpb=10a89ef04df5669c5cdd02f786150a7ab8454e01;p=sliver-openvswitch.git diff --git a/lib/entropy.c b/lib/entropy.c index 02f56e0f4..f9808553d 100644 --- a/lib/entropy.c +++ b/lib/entropy.c @@ -20,6 +20,9 @@ #include #include #include +#ifdef _WIN32 +#include +#endif #include "socket-util.h" #include "vlog.h" @@ -33,6 +36,7 @@ static const char urandom[] = "/dev/urandom"; int get_entropy(void *buffer, size_t n) { +#ifndef _WIN32 size_t bytes_read; int error; int fd; @@ -49,6 +53,19 @@ get_entropy(void *buffer, size_t n) if (error) { VLOG_ERR("%s: read error (%s)", urandom, ovs_retval_to_string(error)); } +#else + int error = 0; + HCRYPTPROV crypt_prov = 0; + + CryptAcquireContext(&crypt_prov, NULL, NULL, + PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); + if (!CryptGenRandom(crypt_prov, n, buffer)) { + VLOG_ERR("CryptGenRandom: read error (%s)", ovs_lasterror_to_string()); + error = EINVAL; + } + + CryptReleaseContext(crypt_prov, 0); +#endif return error; }