diff options
| author | Fabio Alessandrelli | 2018-03-28 18:13:47 +0200 |
|---|---|---|
| committer | Fabio Alessandrelli | 2018-04-03 20:13:55 +0200 |
| commit | d97c45ad2eafa83a463ef1480436fbba33d1b8fa (patch) | |
| tree | e98de5b60b20c90c2c8d284c53a05ab34453e515 /thirdparty/mbedtls/library/entropy_poll.c | |
| parent | 7e776f5b2e8f6c4375dae7a46c87d56a7ef6c075 (diff) | |
| download | godot-d97c45ad2eafa83a463ef1480436fbba33d1b8fa.tar.gz godot-d97c45ad2eafa83a463ef1480436fbba33d1b8fa.tar.zst godot-d97c45ad2eafa83a463ef1480436fbba33d1b8fa.zip | |
Diffstat (limited to 'thirdparty/mbedtls/library/entropy_poll.c')
| -rw-r--r-- | thirdparty/mbedtls/library/entropy_poll.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/thirdparty/mbedtls/library/entropy_poll.c b/thirdparty/mbedtls/library/entropy_poll.c index a116e605d..ed350735d 100644 --- a/thirdparty/mbedtls/library/entropy_poll.c +++ b/thirdparty/mbedtls/library/entropy_poll.c @@ -54,28 +54,43 @@ #define _WIN32_WINNT 0x0400 #endif #include <windows.h> -#include <wincrypt.h> +#include <bcrypt.h> +#if defined(_MSC_VER) && _MSC_VER <= 1600 +/* Visual Studio 2010 and earlier issue a warning when both <stdint.h> and + * <intsafe.h> are included, as they redefine a number of <TYPE>_MAX constants. + * These constants are guaranteed to be the same, though, so we suppress the + * warning when including intsafe.h. + */ +#pragma warning( push ) +#pragma warning( disable : 4005 ) +#endif +#include <intsafe.h> +#if defined(_MSC_VER) && _MSC_VER <= 1600 +#pragma warning( pop ) +#endif int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ) { - HCRYPTPROV provider; + ULONG len_as_ulong = 0; ((void) data); *olen = 0; - if( CryptAcquireContext( &provider, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) + /* + * BCryptGenRandom takes ULONG for size, which is smaller than size_t on + * 64-bit Windows platforms. Ensure len's value can be safely converted into + * a ULONG. + */ + if ( FAILED( SizeTToULong( len, &len_as_ulong ) ) ) { return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } - if( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) + if ( !BCRYPT_SUCCESS( BCryptGenRandom( NULL, output, len_as_ulong, BCRYPT_USE_SYSTEM_PREFERRED_RNG ) ) ) { - CryptReleaseContext( provider, 0 ); return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } - CryptReleaseContext( provider, 0 ); *olen = len; return( 0 ); |
