/// /// @file rng.h /// @brief An AES256 CTR DRBG /// /// Created by Bassham, Lawrence E (Fed) on 8/29/17. /// Copyright © 2017 Bassham, Lawrence E (Fed). All rights reserved. /// /// An AES256 CTR DRBG /// #ifndef rng_h #define rng_h #include #define RNG_SUCCESS 0 #define RNG_BAD_MAXLEN -1 #define RNG_BAD_OUTBUF -2 #define RNG_BAD_REQ_LEN -3 typedef struct { unsigned char buffer[16]; int buffer_pos; unsigned long length_remaining; unsigned char key[32]; unsigned char ctr[16]; } AES_XOF_struct; typedef struct { unsigned char Key[32]; unsigned char V[16]; int reseed_counter; } AES256_CTR_DRBG_struct; void AES256_CTR_DRBG_Update(unsigned char *provided_data, unsigned char *Key, unsigned char *V); int seedexpander_init(AES_XOF_struct *ctx, unsigned char * seed, unsigned char * diversifier, unsigned long maxlen); int seedexpander(AES_XOF_struct *ctx, unsigned char *x, unsigned long xlen); void randombytes_init(unsigned char *entropy_input, unsigned char *personalization_string, int security_strength); int randombytes(unsigned char *x, unsigned long long xlen); void randombytes_init_with_state(AES256_CTR_DRBG_struct *states, unsigned char * entropy_input_48bytes); int randombytes_with_state(AES256_CTR_DRBG_struct *states, unsigned char * x, unsigned long long xlen); #endif /* rng_h */