diff mbox

[FFmpeg-devel] use bcrypt instead of the old wincrypt API

Message ID 20180403094425.23628-1-robux4@ycbcr.xyz
State New
Headers show

Commit Message

Steve Lhomme April 3, 2018, 9:44 a.m. UTC
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(-)

Comments

Michael Niedermayer April 3, 2018, 11:49 p.m. UTC | #1
On Tue, Apr 03, 2018 at 11:44:25AM +0200, Steve Lhomme wrote:
> 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(-)

no build failures with this (compared to the last iteration)

thx

[...]
James Almer April 14, 2018, 10:10 p.m. UTC | #2
On 4/3/2018 8:49 PM, Michael Niedermayer wrote:
> On Tue, Apr 03, 2018 at 11:44:25AM +0200, Steve Lhomme wrote:
>> 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(-)
> 
> no build failures with this (compared to the last iteration)
> 
> thx

Applied then (Not idea if Steve can push himself, but since it hasn't
been applied so far...)
Michael Niedermayer April 14, 2018, 10:18 p.m. UTC | #3
On Sat, Apr 14, 2018 at 07:10:40PM -0300, James Almer wrote:
> On 4/3/2018 8:49 PM, Michael Niedermayer wrote:
> > On Tue, Apr 03, 2018 at 11:44:25AM +0200, Steve Lhomme wrote:
> >> 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(-)
> > 
> > no build failures with this (compared to the last iteration)
> > 
> > thx
> 
> Applied then (Not idea if Steve can push himself, but since it hasn't
> been applied so far...)

he is in MAINTAINERs so he should have but maybe he doesnt, in which case
steve, if you have no access and want then send me your public ssh key

thx

[...]
diff mbox

Patch

diff --git a/configure b/configure
index 08d6fc5983..9a85ad59ad 100755
--- a/configure
+++ b/configure
@@ -2141,10 +2141,10 @@  SYSTEM_FUNCS="
 "
 
 SYSTEM_LIBRARIES="
+    bcrypt
     vaapi_drm
     vaapi_x11
     vdpau_x11
-    wincrypt
 "
 
 TOOLCHAIN_FEATURES="
@@ -3443,7 +3443,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"
@@ -5823,9 +5823,9 @@  check_header asm/types.h
 check_builtin stdatomic stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0)"
 
 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 <io.h>
 #endif
-#if HAVE_WINCRYPT
+#if HAVE_BCRYPT
 #include <windows.h>
-#include <wincrypt.h>
+#include <bcrypt.h>
 #endif
 #include <fcntl.h>
 #include <math.h>
@@ -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