ISARA Quantum Resistant Toolkit  Version 1.1
Quantum resistant cryptographic primitives and algorithms.
iqr_rng.h
Go to the documentation of this file.
1 
19 #ifndef IQR_RNG_H
20 #define IQR_RNG_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include <stddef.h>
27 #include <stdint.h>
28 
29 #include "iqr_api.h"
30 #include "iqr_context.h"
31 #include "iqr_hash.h"
32 #include "iqr_retval.h"
33 
34 // ---------------------------------------------------------------------------------------------------------------------------------
35 // Constants.
36 // ---------------------------------------------------------------------------------------------------------------------------------
37 
40 #define IQR_SHAKE_128_SIZE 16
41 #define IQR_SHAKE_256_SIZE 32
42 
43 // ---------------------------------------------------------------------------------------------------------------------------------
44 // Opaque data type.
45 // ---------------------------------------------------------------------------------------------------------------------------------
46 
48 typedef struct iqr_RNG_struct iqr_RNG;
49 
50 // ---------------------------------------------------------------------------------------------------------------------------------
51 // Data structure.
52 // ---------------------------------------------------------------------------------------------------------------------------------
53 
55 typedef struct {
66  iqr_retval (*initialize)(void **state, const uint8_t *seed, size_t seed_size);
67 
79  iqr_retval (*reseed)(void *state, const uint8_t *entropy, size_t entropy_size);
80 
91  iqr_retval (*getbytes)(void *state, uint8_t *buffer, size_t buffer_size);
92 
102  iqr_retval (*cleanup)(void **state);
104 
105 // ---------------------------------------------------------------------------------------------------------------------------------
106 // Global function registration.
107 // ---------------------------------------------------------------------------------------------------------------------------------
108 
109 // ---------------------------------------------------------------------------------------------------------------------------------
110 // Random Number Generator initialization and validation.
111 // ---------------------------------------------------------------------------------------------------------------------------------
112 
127 IQR_API
128 iqr_retval iqr_RNGCreate(const iqr_Context *ctx, const iqr_RNGCallbacks *cb, iqr_RNG **rng);
129 
142 IQR_API_UNENFORCED_RETURN
144 
145 // ---------------------------------------------------------------------------------------------------------------------------------
146 // HMAC DRBG Random Number Generator.
147 // ---------------------------------------------------------------------------------------------------------------------------------
148 
165 IQR_API
167 
168 // ---------------------------------------------------------------------------------------------------------------------------------
169 // SHAKE Random Number Generator.
170 // ---------------------------------------------------------------------------------------------------------------------------------
171 
185 IQR_API
186 iqr_retval iqr_RNGCreateSHAKE(const iqr_Context *ctx, size_t shake_size, iqr_RNG **rng);
187 
188 // ---------------------------------------------------------------------------------------------------------------------------------
189 // Random Number Generator usage.
190 // ---------------------------------------------------------------------------------------------------------------------------------
191 
209 IQR_API
210 iqr_retval iqr_RNGInitialize(iqr_RNG *rng, const uint8_t *buffer, size_t length);
211 
228 IQR_API
229 iqr_retval iqr_RNGReseed(const iqr_RNG *rng, const uint8_t *buffer, size_t length);
230 
246 IQR_API
247 iqr_retval iqr_RNGGetBytes(const iqr_RNG *rng, uint8_t *buffer, size_t num_bytes);
248 
249 #ifdef __cplusplus
250 }
251 #endif
252 
253 #endif /* IQR_RNG_H */
Definition: iqr_rng.h:55
IQR_API_UNENFORCED_RETURN iqr_retval iqr_RNGDestroy(iqr_RNG **rng)
IQR_API iqr_retval iqr_RNGCreateHMACDRBG(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_RNG **rng)
iqr_HashAlgorithmType
Definition: iqr_hash.h:50
IQR_API iqr_retval iqr_RNGCreateSHAKE(const iqr_Context *ctx, size_t shake_size, iqr_RNG **rng)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:48
IQR_API iqr_retval iqr_RNGCreate(const iqr_Context *ctx, const iqr_RNGCallbacks *cb, iqr_RNG **rng)
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:33
IQR_API iqr_retval iqr_RNGGetBytes(const iqr_RNG *rng, uint8_t *buffer, size_t num_bytes)
IQR_API iqr_retval iqr_RNGInitialize(iqr_RNG *rng, const uint8_t *buffer, size_t length)
IQR_API iqr_retval iqr_RNGReseed(const iqr_RNG *rng, const uint8_t *buffer, size_t length)
iqr_retval
Definition: iqr_retval.h:26