|
@@ -1,53 +0,0 @@
|
|
|
-diff --git a/thirdparty/mbedtls/library/entropy_poll.c b/thirdparty/mbedtls/library/entropy_poll.c
|
|
|
-index 3420616a06..57fddd4d62 100644
|
|
|
---- a/thirdparty/mbedtls/library/entropy_poll.c
|
|
|
-+++ b/thirdparty/mbedtls/library/entropy_poll.c
|
|
|
-@@ -55,26 +55,41 @@
|
|
|
- #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) {
|
|
|
-- CryptReleaseContext(provider, 0);
|
|
|
-+ if (!BCRYPT_SUCCESS(BCryptGenRandom(NULL, output, len_as_ulong, BCRYPT_USE_SYSTEM_PREFERRED_RNG))) {
|
|
|
- return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED;
|
|
|
- }
|
|
|
-
|
|
|
-- CryptReleaseContext(provider, 0);
|
|
|
- *olen = len;
|
|
|
-
|
|
|
- return 0;
|