diff --git a/configure b/configure index 73857f4511..36e425be62 100755 --- a/configure +++ b/configure @@ -2142,10 +2142,10 @@ SYSTEM_FUNCS=" " SYSTEM_LIBRARIES=" + bcrypt vaapi_drm vaapi_x11 vdpau_x11 - wincrypt " TOOLCHAIN_FEATURES=" @@ -3445,7 +3445,7 @@ avformat_deps="avcodec avutil" avformat_suggest="libm network zlib" avresample_deps="avutil" avresample_suggest="libm" -avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 vaapi videotoolbox corefoundation corevideo coremedia wincrypt" +avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 vaapi videotoolbox corefoundation corevideo coremedia bcrypt" postproc_deps="avutil gpl" postproc_suggest="libm" swresample_deps="avutil" @@ -5828,9 +5828,9 @@ check_header asm/types.h check_builtin stdatomic stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0); foo += bar" check_lib advapi32 "windows.h" RegCloseKey -ladvapi32 +check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt check_lib ole32 "windows.h" CoTaskMemFree -lole32 check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32 -check_lib wincrypt "windows.h wincrypt.h" CryptGenRandom -ladvapi32 check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi check_lib android android/native_window.h ANativeWindow_acquire -landroid diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c index 881c23c8c8..70dc509d2f 100644 --- a/libavutil/random_seed.c +++ b/libavutil/random_seed.c @@ -26,9 +26,9 @@ #if HAVE_IO_H #include #endif -#if HAVE_WINCRYPT +#if HAVE_BCRYPT #include -#include +#include #endif #include #include @@ -121,13 +121,14 @@ uint32_t av_get_random_seed(void) { uint32_t seed; -#if HAVE_WINCRYPT - 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) +#if HAVE_BCRYPT + BCRYPT_ALG_HANDLE algo_handle; + NTSTATUS ret = BCryptOpenAlgorithmProvider(&algo_handle, BCRYPT_RNG_ALGORITHM, + MS_PRIMITIVE_PROVIDER, 0); + if (BCRYPT_SUCCESS(ret)) { + NTSTATUS ret = BCryptGenRandom(algo_handle, (UCHAR*)&seed, sizeof(seed), 0); + BCryptCloseAlgorithmProvider(algo_handle, 0); + if (BCRYPT_SUCCESS(ret)) return seed; } #endif