diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/pkcs12/p12_add.c | 26 | ||||
-rw-r--r-- | src/lib/libcrypto/pkcs12/p12_mutl.c | 10 | ||||
-rw-r--r-- | src/lib/libcrypto/pkcs12/pkcs12_local.h | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/pkcs7/pk7_doit.c | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/pkcs7/pk7_mime.c | 7 |
5 files changed, 37 insertions, 15 deletions
diff --git a/src/lib/libcrypto/pkcs12/p12_add.c b/src/lib/libcrypto/pkcs12/p12_add.c index 93c7c7221e..8ce1fede74 100644 --- a/src/lib/libcrypto/pkcs12/p12_add.c +++ b/src/lib/libcrypto/pkcs12/p12_add.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p12_add.c,v 1.22 2023/02/16 08:38:17 tb Exp $ */ | 1 | /* $OpenBSD: p12_add.c,v 1.23 2024/01/25 13:44:08 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -124,11 +124,15 @@ LCRYPTO_ALIAS(PKCS12_pack_p7data); | |||
124 | STACK_OF(PKCS12_SAFEBAG) * | 124 | STACK_OF(PKCS12_SAFEBAG) * |
125 | PKCS12_unpack_p7data(PKCS7 *p7) | 125 | PKCS12_unpack_p7data(PKCS7 *p7) |
126 | { | 126 | { |
127 | ASN1_OCTET_STRING *aos; | ||
128 | |||
127 | if (!PKCS7_type_is_data(p7)) { | 129 | if (!PKCS7_type_is_data(p7)) { |
128 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); | 130 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); |
129 | return NULL; | 131 | return NULL; |
130 | } | 132 | } |
131 | return ASN1_item_unpack(p7->d.data, &PKCS12_SAFEBAGS_it); | 133 | if ((aos = PKCS7_get_octet_string(p7)) == NULL) |
134 | return NULL; | ||
135 | return ASN1_item_unpack(aos, &PKCS12_SAFEBAGS_it); | ||
132 | } | 136 | } |
133 | LCRYPTO_ALIAS(PKCS12_unpack_p7data); | 137 | LCRYPTO_ALIAS(PKCS12_unpack_p7data); |
134 | 138 | ||
@@ -182,11 +186,16 @@ LCRYPTO_ALIAS(PKCS12_pack_p7encdata); | |||
182 | STACK_OF(PKCS12_SAFEBAG) * | 186 | STACK_OF(PKCS12_SAFEBAG) * |
183 | PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen) | 187 | PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen) |
184 | { | 188 | { |
189 | PKCS7_ENC_CONTENT *content; | ||
190 | |||
185 | if (!PKCS7_type_is_encrypted(p7)) | 191 | if (!PKCS7_type_is_encrypted(p7)) |
186 | return NULL; | 192 | return NULL; |
187 | return PKCS12_item_decrypt_d2i(p7->d.encrypted->enc_data->algorithm, | 193 | if (p7->d.encrypted == NULL) |
188 | &PKCS12_SAFEBAGS_it, pass, passlen, | 194 | return NULL; |
189 | p7->d.encrypted->enc_data->enc_data, 1); | 195 | if ((content = p7->d.encrypted->enc_data) == NULL) |
196 | return NULL; | ||
197 | return PKCS12_item_decrypt_d2i(content->algorithm, &PKCS12_SAFEBAGS_it, | ||
198 | pass, passlen, content->enc_data, 1); | ||
190 | } | 199 | } |
191 | LCRYPTO_ALIAS(PKCS12_unpack_p7encdata); | 200 | LCRYPTO_ALIAS(PKCS12_unpack_p7encdata); |
192 | 201 | ||
@@ -210,11 +219,14 @@ LCRYPTO_ALIAS(PKCS12_pack_authsafes); | |||
210 | STACK_OF(PKCS7) * | 219 | STACK_OF(PKCS7) * |
211 | PKCS12_unpack_authsafes(const PKCS12 *p12) | 220 | PKCS12_unpack_authsafes(const PKCS12 *p12) |
212 | { | 221 | { |
222 | ASN1_OCTET_STRING *aos; | ||
223 | |||
213 | if (!PKCS7_type_is_data(p12->authsafes)) { | 224 | if (!PKCS7_type_is_data(p12->authsafes)) { |
214 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); | 225 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); |
215 | return NULL; | 226 | return NULL; |
216 | } | 227 | } |
217 | return ASN1_item_unpack(p12->authsafes->d.data, | 228 | if ((aos = PKCS7_get_octet_string(p12->authsafes)) == NULL) |
218 | &PKCS12_AUTHSAFES_it); | 229 | return NULL; |
230 | return ASN1_item_unpack(aos, &PKCS12_AUTHSAFES_it); | ||
219 | } | 231 | } |
220 | LCRYPTO_ALIAS(PKCS12_unpack_authsafes); | 232 | LCRYPTO_ALIAS(PKCS12_unpack_authsafes); |
diff --git a/src/lib/libcrypto/pkcs12/p12_mutl.c b/src/lib/libcrypto/pkcs12/p12_mutl.c index f0e6df9eb6..c71ed735ea 100644 --- a/src/lib/libcrypto/pkcs12/p12_mutl.c +++ b/src/lib/libcrypto/pkcs12/p12_mutl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p12_mutl.c,v 1.35 2023/02/16 08:38:17 tb Exp $ */ | 1 | /* $OpenBSD: p12_mutl.c,v 1.36 2024/01/25 13:44:08 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -115,6 +115,7 @@ PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
115 | { | 115 | { |
116 | const EVP_MD *md_type; | 116 | const EVP_MD *md_type; |
117 | HMAC_CTX *hmac = NULL; | 117 | HMAC_CTX *hmac = NULL; |
118 | ASN1_OCTET_STRING *aos; | ||
118 | unsigned char key[EVP_MAX_MD_SIZE], *salt; | 119 | unsigned char key[EVP_MAX_MD_SIZE], *salt; |
119 | int saltlen, iter; | 120 | int saltlen, iter; |
120 | int md_size; | 121 | int md_size; |
@@ -124,6 +125,10 @@ PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
124 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); | 125 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); |
125 | goto err; | 126 | goto err; |
126 | } | 127 | } |
128 | if ((aos = PKCS7_get_octet_string(p12->authsafes)) == NULL) { | ||
129 | PKCS12error(PKCS12_R_DECODE_ERROR); | ||
130 | goto err; | ||
131 | } | ||
127 | 132 | ||
128 | salt = p12->mac->salt->data; | 133 | salt = p12->mac->salt->data; |
129 | saltlen = p12->mac->salt->length; | 134 | saltlen = p12->mac->salt->length; |
@@ -155,8 +160,7 @@ PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
155 | goto err; | 160 | goto err; |
156 | if (!HMAC_Init_ex(hmac, key, md_size, md_type, NULL)) | 161 | if (!HMAC_Init_ex(hmac, key, md_size, md_type, NULL)) |
157 | goto err; | 162 | goto err; |
158 | if (!HMAC_Update(hmac, p12->authsafes->d.data->data, | 163 | if (!HMAC_Update(hmac, aos->data, aos->length)) |
159 | p12->authsafes->d.data->length)) | ||
160 | goto err; | 164 | goto err; |
161 | if (!HMAC_Final(hmac, mac, maclen)) | 165 | if (!HMAC_Final(hmac, mac, maclen)) |
162 | goto err; | 166 | goto err; |
diff --git a/src/lib/libcrypto/pkcs12/pkcs12_local.h b/src/lib/libcrypto/pkcs12/pkcs12_local.h index 1d6f0558ed..8d82d2f462 100644 --- a/src/lib/libcrypto/pkcs12/pkcs12_local.h +++ b/src/lib/libcrypto/pkcs12/pkcs12_local.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pkcs12_local.h,v 1.3 2022/11/26 17:23:18 tb Exp $ */ | 1 | /* $OpenBSD: pkcs12_local.h,v 1.4 2024/01/25 13:44:08 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -96,6 +96,9 @@ struct pkcs12_bag_st { | |||
96 | } value; | 96 | } value; |
97 | }; | 97 | }; |
98 | 98 | ||
99 | /* XXX - should go into pkcs7_local.h. */ | ||
100 | ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); | ||
101 | |||
99 | __END_HIDDEN_DECLS | 102 | __END_HIDDEN_DECLS |
100 | 103 | ||
101 | #endif /* !HEADER_PKCS12_LOCAL_H */ | 104 | #endif /* !HEADER_PKCS12_LOCAL_H */ |
diff --git a/src/lib/libcrypto/pkcs7/pk7_doit.c b/src/lib/libcrypto/pkcs7/pk7_doit.c index 759d9dd5a5..ce0e99eec1 100644 --- a/src/lib/libcrypto/pkcs7/pk7_doit.c +++ b/src/lib/libcrypto/pkcs7/pk7_doit.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pk7_doit.c,v 1.54 2023/11/15 00:55:43 tb Exp $ */ | 1 | /* $OpenBSD: pk7_doit.c,v 1.55 2024/01/25 13:44:08 tb 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 | * |
@@ -92,7 +92,7 @@ PKCS7_type_is_other(PKCS7* p7) | |||
92 | 92 | ||
93 | } | 93 | } |
94 | 94 | ||
95 | static ASN1_OCTET_STRING * | 95 | ASN1_OCTET_STRING * |
96 | PKCS7_get_octet_string(PKCS7 *p7) | 96 | PKCS7_get_octet_string(PKCS7 *p7) |
97 | { | 97 | { |
98 | if (PKCS7_type_is_data(p7)) | 98 | if (PKCS7_type_is_data(p7)) |
diff --git a/src/lib/libcrypto/pkcs7/pk7_mime.c b/src/lib/libcrypto/pkcs7/pk7_mime.c index f00e18c7ef..381335589f 100644 --- a/src/lib/libcrypto/pkcs7/pk7_mime.c +++ b/src/lib/libcrypto/pkcs7/pk7_mime.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pk7_mime.c,v 1.19 2023/05/02 09:56:12 tb Exp $ */ | 1 | /* $OpenBSD: pk7_mime.c,v 1.20 2024/01/25 13:44:08 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project. | 3 | * project. |
4 | */ | 4 | */ |
@@ -89,8 +89,11 @@ SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags) | |||
89 | STACK_OF(X509_ALGOR) *mdalgs = NULL; | 89 | STACK_OF(X509_ALGOR) *mdalgs = NULL; |
90 | int ctype_nid; | 90 | int ctype_nid; |
91 | 91 | ||
92 | if ((ctype_nid = OBJ_obj2nid(p7->type)) == NID_pkcs7_signed) | 92 | if ((ctype_nid = OBJ_obj2nid(p7->type)) == NID_pkcs7_signed) { |
93 | if (p7->d.sign == NULL) | ||
94 | return 0; | ||
93 | mdalgs = p7->d.sign->md_algs; | 95 | mdalgs = p7->d.sign->md_algs; |
96 | } | ||
94 | 97 | ||
95 | flags ^= SMIME_OLDMIME; | 98 | flags ^= SMIME_OLDMIME; |
96 | 99 | ||