aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/mbedtls/library/entropy_poll.c
diff options
context:
space:
mode:
authorFabio Alessandrelli2018-02-20 09:35:52 +0100
committerFabio Alessandrelli2018-02-20 15:12:00 +0100
commita929a5aea5f6d4582b845ba6b3fd6e776c5ad7fb (patch)
tree1ee091b0b30178df9e1040958a9bcab9e0ab0072 /thirdparty/mbedtls/library/entropy_poll.c
parenta2ef49f8b977a16bbfa7ad1a179aeb43a3a6be18 (diff)
downloadgodot-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.c27
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 );