summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs7/pk7_doit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs7/pk7_doit.c')
-rw-r--r--src/lib/libcrypto/pkcs7/pk7_doit.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/lib/libcrypto/pkcs7/pk7_doit.c b/src/lib/libcrypto/pkcs7/pk7_doit.c
index d0c27e98a9..81a72f6815 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.43 2019/03/13 20:34:00 tb Exp $ */ 1/* $OpenBSD: pk7_doit.c,v 1.44 2019/10/04 18:03:55 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 *
@@ -191,7 +191,7 @@ err:
191 191
192static int 192static int
193pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen, PKCS7_RECIP_INFO *ri, 193pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen, PKCS7_RECIP_INFO *ri,
194 EVP_PKEY *pkey) 194 EVP_PKEY *pkey, size_t fixlen)
195{ 195{
196 EVP_PKEY_CTX *pctx = NULL; 196 EVP_PKEY_CTX *pctx = NULL;
197 unsigned char *ek = NULL; 197 unsigned char *ek = NULL;
@@ -222,8 +222,9 @@ pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen, PKCS7_RECIP_INFO *ri,
222 goto err; 222 goto err;
223 } 223 }
224 224
225 if (EVP_PKEY_decrypt(pctx, ek, &eklen, 225 if (EVP_PKEY_decrypt(pctx, ek, &eklen, ri->enc_key->data,
226 ri->enc_key->data, ri->enc_key->length) <= 0) { 226 ri->enc_key->length) <= 0 || eklen == 0 ||
227 (fixlen != 0 && eklen != fixlen)) {
227 ret = 0; 228 ret = 0;
228 PKCS7error(ERR_R_EVP_LIB); 229 PKCS7error(ERR_R_EVP_LIB);
229 goto err; 230 goto err;
@@ -535,14 +536,14 @@ PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
535 for (i = 0; i < sk_PKCS7_RECIP_INFO_num(rsk); i++) { 536 for (i = 0; i < sk_PKCS7_RECIP_INFO_num(rsk); i++) {
536 ri = sk_PKCS7_RECIP_INFO_value(rsk, i); 537 ri = sk_PKCS7_RECIP_INFO_value(rsk, i);
537 538
538 if (pkcs7_decrypt_rinfo(&ek, &eklen, 539 if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey,
539 ri, pkey) < 0) 540 EVP_CIPHER_key_length(evp_cipher)) < 0)
540 goto err; 541 goto err;
541 ERR_clear_error(); 542 ERR_clear_error();
542 } 543 }
543 } else { 544 } else {
544 /* Only exit on fatal errors, not decrypt failure */ 545 /* Only exit on fatal errors, not decrypt failure */
545 if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey) < 0) 546 if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey, 0) < 0)
546 goto err; 547 goto err;
547 ERR_clear_error(); 548 ERR_clear_error();
548 } 549 }