Lines Matching refs:ctx

29 void evp_md_ctx_clear_digest(EVP_MD_CTX *ctx, int force)  in evp_md_ctx_clear_digest()  argument
31 if (ctx->algctx != NULL) { in evp_md_ctx_clear_digest()
32 if (ctx->digest != NULL && ctx->digest->freectx != NULL) in evp_md_ctx_clear_digest()
33 ctx->digest->freectx(ctx->algctx); in evp_md_ctx_clear_digest()
34 ctx->algctx = NULL; in evp_md_ctx_clear_digest()
35 EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); in evp_md_ctx_clear_digest()
44 if (ctx->digest && ctx->digest->cleanup in evp_md_ctx_clear_digest()
45 && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED)) in evp_md_ctx_clear_digest()
46 ctx->digest->cleanup(ctx); in evp_md_ctx_clear_digest()
47 if (ctx->digest && ctx->digest->ctx_size && ctx->md_data in evp_md_ctx_clear_digest()
48 && (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE) || force)) in evp_md_ctx_clear_digest()
49 OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); in evp_md_ctx_clear_digest()
51 ctx->digest = NULL; in evp_md_ctx_clear_digest()
54 ENGINE_finish(ctx->engine); in evp_md_ctx_clear_digest()
55 ctx->engine = NULL; in evp_md_ctx_clear_digest()
59 EVP_MD_free(ctx->fetched_digest); in evp_md_ctx_clear_digest()
60 ctx->fetched_digest = NULL; in evp_md_ctx_clear_digest()
61 ctx->reqdigest = NULL; in evp_md_ctx_clear_digest()
65 int EVP_MD_CTX_reset(EVP_MD_CTX *ctx) in EVP_MD_CTX_reset() argument
67 if (ctx == NULL) in EVP_MD_CTX_reset()
75 if (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX)) { in EVP_MD_CTX_reset()
76 EVP_PKEY_CTX_free(ctx->pctx); in EVP_MD_CTX_reset()
77 ctx->pctx = NULL; in EVP_MD_CTX_reset()
81 evp_md_ctx_clear_digest(ctx, 0); in EVP_MD_CTX_reset()
82 OPENSSL_cleanse(ctx, sizeof(*ctx)); in EVP_MD_CTX_reset()
91 EVP_MD_CTX *ctx; in evp_md_ctx_new_ex() local
94 if ((ctx = EVP_MD_CTX_new()) == NULL in evp_md_ctx_new_ex()
103 EVP_MD_CTX_set_pkey_ctx(ctx, pctx); in evp_md_ctx_new_ex()
104 return ctx; in evp_md_ctx_new_ex()
108 EVP_MD_CTX_free(ctx); in evp_md_ctx_new_ex()
118 void EVP_MD_CTX_free(EVP_MD_CTX *ctx) in EVP_MD_CTX_free() argument
120 if (ctx == NULL) in EVP_MD_CTX_free()
123 EVP_MD_CTX_reset(ctx); in EVP_MD_CTX_free()
124 OPENSSL_free(ctx); in EVP_MD_CTX_free()
127 static int evp_md_init_internal(EVP_MD_CTX *ctx, const EVP_MD *type, in evp_md_init_internal() argument
135 if (ctx->pctx != NULL in evp_md_init_internal()
136 && EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx->pctx) in evp_md_init_internal()
137 && ctx->pctx->op.sig.algctx != NULL) { in evp_md_init_internal()
144 if (ctx->pctx->operation == EVP_PKEY_OP_SIGNCTX) in evp_md_init_internal()
145 return EVP_DigestSignInit(ctx, NULL, type, impl, NULL); in evp_md_init_internal()
146 if (ctx->pctx->operation == EVP_PKEY_OP_VERIFYCTX) in evp_md_init_internal()
147 return EVP_DigestVerifyInit(ctx, NULL, type, impl, NULL); in evp_md_init_internal()
153 EVP_MD_CTX_clear_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); in evp_md_init_internal()
155 if (ctx->algctx != NULL) { in evp_md_init_internal()
156 if (!ossl_assert(ctx->digest != NULL)) { in evp_md_init_internal()
160 if (ctx->digest->freectx != NULL) in evp_md_init_internal()
161 ctx->digest->freectx(ctx->algctx); in evp_md_init_internal()
162 ctx->algctx = NULL; in evp_md_init_internal()
166 ctx->reqdigest = type; in evp_md_init_internal()
168 if (ctx->digest == NULL) { in evp_md_init_internal()
172 type = ctx->digest; in evp_md_init_internal()
183 if (ctx->engine != NULL in evp_md_init_internal()
184 && ctx->digest != NULL in evp_md_init_internal()
185 && type->type == ctx->digest->type) in evp_md_init_internal()
193 ENGINE_finish(ctx->engine); in evp_md_init_internal()
194 ctx->engine = NULL; in evp_md_init_internal()
206 || ctx->engine != NULL in evp_md_init_internal()
211 || (ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) != 0) { in evp_md_init_internal()
212 if (ctx->digest == ctx->fetched_digest) in evp_md_init_internal()
213 ctx->digest = NULL; in evp_md_init_internal()
214 EVP_MD_free(ctx->fetched_digest); in evp_md_init_internal()
215 ctx->fetched_digest = NULL; in evp_md_init_internal()
219 if (ctx->digest != NULL && ctx->digest->ctx_size > 0) { in evp_md_init_internal()
220 OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); in evp_md_init_internal()
221 ctx->md_data = NULL; in evp_md_init_internal()
239 EVP_MD_free(ctx->fetched_digest); in evp_md_init_internal()
240 ctx->fetched_digest = provmd; in evp_md_init_internal()
244 if (ctx->algctx != NULL && ctx->digest != NULL && ctx->digest != type) { in evp_md_init_internal()
245 if (ctx->digest->freectx != NULL) in evp_md_init_internal()
246 ctx->digest->freectx(ctx->algctx); in evp_md_init_internal()
247 ctx->algctx = NULL; in evp_md_init_internal()
249 if (type->prov != NULL && ctx->fetched_digest != type) { in evp_md_init_internal()
254 EVP_MD_free(ctx->fetched_digest); in evp_md_init_internal()
255 ctx->fetched_digest = (EVP_MD *)type; in evp_md_init_internal()
257 ctx->digest = type; in evp_md_init_internal()
258 if (ctx->algctx == NULL) { in evp_md_init_internal()
259 ctx->algctx = ctx->digest->newctx(ossl_provider_ctx(type->prov)); in evp_md_init_internal()
260 if (ctx->algctx == NULL) { in evp_md_init_internal()
266 if (ctx->digest->dinit == NULL) { in evp_md_init_internal()
271 return ctx->digest->dinit(ctx->algctx, params); in evp_md_init_internal()
302 ctx->engine = impl; in evp_md_init_internal()
304 ctx->engine = NULL; in evp_md_init_internal()
307 if (ctx->digest != type) { in evp_md_init_internal()
308 if (ctx->digest && ctx->digest->ctx_size) { in evp_md_init_internal()
309 OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); in evp_md_init_internal()
310 ctx->md_data = NULL; in evp_md_init_internal()
312 ctx->digest = type; in evp_md_init_internal()
313 if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) { in evp_md_init_internal()
314 ctx->update = type->update; in evp_md_init_internal()
315 ctx->md_data = OPENSSL_zalloc(type->ctx_size); in evp_md_init_internal()
316 if (ctx->md_data == NULL) { in evp_md_init_internal()
326 if (ctx->pctx != NULL in evp_md_init_internal()
327 && (!EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx->pctx) in evp_md_init_internal()
328 || ctx->pctx->op.sig.signature == NULL)) { in evp_md_init_internal()
330 r = EVP_PKEY_CTX_ctrl(ctx->pctx, -1, EVP_PKEY_OP_TYPE_SIG, in evp_md_init_internal()
331 EVP_PKEY_CTRL_DIGESTINIT, 0, ctx); in evp_md_init_internal()
336 if (ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) in evp_md_init_internal()
338 return ctx->digest->init(ctx); in evp_md_init_internal()
341 int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, in EVP_DigestInit_ex2() argument
344 return evp_md_init_internal(ctx, type, params, NULL); in EVP_DigestInit_ex2()
347 int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type) in EVP_DigestInit() argument
349 EVP_MD_CTX_reset(ctx); in EVP_DigestInit()
350 return evp_md_init_internal(ctx, type, NULL, NULL); in EVP_DigestInit()
353 int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) in EVP_DigestInit_ex() argument
355 return evp_md_init_internal(ctx, type, NULL, impl); in EVP_DigestInit_ex()
358 int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *data, size_t count) in EVP_DigestUpdate() argument
363 if (ctx->pctx != NULL in EVP_DigestUpdate()
364 && EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx->pctx) in EVP_DigestUpdate()
365 && ctx->pctx->op.sig.algctx != NULL) { in EVP_DigestUpdate()
374 if (ctx->pctx->operation == EVP_PKEY_OP_SIGNCTX) in EVP_DigestUpdate()
375 return EVP_DigestSignUpdate(ctx, data, count); in EVP_DigestUpdate()
376 if (ctx->pctx->operation == EVP_PKEY_OP_VERIFYCTX) in EVP_DigestUpdate()
377 return EVP_DigestVerifyUpdate(ctx, data, count); in EVP_DigestUpdate()
382 if (ctx->digest == NULL in EVP_DigestUpdate()
383 || ctx->digest->prov == NULL in EVP_DigestUpdate()
384 || (ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) != 0) in EVP_DigestUpdate()
387 if (ctx->digest->dupdate == NULL) { in EVP_DigestUpdate()
391 return ctx->digest->dupdate(ctx->algctx, data, count); in EVP_DigestUpdate()
395 return ctx->update(ctx, data, count); in EVP_DigestUpdate()
399 int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) in EVP_DigestFinal() argument
402 ret = EVP_DigestFinal_ex(ctx, md, size); in EVP_DigestFinal()
403 EVP_MD_CTX_reset(ctx); in EVP_DigestFinal()
408 int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *isize) in EVP_DigestFinal_ex() argument
414 if (ctx->digest == NULL) in EVP_DigestFinal_ex()
417 sz = EVP_MD_get_size(ctx->digest); in EVP_DigestFinal_ex()
421 if (ctx->digest->prov == NULL) in EVP_DigestFinal_ex()
424 if (ctx->digest->dfinal == NULL) { in EVP_DigestFinal_ex()
429 ret = ctx->digest->dfinal(ctx->algctx, md, &size, mdsize); in EVP_DigestFinal_ex()
445 ret = ctx->digest->final(ctx, md); in EVP_DigestFinal_ex()
448 if (ctx->digest->cleanup) { in EVP_DigestFinal_ex()
449 ctx->digest->cleanup(ctx); in EVP_DigestFinal_ex()
450 EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); in EVP_DigestFinal_ex()
452 OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); in EVP_DigestFinal_ex()
456 int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t size) in EVP_DigestFinalXOF() argument
462 if (ctx->digest == NULL) { in EVP_DigestFinalXOF()
467 if (ctx->digest->prov == NULL) in EVP_DigestFinalXOF()
470 if (ctx->digest->dfinal == NULL) { in EVP_DigestFinalXOF()
478 if (EVP_MD_CTX_set_params(ctx, params) > 0) in EVP_DigestFinalXOF()
479 ret = ctx->digest->dfinal(ctx->algctx, md, &size, size); in EVP_DigestFinalXOF()
484 if (ctx->digest->flags & EVP_MD_FLAG_XOF in EVP_DigestFinalXOF()
486 && ctx->digest->md_ctrl(ctx, EVP_MD_CTRL_XOF_LEN, (int)size, NULL)) { in EVP_DigestFinalXOF()
487 ret = ctx->digest->final(ctx, md); in EVP_DigestFinalXOF()
488 if (ctx->digest->cleanup != NULL) { in EVP_DigestFinalXOF()
489 ctx->digest->cleanup(ctx); in EVP_DigestFinalXOF()
490 EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); in EVP_DigestFinalXOF()
492 OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); in EVP_DigestFinalXOF()
621 EVP_MD_CTX *ctx = EVP_MD_CTX_new(); in EVP_Digest() local
624 if (ctx == NULL) in EVP_Digest()
626 EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_ONESHOT); in EVP_Digest()
627 ret = EVP_DigestInit_ex(ctx, type, impl) in EVP_Digest()
628 && EVP_DigestUpdate(ctx, data, count) in EVP_Digest()
629 && EVP_DigestFinal_ex(ctx, md, size); in EVP_Digest()
630 EVP_MD_CTX_free(ctx); in EVP_Digest()
667 int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]) in EVP_MD_CTX_set_params() argument
669 EVP_PKEY_CTX *pctx = ctx->pctx; in EVP_MD_CTX_set_params()
680 if (ctx->digest != NULL && ctx->digest->set_ctx_params != NULL) in EVP_MD_CTX_set_params()
681 return ctx->digest->set_ctx_params(ctx->algctx, params); in EVP_MD_CTX_set_params()
697 const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx) in EVP_MD_CTX_settable_params() argument
702 if (ctx == NULL) in EVP_MD_CTX_settable_params()
706 pctx = ctx->pctx; in EVP_MD_CTX_settable_params()
715 if (ctx->digest != NULL && ctx->digest->settable_ctx_params != NULL) { in EVP_MD_CTX_settable_params()
716 alg = ossl_provider_ctx(EVP_MD_get0_provider(ctx->digest)); in EVP_MD_CTX_settable_params()
717 return ctx->digest->settable_ctx_params(ctx->algctx, alg); in EVP_MD_CTX_settable_params()
723 int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]) in EVP_MD_CTX_get_params() argument
725 EVP_PKEY_CTX *pctx = ctx->pctx; in EVP_MD_CTX_get_params()
736 if (ctx->digest != NULL && ctx->digest->get_params != NULL) in EVP_MD_CTX_get_params()
737 return ctx->digest->get_ctx_params(ctx->algctx, params); in EVP_MD_CTX_get_params()
753 const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx) in EVP_MD_CTX_gettable_params() argument
758 if (ctx == NULL) in EVP_MD_CTX_gettable_params()
762 pctx = ctx->pctx; in EVP_MD_CTX_gettable_params()
771 if (ctx->digest != NULL && ctx->digest->gettable_ctx_params != NULL) { in EVP_MD_CTX_gettable_params()
772 provctx = ossl_provider_ctx(EVP_MD_get0_provider(ctx->digest)); in EVP_MD_CTX_gettable_params()
773 return ctx->digest->gettable_ctx_params(ctx->algctx, provctx); in EVP_MD_CTX_gettable_params()
778 int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2) in EVP_MD_CTX_ctrl() argument
785 if (ctx == NULL) { in EVP_MD_CTX_ctrl()
790 if (ctx->digest != NULL && ctx->digest->prov == NULL) in EVP_MD_CTX_ctrl()
812 ret = EVP_MD_CTX_set_params(ctx, params); in EVP_MD_CTX_ctrl()
814 ret = EVP_MD_CTX_get_params(ctx, params); in EVP_MD_CTX_ctrl()
820 if (ctx->digest->md_ctrl == NULL) { in EVP_MD_CTX_ctrl()
825 ret = ctx->digest->md_ctrl(ctx, cmd, p1, p2); in EVP_MD_CTX_ctrl()
1040 EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, in EVP_MD_fetch() argument
1044 evp_generic_fetch(ctx, OSSL_OP_DIGEST, algorithm, properties, in EVP_MD_fetch()