mbed TLS v2.2.0
entropy_alt.h
Go to the documentation of this file.
1 
23 #ifndef MBEDTLS_ENTROPY_ALT_H
24 #define MBEDTLS_ENTROPY_ALT_H
25 
26 #if !defined(MBEDTLS_CONFIG_FILE)
27 #include "config.h"
28 #else
29 #include MBEDTLS_CONFIG_FILE
30 #endif
31 
32 #include <stddef.h>
33 
34 #if defined(MBEDTLS_TRNG_C)
35 #include "trng.h"
36 #endif
37 
38 #if defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256)
39 #include "sha512.h"
40 #define MBEDTLS_ENTROPY_SHA512_ACCUMULATOR
41 #else
42 #if defined(MBEDTLS_SHA256_C)
43 #define MBEDTLS_ENTROPY_SHA256_ACCUMULATOR
44 #include "sha256.h"
45 #endif
46 #endif
47 
48 #if defined(MBEDTLS_THREADING_C)
49 #include "threading.h"
50 #endif
51 
52 #if defined(MBEDTLS_HAVEGE_C)
53 #include "havege.h"
54 #endif
55 
56 #define MBEDTLS_ERR_ENTROPY_SOURCE_FAILED -0x003C
57 #define MBEDTLS_ERR_ENTROPY_MAX_SOURCES -0x003E
58 #define MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED -0x0040
59 #define MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE -0x003D
60 #define MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR -0x003F
70 #if !defined(MBEDTLS_ENTROPY_MAX_SOURCES)
71 #define MBEDTLS_ENTROPY_MAX_SOURCES 20
72 #endif
73 
74 #if !defined(MBEDTLS_ENTROPY_MAX_GATHER)
75 #define MBEDTLS_ENTROPY_MAX_GATHER 128
76 #endif
77 
78 /* \} name SECTION: Module settings */
79 
80 #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
81 #define MBEDTLS_ENTROPY_BLOCK_SIZE 64
82 #else
83 #define MBEDTLS_ENTROPY_BLOCK_SIZE 32
84 #endif
85 
86 #define MBEDTLS_ENTROPY_MAX_SEED_SIZE 1024
87 #define MBEDTLS_ENTROPY_SOURCE_MANUAL MBEDTLS_ENTROPY_MAX_SOURCES
88 
89 #define MBEDTLS_ENTROPY_SOURCE_STRONG 1
90 #define MBEDTLS_ENTROPY_SOURCE_WEAK 0
92 #ifdef __cplusplus
93 extern "C" {
94 #endif
95 
107 typedef int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output, size_t len,
108  size_t *olen);
109 
113 typedef struct
114 {
116  void * p_source;
117  size_t size;
118  size_t threshold;
119  int strong;
120 }
122 
126 typedef struct
127 {
128 #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
129  mbedtls_sha512_context accumulator;
130 #else
132 #endif
135 #if defined(MBEDTLS_HAVEGE_C)
136  mbedtls_havege_state havege_data;
137 #endif
138 #if defined(MBEDTLS_THREADING_C)
139  mbedtls_threading_mutex_t mutex;
140 #endif
141 #if defined(MBEDTLS_TRNG_C)
143 #endif
144 }
146 
153 
160 
179  mbedtls_entropy_f_source_ptr f_source, void *p_source,
180  size_t threshold, int strong );
181 
191 
203 int mbedtls_entropy_func( void *data, unsigned char *output, size_t len );
204 
216  const unsigned char *data, size_t len );
217 
218 #if defined(MBEDTLS_FS_IO)
219 
229 int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *path );
230 
243 int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *path );
244 #endif /* MBEDTLS_FS_IO */
245 
246 #if defined(MBEDTLS_SELF_TEST)
247 
252 int mbedtls_entropy_self_test( int verbose );
253 #endif /* MBEDTLS_SELF_TEST */
254 
255 #ifdef __cplusplus
256 }
257 #endif
258 
259 #endif /* MBEDTLS_ENTROPY_ALT_H */
TRNG context structure.
Definition: trng.h:145
int(* mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output, size_t len, size_t *olen)
Entropy poll callback pointer.
Definition: entropy_alt.h:107
void * p_source
The callback data pointer.
Definition: entropy_alt.h:116
size_t threshold
Minimum bytes required before release.
Definition: entropy_alt.h:118
HAVEGE state structure.
Definition: havege.h:37
mbedtls_entropy_f_source_ptr f_source
The entropy source callback.
Definition: entropy_alt.h:115
Compatibility names (set of defines)
int mbedtls_entropy_gather(mbedtls_entropy_context *ctx)
Trigger an extra gather poll for the accumulator (Thread-safe if MBEDTLS_THREADING_C is enabled) ...
size_t size
Amount received in bytes.
Definition: entropy_alt.h:117
Entropy context structure.
Definition: entropy_alt.h:126
Threading abstraction layer.
SHA-512 context structure.
Definition: sha512.h:46
void mbedtls_entropy_init(mbedtls_entropy_context *ctx)
Initialize the context.
int mbedtls_entropy_add_source(mbedtls_entropy_context *ctx, mbedtls_entropy_f_source_ptr f_source, void *p_source, size_t threshold, int strong)
Adds an entropy source to poll (Thread-safe if MBEDTLS_THREADING_C is enabled)
#define MBEDTLS_ENTROPY_MAX_SOURCES
Maximum number of sources supported.
Definition: entropy_alt.h:71
HAVEGE: HArdware Volatile Entropy Gathering and Expansion.
SHA-256 context structure.
Definition: sha256_alt.h:58
int mbedtls_entropy_update_manual(mbedtls_entropy_context *ctx, const unsigned char *data, size_t len)
Add data to the accumulator manually (Thread-safe if MBEDTLS_THREADING_C is enabled) ...
void mbedtls_entropy_free(mbedtls_entropy_context *ctx)
Free the data in the context.
mbedtls_sha256_context accumulator
Definition: entropy_alt.h:131
True Random Number Generator (TRNG) driver for Silicon Labs devices.
SHA-384 and SHA-512 cryptographic hash function.
int mbedtls_entropy_func(void *data, unsigned char *output, size_t len)
Retrieve entropy from the accumulator (Maximum length: MBEDTLS_ENTROPY_BLOCK_SIZE) (Thread-safe if MB...
mbedtls_trng_context trng_ctx
Definition: entropy_alt.h:142
int strong
Is the source strong?
Definition: entropy_alt.h:119
SHA-224 and SHA-256 cryptographic hash function.
Entropy source state.
Definition: entropy_alt.h:113