summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--random.c7
2 files changed, 11 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index eae337562..4f0131cf5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Jul 18 09:07:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (fill_random_seed): use cryptographic service on Windows.
+
Sat Jul 18 07:56:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk.rb: fail to create a widget object for an unknown
diff --git a/random.c b/random.c
index f67b65f2b..8013a51d0 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);