Signed-off-by: Martin Storsjö <martin@martin.st>tags/n1.1
| @@ -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 | |||||
| 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 @@ | |||||
| #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) | |||||
| { | { | ||||
| 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)) | ||||