Lines Matching full:hmac
46 * hmac is an object that holds the input/output Key and Value (K and V).
52 * hmac->K = HMAC(hmac->K, hmac->V || inbyte || [in1] || [in2] || [in3])
53 * hmac->V = HMAC(hmac->K, hmac->V)
57 static int do_hmac(PROV_DRBG_HMAC *hmac, unsigned char inbyte, in do_hmac() argument
62 EVP_MAC_CTX *ctx = hmac->ctx; in do_hmac()
64 if (!EVP_MAC_init(ctx, hmac->K, hmac->blocklen, NULL) in do_hmac()
65 /* K = HMAC(K, V || inbyte || [in1] || [in2] || [in3]) */ in do_hmac()
66 || !EVP_MAC_update(ctx, hmac->V, hmac->blocklen) in do_hmac()
71 || !EVP_MAC_final(ctx, hmac->K, NULL, sizeof(hmac->K))) in do_hmac()
74 /* V = HMAC(K, V) */ in do_hmac()
75 return EVP_MAC_init(ctx, hmac->K, hmac->blocklen, NULL) in do_hmac()
76 && EVP_MAC_update(ctx, hmac->V, hmac->blocklen) in do_hmac()
77 && EVP_MAC_final(ctx, hmac->V, NULL, sizeof(hmac->V)); in do_hmac()
85 * K,V = do_hmac(hmac, 0, in1, in2, in3)
87 * K,V = do_hmac(hmac, 1, in1, in2, in3)
99 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data; in drbg_hmac_update() local
101 /* (Steps 1-2) K = HMAC(K, V||0x00||provided_data). V = HMAC(K,V) */ in drbg_hmac_update()
102 if (!do_hmac(hmac, 0x00, in1, in1len, in2, in2len, in3, in3len)) in drbg_hmac_update()
107 /* (Steps 4-5) K = HMAC(K, V||0x01||provided_data). V = HMAC(K,V) */ in drbg_hmac_update()
108 return do_hmac(hmac, 0x01, in1, in1len, in2, in2len, in3, in3len); in drbg_hmac_update()
127 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data; in drbg_hmac_instantiate() local
129 if (hmac->ctx == NULL) { in drbg_hmac_instantiate()
135 memset(hmac->K, 0x00, hmac->blocklen); in drbg_hmac_instantiate()
137 memset(hmac->V, 0x01, hmac->blocklen); in drbg_hmac_instantiate()
198 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data; in drbg_hmac_generate() local
199 EVP_MAC_CTX *ctx = hmac->ctx; in drbg_hmac_generate()
200 const unsigned char *temp = hmac->V; in drbg_hmac_generate()
211 * V = HMAC(K, V) in drbg_hmac_generate()
216 if (!EVP_MAC_init(ctx, hmac->K, hmac->blocklen, NULL) in drbg_hmac_generate()
217 || !EVP_MAC_update(ctx, temp, hmac->blocklen)) in drbg_hmac_generate()
220 if (outlen > hmac->blocklen) { in drbg_hmac_generate()
225 if (!EVP_MAC_final(ctx, hmac->V, NULL, sizeof(hmac->V))) in drbg_hmac_generate()
227 memcpy(out, hmac->V, outlen); in drbg_hmac_generate()
230 out += hmac->blocklen; in drbg_hmac_generate()
231 outlen -= hmac->blocklen; in drbg_hmac_generate()
252 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data; in drbg_hmac_uninstantiate() local
254 OPENSSL_cleanse(hmac->K, sizeof(hmac->K)); in drbg_hmac_uninstantiate()
255 OPENSSL_cleanse(hmac->V, sizeof(hmac->V)); in drbg_hmac_uninstantiate()
267 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data; in drbg_hmac_verify_zeroization() local
269 PROV_DRBG_VERYIFY_ZEROIZATION(hmac->K); in drbg_hmac_verify_zeroization()
270 PROV_DRBG_VERYIFY_ZEROIZATION(hmac->V); in drbg_hmac_verify_zeroization()
276 PROV_DRBG_HMAC *hmac; in drbg_hmac_new() local
278 hmac = OPENSSL_secure_zalloc(sizeof(*hmac)); in drbg_hmac_new()
279 if (hmac == NULL) { in drbg_hmac_new()
284 drbg->data = hmac; in drbg_hmac_new()
308 PROV_DRBG_HMAC *hmac; in drbg_hmac_free() local
310 if (drbg != NULL && (hmac = (PROV_DRBG_HMAC *)drbg->data) != NULL) { in drbg_hmac_free()
311 EVP_MAC_CTX_free(hmac->ctx); in drbg_hmac_free()
312 ossl_prov_digest_reset(&hmac->digest); in drbg_hmac_free()
313 OPENSSL_secure_clear_free(hmac, sizeof(*hmac)); in drbg_hmac_free()
321 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data; in drbg_hmac_get_ctx_params() local
328 if (hmac->ctx == NULL) in drbg_hmac_get_ctx_params()
330 name = EVP_MAC_get0_name(EVP_MAC_CTX_get0_mac(hmac->ctx)); in drbg_hmac_get_ctx_params()
337 md = ossl_prov_digest_md(&hmac->digest); in drbg_hmac_get_ctx_params()
360 PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)ctx->data; in drbg_hmac_set_ctx_params() local
364 if (!ossl_prov_digest_load_from_params(&hmac->digest, params, libctx)) in drbg_hmac_set_ctx_params()
372 md = ossl_prov_digest_md(&hmac->digest); in drbg_hmac_set_ctx_params()
378 if (!ossl_prov_macctx_load_from_params(&hmac->ctx, params, in drbg_hmac_set_ctx_params()
382 if (hmac->ctx != NULL) { in drbg_hmac_set_ctx_params()
384 hmac->blocklen = EVP_MD_get_size(md); in drbg_hmac_set_ctx_params()
386 ctx->strength = 64 * (int)(hmac->blocklen >> 3); in drbg_hmac_set_ctx_params()
389 ctx->seedlen = hmac->blocklen; in drbg_hmac_set_ctx_params()