Re: [libav-devel] [PATCH] random_seed: Support using CryptGenRandom on windows

2012-10-11 Thread Måns Rullgård
Martin Storsjö  writes:

> ---
>  configure   |2 ++
>  libavutil/random_seed.c |   14 ++
>  2 files changed, 16 insertions(+)
>
> diff --git a/configure b/configure
> index 17f38ec..67f88eb 100755
> --- a/configure
> +++ b/configure
> @@ -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 8ee4cb7..e29775e 100644
> --- a/libavutil/random_seed.c
> +++ b/libavutil/random_seed.c
> @@ -23,6 +23,10 @@
>  #if HAVE_UNISTD_H
>  #include 
>  #endif
> +#if HAVE_CRYPTGENRANDOM
> +#include 
> +#include 
> +#endif
>  #include 
>  #include 
>  #include 
> @@ -82,6 +86,16 @@ 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))
> -- 

Seems reasonable.

-- 
Måns Rullgård
m...@mansr.com
___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel


[libav-devel] [PATCH] random_seed: Support using CryptGenRandom on windows

2012-10-11 Thread Martin Storsjö
---
 configure   |2 ++
 libavutil/random_seed.c |   14 ++
 2 files changed, 16 insertions(+)

diff --git a/configure b/configure
index 17f38ec..67f88eb 100755
--- a/configure
+++ b/configure
@@ -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 8ee4cb7..e29775e 100644
--- a/libavutil/random_seed.c
+++ b/libavutil/random_seed.c
@@ -23,6 +23,10 @@
 #if HAVE_UNISTD_H
 #include 
 #endif
+#if HAVE_CRYPTGENRANDOM
+#include 
+#include 
+#endif
 #include 
 #include 
 #include 
@@ -82,6 +86,16 @@ 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))
-- 
1.7.9.5

___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel