84 size_t out_len =
hash->digestsize;
93 assert ( ( single == 0x00 ) || ( single == 0x01 ) );
102 DBGC (
state,
"HMAC_DRBG_%s %p K = HMAC ( K, V || %#02x || " 103 "provided_data ) :\n",
hash->name,
state, single );
125 size_t out_len =
hash->digestsize;
136 DBGC (
state,
"HMAC_DRBG_%s %p V = HMAC ( K, V ) :\n",
157 const void *
data,
size_t len ) {
209 const void *entropy,
size_t entropy_len,
210 const void *personal,
size_t personal_len ){
211 size_t out_len =
hash->digestsize;
219 assert ( ( personal !=
NULL ) || ( personal_len == 0 ) );
237 personal, personal_len );
258 const void *entropy,
size_t entropy_len,
259 const void *
additional,
size_t additional_len ) {
260 uint8_t seed_material[ entropy_len + additional_len ];
271 memcpy ( seed_material, entropy, entropy_len );
274 DBGC_HDA (
state, 0, seed_material,
sizeof ( seed_material ) );
278 sizeof ( seed_material ) );
281 state->reseed_counter = 1;
309 const void *
additional,
size_t additional_len,
311 size_t out_len =
hash->digestsize;
312 void *orig_data =
data;
313 size_t orig_len =
len;
328 DBGC (
state,
"HMAC_DRBG_%s %p reseed interval exceeded\n",
336 if ( additional_len )
352 if ( frag_len > out_len )
363 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