diff --git a/ChangeLog b/ChangeLog index eae337562e..4f0131cf58 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat Jul 18 09:07:00 2009 Nobuyoshi Nakada + + * random.c (fill_random_seed): use cryptographic service on Windows. + Sat Jul 18 07:56:00 2009 Hidetoshi NAGAI * ext/tk/lib/tk.rb: fail to create a widget object for an unknown diff --git a/random.c b/random.c index f67b65f2be..8013a51d01 100644 --- a/random.c +++ b/random.c @@ -389,6 +389,8 @@ fill_random_seed(unsigned int seed[DEFAULT_SEED_CNT]) #if USE_DEV_URANDOM int fd; struct stat statbuf; +#elif defined(_WIN32) + HCRYPTPROV prov; #endif memset(seed, 0, DEFAULT_SEED_LEN); @@ -410,6 +412,11 @@ fill_random_seed(unsigned int seed[DEFAULT_SEED_CNT]) } close(fd); } +#elif defined(_WIN32) + if (CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { + CryptGenRandom(prov, DEFAULT_SEED_LEN, seed); + CryptReleaseContext(prov, 0); + } #endif gettimeofday(&tv, 0);