diff options
| author | Fabio Alessandrelli | 2018-02-20 09:35:52 +0100 |
|---|---|---|
| committer | Fabio Alessandrelli | 2018-02-20 15:12:00 +0100 |
| commit | a929a5aea5f6d4582b845ba6b3fd6e776c5ad7fb (patch) | |
| tree | 1ee091b0b30178df9e1040958a9bcab9e0ab0072 /thirdparty/mbedtls/library/entropy_poll.c | |
| parent | a2ef49f8b977a16bbfa7ad1a179aeb43a3a6be18 (diff) | |
| download | godot-a929a5aea5f6d4582b845ba6b3fd6e776c5ad7fb.tar.gz godot-a929a5aea5f6d4582b845ba6b3fd6e776c5ad7fb.tar.zst godot-a929a5aea5f6d4582b845ba6b3fd6e776c5ad7fb.zip | |
Diffstat (limited to 'thirdparty/mbedtls/library/entropy_poll.c')
| -rw-r--r-- | thirdparty/mbedtls/library/entropy_poll.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/thirdparty/mbedtls/library/entropy_poll.c b/thirdparty/mbedtls/library/entropy_poll.c index a116e605d..5e8a090b3 100644 --- a/thirdparty/mbedtls/library/entropy_poll.c +++ b/thirdparty/mbedtls/library/entropy_poll.c @@ -54,28 +54,41 @@ #define _WIN32_WINNT 0x0400 #endif #include <windows.h> -#include <wincrypt.h> +#include <bcrypt.h> +#if _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 _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 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 ); |
