Lightweight Cryptography Primitives
|
Pseudorandom number generator (PRNG) built around Grain-128. More...
#include <stddef.h>
Go to the source code of this file.
Data Structures | |
union | grain_prng_state_t |
State information for a Grain-128 based PRNG. More... | |
Functions | |
void | grain_prng_add_ident (const unsigned char *data, size_t size) |
Adds unique identification information for this device to the global pool. More... | |
int | grain_prng_init (grain_prng_state_t *state) |
Initializes a Grain-128 based PRNG. More... | |
void | grain_prng_free (grain_prng_state_t *state) |
Frees a Grain-128 based PRNG and destroys all sensitive information. More... | |
int | grain_prng_reseed (grain_prng_state_t *state) |
Forces a Grain-128 based PRNG to re-seed from the system TRNG. More... | |
void | grain_prng_feed (grain_prng_state_t *state, const unsigned char *data, size_t size) |
Feeds data into a Grain-128 based PRNG state to seed it from other sources besides the system TRNG. More... | |
int | grain_prng_fetch (grain_prng_state_t *state, unsigned char *data, size_t size) |
Fetches data from a Grain-128 based PRNG state. More... | |
int | grain_prng_generate (unsigned char *data, size_t size) |
Fetches random data using a Grain-128 based PRNG. More... | |
Pseudorandom number generator (PRNG) built around Grain-128.
void grain_prng_add_ident | ( | const unsigned char * | data, |
size_t | size | ||
) |
Adds unique identification information for this device to the global pool.
data | Points to the identification information. |
size | Number of bytes of identification information. |
The application should use this function at startup to add serial numbers and other unique identification information to the global pool for the PRNG. This data does not need to be secret but can help make the generated output unique for each device.
void grain_prng_feed | ( | grain_prng_state_t * | state, |
const unsigned char * | data, | ||
size_t | size | ||
) |
Feeds data into a Grain-128 based PRNG state to seed it from other sources besides the system TRNG.
state | PRNG state to be feed new seed data. |
data | Points to the data to be fed into the PRNG state. |
size | Number of bytes of data to be fed into the PRNG state. |
int grain_prng_fetch | ( | grain_prng_state_t * | state, |
unsigned char * | data, | ||
size_t | size | ||
) |
Fetches data from a Grain-128 based PRNG state.
state | PRNG state to fetch data from. |
data | Points to a buffer to receive the generated random data. |
size | Number of bytes of random data to be generated. |
void grain_prng_free | ( | grain_prng_state_t * | state | ) |
Frees a Grain-128 based PRNG and destroys all sensitive information.
state | PRNG state to be freed. |
int grain_prng_generate | ( | unsigned char * | data, |
size_t | size | ||
) |
Fetches random data using a Grain-128 based PRNG.
data | Points to a buffer to receive the generated random data. |
size | Number of bytes of random data to be generated. |
This function will create a temporary PRNG state object, seed it from the system TRNG, and then generate size bytes of random data. It is intended for quick one-off generation of random material.
int grain_prng_init | ( | grain_prng_state_t * | state | ) |
Initializes a Grain-128 based PRNG.
state | PRNG state to be initialized. |
This function will fetch fresh data from the system TRNG to prepare the PRNG state to generate random data.
int grain_prng_reseed | ( | grain_prng_state_t * | state | ) |
Forces a Grain-128 based PRNG to re-seed from the system TRNG.
state | PRNG state to be re-seeded. |