diff options
Diffstat (limited to 'libavutil/random_seed.c')
-rw-r--r-- | libavutil/random_seed.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c index 49c122001a..c674704615 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> @@ -102,6 +106,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)) |