summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoshua <>2024-01-28 14:43:48 +0000
committerjoshua <>2024-01-28 14:43:48 +0000
commitc33469682cf8c8a1224319946356725ae23ade27 (patch)
tree61ef0416333eef6219afc4ccaefb6f49c9cf217e /src
parent49b41170f3f0edb587f1b7107d440f81b0369b5a (diff)
downloadopenbsd-c33469682cf8c8a1224319946356725ae23ade27.tar.gz
openbsd-c33469682cf8c8a1224319946356725ae23ade27.tar.bz2
openbsd-c33469682cf8c8a1224319946356725ae23ade27.zip
Clean up EVP_MD_CTX_{init,cleanup}() usage in ASN1_item_verify()
ok tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/asn1/asn1_item.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/lib/libcrypto/asn1/asn1_item.c b/src/lib/libcrypto/asn1/asn1_item.c
index 18da77433e..99a08698c8 100644
--- a/src/lib/libcrypto/asn1/asn1_item.c
+++ b/src/lib/libcrypto/asn1/asn1_item.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: asn1_item.c,v 1.19 2024/01/13 13:59:18 joshua Exp $ */ 1/* $OpenBSD: asn1_item.c,v 1.20 2024/01/28 14:43:48 joshua Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -381,7 +381,7 @@ int
381ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, 381ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
382 ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey) 382 ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey)
383{ 383{
384 EVP_MD_CTX ctx; 384 EVP_MD_CTX *md_ctx = NULL;
385 unsigned char *in = NULL; 385 unsigned char *in = NULL;
386 int mdnid, pknid; 386 int mdnid, pknid;
387 int in_len = 0; 387 int in_len = 0;
@@ -389,15 +389,16 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
389 389
390 if (pkey == NULL) { 390 if (pkey == NULL) {
391 ASN1error(ERR_R_PASSED_NULL_PARAMETER); 391 ASN1error(ERR_R_PASSED_NULL_PARAMETER);
392 return -1; 392 goto err;
393 } 393 }
394 394
395 if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) { 395 if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) {
396 ASN1error(ASN1_R_INVALID_BIT_STRING_BITS_LEFT); 396 ASN1error(ASN1_R_INVALID_BIT_STRING_BITS_LEFT);
397 return -1; 397 goto err;
398 } 398 }
399 399
400 EVP_MD_CTX_init(&ctx); 400 if ((md_ctx = EVP_MD_CTX_new()) == NULL)
401 goto err;
401 402
402 /* Convert signature OID into digest and public key OIDs */ 403 /* Convert signature OID into digest and public key OIDs */
403 if (!OBJ_find_sigid_algs(OBJ_obj2nid(a->algorithm), &mdnid, &pknid)) { 404 if (!OBJ_find_sigid_algs(OBJ_obj2nid(a->algorithm), &mdnid, &pknid)) {
@@ -409,7 +410,7 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
409 ASN1error(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM); 410 ASN1error(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM);
410 goto err; 411 goto err;
411 } 412 }
412 ret = pkey->ameth->item_verify(&ctx, it, asn, a, 413 ret = pkey->ameth->item_verify(md_ctx, it, asn, a,
413 signature, pkey); 414 signature, pkey);
414 /* Return value of 2 means carry on, anything else means we 415 /* Return value of 2 means carry on, anything else means we
415 * exit straight away: either a fatal error of the underlying 416 * exit straight away: either a fatal error of the underlying
@@ -432,7 +433,7 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
432 goto err; 433 goto err;
433 } 434 }
434 435
435 if (!EVP_DigestVerifyInit(&ctx, NULL, type, NULL, pkey)) { 436 if (!EVP_DigestVerifyInit(md_ctx, NULL, type, NULL, pkey)) {
436 ASN1error(ERR_R_EVP_LIB); 437 ASN1error(ERR_R_EVP_LIB);
437 ret = 0; 438 ret = 0;
438 goto err; 439 goto err;
@@ -446,7 +447,7 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
446 goto err; 447 goto err;
447 } 448 }
448 449
449 if (EVP_DigestVerify(&ctx, signature->data, signature->length, 450 if (EVP_DigestVerify(md_ctx, signature->data, signature->length,
450 in, in_len) <= 0) { 451 in, in_len) <= 0) {
451 ASN1error(ERR_R_EVP_LIB); 452 ASN1error(ERR_R_EVP_LIB);
452 ret = 0; 453 ret = 0;
@@ -456,7 +457,7 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
456 ret = 1; 457 ret = 1;
457 458
458 err: 459 err:
459 EVP_MD_CTX_cleanup(&ctx); 460 EVP_MD_CTX_free(md_ctx);
460 freezero(in, in_len); 461 freezero(in, in_len);
461 462
462 return ret; 463 return ret;