OSDN Git Service

Use CryptGenRandom() for RNG initialize in Windows
authorHabu <habu@users.sourceforge.jp>
Fri, 7 Mar 2014 15:31:12 +0000 (00:31 +0900)
committerHabu <habu@users.sourceforge.jp>
Fri, 7 Mar 2014 15:31:12 +0000 (00:31 +0900)
src/z-rand.c

index fbdd462..699e1fa 100644 (file)
 
 /* Purpose: a simple random number generator -BEN- */
 
+#if defined(WINDOWS)
+#include <Windows.h>
+#endif
+
 #include "z-rand.h"
 
 
@@ -118,6 +122,19 @@ void Rand_state_init(void)
        memcpy(Rand_state, buf, sizeof(buf));
        fclose(fp);
 
+#elif defined(WINDOWS)
+
+       HCRYPTPROV hProvider;
+       u32b buf[4];
+
+       CryptAcquireContext(&hProvider, NULL, NULL, PROV_RSA_FULL, 0);
+
+       do {
+               CryptGenRandom(hProvider, sizeof(buf[0]) * 4, (BYTE*)buf);
+       } while ((buf[0] | buf[1] | buf[2] | buf[3]) == 0);
+
+       CryptReleaseContext(hProvider, 0);      
+
 #else
 
        /* Basic seed */