]> code.delx.au - pulseaudio/commitdiff
win32: Implement pa_random
authorMaarten Bosmans <mkbosmans@gmail.com>
Tue, 18 Jan 2011 10:28:13 +0000 (11:28 +0100)
committerMaarten Bosmans <mkbosmans@gmail.com>
Thu, 17 Feb 2011 11:02:31 +0000 (12:02 +0100)
src/pulsecore/random.c

index 3d159bf24f823280a6b7c2d934d3df264f475daa..bdbc143715b5ecfe936e836de17e4791bcaf0744 100644 (file)
 #include <stdlib.h>
 #include <time.h>
 
+#ifdef HAVE_WINDOWS_H
+#include <windows.h>
+#include <wincrypt.h>
+#endif
+
 #include <pulsecore/core-util.h>
 #include <pulsecore/log.h>
 #include <pulsecore/macro.h>
@@ -43,10 +48,20 @@ static const char * const devices[] = { "/dev/urandom", "/dev/random", NULL };
 
 static int random_proper(void *ret_data, size_t length) {
 #ifdef OS_IS_WIN32
+    int ret = -1;
+
     pa_assert(ret_data);
     pa_assert(length > 0);
 
-    return -1;
+    HCRYPTPROV hCryptProv = NULL;
+
+    if (CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
+        if(CryptGenRandom(hCryptProv, length, ret_data))
+            ret = 0;
+        CryptReleaseContext(hCryptProv, 0);
+    }
+
+    return ret;
 
 #else /* OS_IS_WIN32 */