summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/a_verify.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/a_verify.c')
-rw-r--r--src/lib/libcrypto/asn1/a_verify.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/lib/libcrypto/asn1/a_verify.c b/src/lib/libcrypto/asn1/a_verify.c
index 12b76501e0..8f8e58c095 100644
--- a/src/lib/libcrypto/asn1/a_verify.c
+++ b/src/lib/libcrypto/asn1/a_verify.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: a_verify.c,v 1.22 2015/09/10 15:56:24 jsing Exp $ */ 1/* $OpenBSD: a_verify.c,v 1.23 2017/01/29 17:49:22 beck 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 *
@@ -82,14 +82,13 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
82 int mdnid, pknid; 82 int mdnid, pknid;
83 83
84 if (!pkey) { 84 if (!pkey) {
85 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_PASSED_NULL_PARAMETER); 85 ASN1error(ERR_R_PASSED_NULL_PARAMETER);
86 return -1; 86 return -1;
87 } 87 }
88 88
89 if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) 89 if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7)
90 { 90 {
91 ASN1err(ASN1_F_ASN1_VERIFY, 91 ASN1error(ASN1_R_INVALID_BIT_STRING_BITS_LEFT);
92 ASN1_R_INVALID_BIT_STRING_BITS_LEFT);
93 return -1; 92 return -1;
94 } 93 }
95 94
@@ -97,14 +96,12 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
97 96
98 /* Convert signature OID into digest and public key OIDs */ 97 /* Convert signature OID into digest and public key OIDs */
99 if (!OBJ_find_sigid_algs(OBJ_obj2nid(a->algorithm), &mdnid, &pknid)) { 98 if (!OBJ_find_sigid_algs(OBJ_obj2nid(a->algorithm), &mdnid, &pknid)) {
100 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, 99 ASN1error(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM);
101 ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM);
102 goto err; 100 goto err;
103 } 101 }
104 if (mdnid == NID_undef) { 102 if (mdnid == NID_undef) {
105 if (!pkey->ameth || !pkey->ameth->item_verify) { 103 if (!pkey->ameth || !pkey->ameth->item_verify) {
106 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, 104 ASN1error(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM);
107 ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM);
108 goto err; 105 goto err;
109 } 106 }
110 ret = pkey->ameth->item_verify(&ctx, it, asn, a, 107 ret = pkey->ameth->item_verify(&ctx, it, asn, a,
@@ -120,20 +117,18 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
120 const EVP_MD *type; 117 const EVP_MD *type;
121 type = EVP_get_digestbynid(mdnid); 118 type = EVP_get_digestbynid(mdnid);
122 if (type == NULL) { 119 if (type == NULL) {
123 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, 120 ASN1error(ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM);
124 ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM);
125 goto err; 121 goto err;
126 } 122 }
127 123
128 /* Check public key OID matches public key type */ 124 /* Check public key OID matches public key type */
129 if (EVP_PKEY_type(pknid) != pkey->ameth->pkey_id) { 125 if (EVP_PKEY_type(pknid) != pkey->ameth->pkey_id) {
130 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, 126 ASN1error(ASN1_R_WRONG_PUBLIC_KEY_TYPE);
131 ASN1_R_WRONG_PUBLIC_KEY_TYPE);
132 goto err; 127 goto err;
133 } 128 }
134 129
135 if (!EVP_DigestVerifyInit(&ctx, NULL, type, NULL, pkey)) { 130 if (!EVP_DigestVerifyInit(&ctx, NULL, type, NULL, pkey)) {
136 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); 131 ASN1error(ERR_R_EVP_LIB);
137 ret = 0; 132 ret = 0;
138 goto err; 133 goto err;
139 } 134 }
@@ -143,12 +138,12 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
143 inl = ASN1_item_i2d(asn, &buf_in, it); 138 inl = ASN1_item_i2d(asn, &buf_in, it);
144 139
145 if (buf_in == NULL) { 140 if (buf_in == NULL) {
146 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_MALLOC_FAILURE); 141 ASN1error(ERR_R_MALLOC_FAILURE);
147 goto err; 142 goto err;
148 } 143 }
149 144
150 if (!EVP_DigestVerifyUpdate(&ctx, buf_in, inl)) { 145 if (!EVP_DigestVerifyUpdate(&ctx, buf_in, inl)) {
151 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); 146 ASN1error(ERR_R_EVP_LIB);
152 ret = 0; 147 ret = 0;
153 goto err; 148 goto err;
154 } 149 }
@@ -158,7 +153,7 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
158 153
159 if (EVP_DigestVerifyFinal(&ctx, signature->data, 154 if (EVP_DigestVerifyFinal(&ctx, signature->data,
160 (size_t)signature->length) <= 0) { 155 (size_t)signature->length) <= 0) {
161 ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); 156 ASN1error(ERR_R_EVP_LIB);
162 ret = 0; 157 ret = 0;
163 goto err; 158 goto err;
164 } 159 }