diff options
author | Martin Storsjö <martin@martin.st> | 2012-10-11 14:30:23 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-10-11 18:49:34 +0300 |
commit | 1093383d6cf7112d54b849e29c739e957d157b25 (patch) | |
tree | 9a96c38da6489a1978af4216822f84d4fc1fcd43 | |
parent | 26b3fde6a78f711ba510573eacbc92671a923b2d (diff) | |
download | ffmpeg-1093383d6cf7112d54b849e29c739e957d157b25.tar.gz |
random_seed: Support using CryptGenRandom on windows
Signed-off-by: Martin Storsjö <martin@martin.st>
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | libavutil/random_seed.c | 15 |
2 files changed, 17 insertions, 0 deletions
@@ -1139,6 +1139,7 @@ HAVE_LIST=" closesocket cmov cpunop + CryptGenRandom dcbzl dev_bktr_ioctl_bt848_h dev_bktr_ioctl_meteor_h @@ -3202,6 +3203,7 @@ check_func sysctl check_func usleep check_func_headers io.h setmode 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_func_headers windows.h GetProcessAffinityMask check_func_headers windows.h GetProcessTimes diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c index 8ee4cb716e..ec9caa74b7 100644 --- a/libavutil/random_seed.c +++ b/libavutil/random_seed.c @@ -23,6 +23,10 @@ #if HAVE_UNISTD_H #include <unistd.h> #endif +#if HAVE_CRYPTGENRANDOM +#include <windows.h> +#include <wincrypt.h> +#endif #include <fcntl.h> #include <math.h> #include <time.h> @@ -82,6 +86,17 @@ uint32_t av_get_random_seed(void) { 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)) return seed; if (read_random(&seed, "/dev/random") == sizeof(seed)) |