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);
103
}
iqr_RNGCallbacks
;
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
143
iqr_retval
iqr_RNGDestroy
(
iqr_RNG
**rng);
144
145
// ---------------------------------------------------------------------------------------------------------------------------------
146
// HMAC DRBG Random Number Generator.
147
// ---------------------------------------------------------------------------------------------------------------------------------
148
165
IQR_API
166
iqr_retval
iqr_RNGCreateHMACDRBG
(
const
iqr_Context
*ctx,
iqr_HashAlgorithmType
hash_algo,
iqr_RNG
**rng);
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 */
iqr_RNGCallbacks
Definition:
iqr_rng.h:55
iqr_hash.h
iqr_RNGDestroy
IQR_API_UNENFORCED_RETURN iqr_retval iqr_RNGDestroy(iqr_RNG **rng)
iqr_context.h
iqr_RNGCreateHMACDRBG
IQR_API iqr_retval iqr_RNGCreateHMACDRBG(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_RNG **rng)
iqr_HashAlgorithmType
iqr_HashAlgorithmType
Definition:
iqr_hash.h:50
iqr_retval.h
iqr_RNGCreateSHAKE
IQR_API iqr_retval iqr_RNGCreateSHAKE(const iqr_Context *ctx, size_t shake_size, iqr_RNG **rng)
iqr_RNG
struct iqr_RNG_struct iqr_RNG
Definition:
iqr_rng.h:48
iqr_api.h
iqr_RNGCreate
IQR_API iqr_retval iqr_RNGCreate(const iqr_Context *ctx, const iqr_RNGCallbacks *cb, iqr_RNG **rng)
iqr_Context
struct iqr_Context_struct iqr_Context
Definition:
iqr_context.h:33
iqr_RNGGetBytes
IQR_API iqr_retval iqr_RNGGetBytes(const iqr_RNG *rng, uint8_t *buffer, size_t num_bytes)
iqr_RNGInitialize
IQR_API iqr_retval iqr_RNGInitialize(iqr_RNG *rng, const uint8_t *buffer, size_t length)
iqr_RNGReseed
IQR_API iqr_retval iqr_RNGReseed(const iqr_RNG *rng, const uint8_t *buffer, size_t length)
iqr_retval
iqr_retval
Definition:
iqr_retval.h:26
include
iqr_rng.h
Generated on Tue Dec 20 2016 14:52:22 for ISARA Quantum Resistant Toolkit by
1.8.12