On 4/15/2018 5:17 PM, Martin Storsjö wrote:
> From: Steve Lhomme <[email protected]>
>
> Remove the wincrypt API calls since we don't support XP anymore and
> bcrypt is available since Vista, even on Windows Store builds.
> ---
> configure | 6 +++---
> libavutil/random_seed.c | 19 ++++++++++---------
> 2 files changed, 13 insertions(+), 12 deletions(-)
>
> diff --git a/configure b/configure
> index 3c7b6a0981..0eba9b24f3 100755
> --- a/configure
> +++ b/configure
> @@ -1703,12 +1703,12 @@ SYSTEM_FUNCS="
> "
>
> SYSTEM_LIBRARIES="
> + bcrypt
> sdl
> vaapi_1
> vaapi_drm
> vaapi_x11
> vdpau_x11
> - wincrypt
> "
>
> TOOLCHAIN_FEATURES="
> @@ -2610,7 +2610,7 @@ avdevice_extralibs="libm_extralibs"
> avformat_extralibs="libm_extralibs"
> avfilter_extralibs="pthreads_extralibs libm_extralibs"
> avresample_extralibs="libm_extralibs"
> -avutil_extralibs="clock_gettime_extralibs cuda_extralibs cuvid_extralibs
> d3d11va_extralibs libm_extralibs libmfx_extralibs nanosleep_extralibs
> pthreads_extralibs user32_extralibs vaapi_extralibs vaapi_drm_extralibs
> vaapi_x11_extralibs vdpau_x11_extralibs wincrypt_extralibs"
> +avutil_extralibs="clock_gettime_extralibs cuda_extralibs cuvid_extralibs
> d3d11va_extralibs libm_extralibs libmfx_extralibs nanosleep_extralibs
> pthreads_extralibs user32_extralibs vaapi_extralibs vaapi_drm_extralibs
> vaapi_x11_extralibs vdpau_x11_extralibs bcrypt_extralibs"
> swscale_extralibs="libm_extralibs"
>
> # programs
> @@ -4579,9 +4579,9 @@ check_header windows.h
> # so we also check that atomics actually work here
> check_builtin stdatomic stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
>
> +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_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
> diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c
> index 089d883916..388cb401ba 100644
> --- a/libavutil/random_seed.c
> +++ b/libavutil/random_seed.c
> @@ -23,9 +23,9 @@
> #if HAVE_UNISTD_H
> #include <unistd.h>
> #endif
> -#if HAVE_WINCRYPT
> +#if HAVE_BCRYPT
> #include <windows.h>
> -#include <wincrypt.h>
> +#include <bcrypt.h>
> #endif
> #include <fcntl.h>
> #include <math.h>
> @@ -96,13 +96,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);
FWIW, there seems to be an old mingw-w64 release that has bcrypt.h, the
BCryptGenRandom and BCryptOpenAlgorithmProvider prototypes, but it's
missing defines like BCRYPT_RNG_ALGORITHM, MS_PRIMITIVE_PROVIDER and
BCRYPT_SUCCESS.
An extra check for the latter like
check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM"
would be needed to disable bcrypt on those broken/incomplete toolchains
and prevent compilation failures.
> + 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
>
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel