83 size_t out_len =
hash->digestsize;
92 assert ( ( single == 0x00 ) || ( single == 0x01 ) );
101 DBGC (
state,
"HMAC_DRBG_%s %p K = HMAC ( K, V || %#02x || " 102 "provided_data ) :\n",
hash->name,
state, single );
124 size_t out_len =
hash->digestsize;
135 DBGC (
state,
"HMAC_DRBG_%s %p V = HMAC ( K, V ) :\n",
156 const void *
data,
size_t len ) {
208 const void *entropy,
size_t entropy_len,
209 const void *personal,
size_t personal_len ){
210 size_t out_len =
hash->digestsize;
218 assert ( ( personal !=
NULL ) || ( personal_len == 0 ) );
236 personal, personal_len );
257 const void *entropy,
size_t entropy_len,
258 const void *
additional,
size_t additional_len ) {
259 uint8_t seed_material[ entropy_len + additional_len ];
270 memcpy ( seed_material, entropy, entropy_len );
273 DBGC_HDA (
state, 0, seed_material,
sizeof ( seed_material ) );
277 sizeof ( seed_material ) );
280 state->reseed_counter = 1;
308 const void *
additional,
size_t additional_len,
310 size_t out_len =
hash->digestsize;
311 void *orig_data =
data;
312 size_t orig_len =
len;
327 DBGC (
state,
"HMAC_DRBG_%s %p reseed interval exceeded\n",
335 if ( additional_len )
351 if ( frag_len > out_len )
362 state->reseed_counter++;
int hmac_drbg_generate(struct digest_algorithm *hash, struct hmac_drbg_state *state, const void *additional, size_t additional_len, void *data, size_t len)
Generate pseudorandom bits using HMAC_DRBG.
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *key, size_t key_len)
Initialise HMAC.
pseudo_bit_t hash[0x00010]
void hmac_drbg_instantiate(struct digest_algorithm *hash, struct hmac_drbg_state *state, const void *entropy, size_t entropy_len, const void *personal, size_t personal_len)
Instantiate HMAC_DRBG.
void hmac_drbg_reseed(struct digest_algorithm *hash, struct hmac_drbg_state *state, const void *entropy, size_t entropy_len, const void *additional, size_t additional_len)
Reseed HMAC_DRBG.
static void hmac_drbg_update_key(struct digest_algorithm *hash, struct hmac_drbg_state *state, const void *data, size_t len, const uint8_t single)
Update the HMAC_DRBG key.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
uint16_t additional
Additional sense code and qualifier.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
Keyed-Hashing for Message Authentication.
static void hmac_drbg_update_value(struct digest_algorithm *hash, struct hmac_drbg_state *state)
Update the HMAC_DRBG value.
#define HMAC_DRBG_RESEED_INTERVAL
Reseed interval.
static void hmac_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Update HMAC.
static size_t hmac_ctxsize(struct digest_algorithm *digest)
Calculate HMAC context size.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
HMAC_DRBG internal state.
A message digest algorithm.
uint8_t data[48]
Additional event data.
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
static void hmac_drbg_update(struct digest_algorithm *hash, struct hmac_drbg_state *state, const void *data, size_t len)
Update HMAC_DRBG internal state.
#define NULL
NULL pointer (VOID *)
#define ESTALE
Stale file handle.
void * memset(void *dest, int character, size_t len) __nonnull