47#if defined(__linux__) && !defined(_GNU_SOURCE)
52#if !defined(MBEDTLS_CONFIG_FILE)
55#include MBEDTLS_CONFIG_FILE
60#if defined(MBEDTLS_ENTROPY_C)
65#if defined(MBEDTLS_TIMING_C)
68#if defined(MBEDTLS_HAVEGE_C)
71#if defined(MBEDTLS_ENTROPY_NV_SEED)
75#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY)
77#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \
78 !defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \
80#error "Platform entropy sources only work on Unix and Windows, see MBEDTLS_NO_PLATFORM_ENTROPY in config.h"
83#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
85#if !defined(_WIN32_WINNT)
86#define _WIN32_WINNT 0x0400
122#if defined(__linux__) && defined(__GLIBC__)
124#include <sys/syscall.h>
125#if defined(SYS_getrandom)
126#define HAVE_GETRANDOM
129static int getrandom_wrapper(
void *
buf,
size_t buflen,
unsigned int flags )
132#if defined(__has_feature)
133#if __has_feature(memory_sanitizer)
137 return( syscall( SYS_getrandom,
buf, buflen,
flags ) );
145 unsigned char *output,
size_t len,
size_t *olen )
152#if defined(HAVE_GETRANDOM)
153 ret = getrandom_wrapper( output,
len, 0 );
173 if( read_len !=
len )
187#if defined(MBEDTLS_TEST_NULL_ENTROPY)
188int mbedtls_null_entropy_poll(
void *
data,
189 unsigned char *output,
size_t len,
size_t *olen )
195 if(
len <
sizeof(
unsigned char) )
198 *olen =
sizeof(
unsigned char);
204#if defined(MBEDTLS_TIMING_C)
206 unsigned char *output,
size_t len,
size_t *olen )
212 if(
len <
sizeof(
unsigned long) )
215 memcpy( output, &timer,
sizeof(
unsigned long) );
216 *olen =
sizeof(
unsigned long);
222#if defined(MBEDTLS_HAVEGE_C)
223int mbedtls_havege_poll(
void *
data,
224 unsigned char *output,
size_t len,
size_t *olen )
238#if defined(MBEDTLS_ENTROPY_NV_SEED)
239int mbedtls_nv_seed_poll(
void *
data,
240 unsigned char *output,
size_t len,
size_t *olen )
BOOL WINAPI CryptGenRandom(HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer)
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
Entropy accumulator implementation.
#define MBEDTLS_ENTROPY_BLOCK_SIZE
#define MBEDTLS_ERR_ENTROPY_SOURCE_FAILED
Platform-specific and custom entropy polling functions.
int mbedtls_platform_entropy_poll(void *data, unsigned char *output, size_t len, size_t *olen)
Entropy poll callback that provides 0 entropy.
int mbedtls_hardclock_poll(void *data, unsigned char *output, size_t len, size_t *olen)
mbedtls_timing_hardclock-based entropy poll callback
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
HAVEGE: HArdware Volatile Entropy Gathering and Expansion.
int mbedtls_havege_random(void *p_rng, unsigned char *output, size_t len)
HAVEGE rand function.
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
#define memcpy(s1, s2, n)
Configuration options (set of defines)
Portable interface to timeouts and to the CPU cycle counter.
unsigned long mbedtls_timing_hardclock(void)
Return the CPU cycle counter value.
#define CRYPT_VERIFYCONTEXT
#define CryptAcquireContext