| 
									
										
										
										
											2022-12-21 12:05:54 +01:00
										 |  |  | diff --git a/thirdparty/mbedtls/library/entropy_poll.c b/thirdparty/mbedtls/library/entropy_poll.c
 | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | index 3420616a06..57fddd4d62 100644
 | 
					
						
							| 
									
										
										
										
											2022-12-21 12:05:54 +01:00
										 |  |  | --- a/thirdparty/mbedtls/library/entropy_poll.c
 | 
					
						
							|  |  |  | +++ b/thirdparty/mbedtls/library/entropy_poll.c
 | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | @@ -55,26 +55,41 @@
 | 
					
						
							| 
									
										
										
										
											2018-03-28 18:13:47 +02:00
										 |  |  |  #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
 | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |  int mbedtls_platform_entropy_poll(void *data, unsigned char *output, size_t len, | 
					
						
							|  |  |  |                                    size_t *olen) | 
					
						
							| 
									
										
										
										
											2018-03-28 18:13:47 +02:00
										 |  |  |  { | 
					
						
							|  |  |  | -    HCRYPTPROV provider;
 | 
					
						
							|  |  |  | +    ULONG len_as_ulong = 0;
 | 
					
						
							|  |  |  |      ((void) data); | 
					
						
							|  |  |  |      *olen = 0; | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | -    if (CryptAcquireContext(&provider, NULL, NULL,
 | 
					
						
							|  |  |  | -                            PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) == FALSE) {
 | 
					
						
							| 
									
										
										
										
											2018-03-28 18:13:47 +02:00
										 |  |  | +    /*
 | 
					
						
							|  |  |  | +     * 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.
 | 
					
						
							|  |  |  | +     */
 | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | +    if (FAILED(SizeTToULong(len, &len_as_ulong))) {
 | 
					
						
							|  |  |  |          return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; | 
					
						
							| 
									
										
										
										
											2018-03-28 18:13:47 +02:00
										 |  |  |      } | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | -    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; | 
					
						
							| 
									
										
										
										
											2018-03-28 18:13:47 +02:00
										 |  |  |      } | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | -    CryptReleaseContext(provider, 0);
 | 
					
						
							| 
									
										
										
										
											2018-03-28 18:13:47 +02:00
										 |  |  |      *olen = len; | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |      return 0; |