Commit 1093383d authored by Martin Storsjö's avatar Martin Storsjö

random_seed: Support using CryptGenRandom on windows

Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 26b3fde6
...@@ -1139,6 +1139,7 @@ HAVE_LIST=" ...@@ -1139,6 +1139,7 @@ HAVE_LIST="
closesocket closesocket
cmov cmov
cpunop cpunop
CryptGenRandom
dcbzl dcbzl
dev_bktr_ioctl_bt848_h dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h dev_bktr_ioctl_meteor_h
...@@ -3202,6 +3203,7 @@ check_func sysctl ...@@ -3202,6 +3203,7 @@ check_func sysctl
check_func usleep check_func usleep
check_func_headers io.h setmode check_func_headers io.h setmode
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
check_func_headers windows.h GetProcessAffinityMask check_func_headers windows.h GetProcessAffinityMask
check_func_headers windows.h GetProcessTimes check_func_headers windows.h GetProcessTimes
......
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
#if HAVE_UNISTD_H #if HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
#if HAVE_CRYPTGENRANDOM
#include <windows.h>
#include <wincrypt.h>
#endif
#include <fcntl.h> #include <fcntl.h>
#include <math.h> #include <math.h>
#include <time.h> #include <time.h>
...@@ -82,6 +86,17 @@ uint32_t av_get_random_seed(void) ...@@ -82,6 +86,17 @@ uint32_t av_get_random_seed(void)
{ {
uint32_t seed; uint32_t seed;
#if HAVE_CRYPTGENRANDOM
HCRYPTPROV provider;
if (CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
BOOL ret = CryptGenRandom(provider, sizeof(seed), (PBYTE) &seed);
CryptReleaseContext(provider, 0);
if (ret)
return seed;
}
#endif
if (read_random(&seed, "/dev/urandom") == sizeof(seed)) if (read_random(&seed, "/dev/urandom") == sizeof(seed))
return seed; return seed;
if (read_random(&seed, "/dev/random") == sizeof(seed)) if (read_random(&seed, "/dev/random") == sizeof(seed))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment