/** * \file rand_nist.h * \brief NIST DRBG * * SPDX-License-Identifier: MIT */ #ifndef OQS_RAND_NIST_H #define OQS_RAND_NIST_H #include #include typedef struct { unsigned char Key[32]; unsigned char V[16]; int reseed_counter; } OQS_NIST_DRBG_struct; /** * Initializes the NIST DRBG with a given seed and with 256-bit security. * * @param[in] entropy_input The seed; must be exactly 48 bytes * @param[in] personalization_string An optional personalization string; * may be NULL; if not NULL, must be at least 48 bytes long */ void OQS_randombytes_nist_kat_init_256bit(const uint8_t *entropy_input, const uint8_t *personalization_string); /** * Fills the given memory with the requested number of pseudorandom bytes using the NIST DRBG. * * @param[out] random_array Pointer to the memory to fill with (pseudo)random bytes * @param[in] bytes_to_read The number of random bytes to read into memory */ void OQS_randombytes_nist_kat(uint8_t *random_array, size_t bytes_to_read); /** * Writes the current state of the NIST DRBG into the provided memory. */ void OQS_randombytes_nist_kat_get_state(void *out); /** * Overwrites the current state of the NIST DRBG from the provided memory. */ void OQS_randombytes_nist_kat_set_state(const void *in); #endif // OQS_RAND_NIST_H