Latest update.
This commit is contained in:
+44
-4
@@ -137,7 +137,8 @@ static int pkcs7_encode_rinfo(PKCS7_RECIP_INFO *ri,
|
||||
}
|
||||
|
||||
static int pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen,
|
||||
PKCS7_RECIP_INFO *ri, EVP_PKEY *pkey)
|
||||
PKCS7_RECIP_INFO *ri, EVP_PKEY *pkey,
|
||||
size_t fixlen)
|
||||
{
|
||||
EVP_PKEY_CTX *pctx = NULL;
|
||||
unsigned char *ek = NULL;
|
||||
@@ -170,7 +171,9 @@ static int pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen,
|
||||
}
|
||||
|
||||
if (EVP_PKEY_decrypt(pctx, ek, &eklen,
|
||||
ri->enc_key->data, ri->enc_key->length) <= 0) {
|
||||
ri->enc_key->data, ri->enc_key->length) <= 0
|
||||
|| eklen == 0
|
||||
|| (fixlen != 0 && eklen != fixlen)) {
|
||||
ret = 0;
|
||||
PKCS7err(PKCS7_F_PKCS7_DECRYPT_RINFO, ERR_R_EVP_LIB);
|
||||
goto err;
|
||||
@@ -499,13 +502,14 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
|
||||
for (i = 0; i < sk_PKCS7_RECIP_INFO_num(rsk); i++) {
|
||||
ri = sk_PKCS7_RECIP_INFO_value(rsk, i);
|
||||
|
||||
if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey) < 0)
|
||||
if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey,
|
||||
EVP_CIPHER_key_length(evp_cipher)) < 0)
|
||||
goto err;
|
||||
ERR_clear_error();
|
||||
}
|
||||
} else {
|
||||
/* Only exit on fatal errors, not decrypt failure */
|
||||
if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey) < 0)
|
||||
if (pkcs7_decrypt_rinfo(&ek, &eklen, ri, pkey, 0) < 0)
|
||||
goto err;
|
||||
ERR_clear_error();
|
||||
}
|
||||
@@ -834,11 +838,29 @@ int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si)
|
||||
if (EVP_DigestSignInit(mctx, &pctx, md, NULL, si->pkey) <= 0)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* TODO(3.0): This causes problems when providers are in use, so disabled
|
||||
* for now. Can we get rid of this completely? AFAICT this ctrl has never
|
||||
* been used since it was first put in. All internal implementations just
|
||||
* return 1 and ignore this ctrl and have always done so by the looks of
|
||||
* things. To fix this we could convert this ctrl into a param, which would
|
||||
* require us to send all the signer info data as a set of params...but that
|
||||
* is non-trivial and since this isn't used by anything it may be better
|
||||
* just to remove it. The original commit that added it had this
|
||||
* justification in CHANGES:
|
||||
*
|
||||
* "During PKCS7 signing pass the PKCS7 SignerInfo structure to the
|
||||
* EVP_PKEY_METHOD before and after signing via the
|
||||
* EVP_PKEY_CTRL_PKCS7_SIGN ctrl. It can then customise the structure
|
||||
* before and/or after signing if necessary."
|
||||
*/
|
||||
#if 0
|
||||
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
|
||||
EVP_PKEY_CTRL_PKCS7_SIGN, 0, si) <= 0) {
|
||||
PKCS7err(PKCS7_F_PKCS7_SIGNER_INFO_SIGN, PKCS7_R_CTRL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
|
||||
alen = ASN1_item_i2d((ASN1_VALUE *)si->auth_attr, &abuf,
|
||||
ASN1_ITEM_rptr(PKCS7_ATTR_SIGN));
|
||||
@@ -856,11 +878,29 @@ int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si)
|
||||
if (EVP_DigestSignFinal(mctx, abuf, &siglen) <= 0)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* TODO(3.0): This causes problems when providers are in use, so disabled
|
||||
* for now. Can we get rid of this completely? AFAICT this ctrl has never
|
||||
* been used since it was first put in. All internal implementations just
|
||||
* return 1 and ignore this ctrl and have always done so by the looks of
|
||||
* things. To fix this we could convert this ctrl into a param, which would
|
||||
* require us to send all the signer info data as a set of params...but that
|
||||
* is non-trivial and since this isn't used by anything it may be better
|
||||
* just to remove it. The original commit that added it had this
|
||||
* justification in CHANGES:
|
||||
*
|
||||
* "During PKCS7 signing pass the PKCS7 SignerInfo structure to the
|
||||
* EVP_PKEY_METHOD before and after signing via the
|
||||
* EVP_PKEY_CTRL_PKCS7_SIGN ctrl. It can then customise the structure
|
||||
* before and/or after signing if necessary."
|
||||
*/
|
||||
#if 0
|
||||
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
|
||||
EVP_PKEY_CTRL_PKCS7_SIGN, 1, si) <= 0) {
|
||||
PKCS7err(PKCS7_F_PKCS7_SIGNER_INFO_SIGN, PKCS7_R_CTRL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
|
||||
EVP_MD_CTX_free(mctx);
|
||||
|
||||
|
||||
+2
-61
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Generated by util/mkerr.pl DO NOT EDIT
|
||||
* Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -13,63 +13,6 @@
|
||||
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
static const ERR_STRING_DATA PKCS7_str_functs[] = {
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_DO_PKCS7_SIGNED_ATTRIB, 0),
|
||||
"do_pkcs7_signed_attrib"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME, 0),
|
||||
"PKCS7_add0_attrib_signing_time"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP, 0),
|
||||
"PKCS7_add_attrib_smimecap"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_CERTIFICATE, 0),
|
||||
"PKCS7_add_certificate"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_CRL, 0), "PKCS7_add_crl"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_RECIPIENT_INFO, 0),
|
||||
"PKCS7_add_recipient_info"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_SIGNATURE, 0),
|
||||
"PKCS7_add_signature"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_SIGNER, 0), "PKCS7_add_signer"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_BIO_ADD_DIGEST, 0),
|
||||
"PKCS7_bio_add_digest"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_COPY_EXISTING_DIGEST, 0),
|
||||
"pkcs7_copy_existing_digest"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_CTRL, 0), "PKCS7_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATADECODE, 0), "PKCS7_dataDecode"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATAFINAL, 0), "PKCS7_dataFinal"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATAINIT, 0), "PKCS7_dataInit"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATAVERIFY, 0), "PKCS7_dataVerify"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DECRYPT, 0), "PKCS7_decrypt"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DECRYPT_RINFO, 0),
|
||||
"pkcs7_decrypt_rinfo"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ENCODE_RINFO, 0),
|
||||
"pkcs7_encode_rinfo"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ENCRYPT, 0), "PKCS7_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_FINAL, 0), "PKCS7_final"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_FIND_DIGEST, 0),
|
||||
"PKCS7_find_digest"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_GET0_SIGNERS, 0),
|
||||
"PKCS7_get0_signers"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_RECIP_INFO_SET, 0),
|
||||
"PKCS7_RECIP_INFO_set"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_CIPHER, 0), "PKCS7_set_cipher"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_CONTENT, 0),
|
||||
"PKCS7_set_content"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_DIGEST, 0), "PKCS7_set_digest"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_TYPE, 0), "PKCS7_set_type"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGN, 0), "PKCS7_sign"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGNATUREVERIFY, 0),
|
||||
"PKCS7_signatureVerify"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGNER_INFO_SET, 0),
|
||||
"PKCS7_SIGNER_INFO_set"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGNER_INFO_SIGN, 0),
|
||||
"PKCS7_SIGNER_INFO_sign"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGN_ADD_SIGNER, 0),
|
||||
"PKCS7_sign_add_signer"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIMPLE_SMIMECAP, 0),
|
||||
"PKCS7_simple_smimecap"},
|
||||
{ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_VERIFY, 0), "PKCS7_verify"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const ERR_STRING_DATA PKCS7_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_CERTIFICATE_VERIFY_ERROR),
|
||||
"certificate verify error"},
|
||||
@@ -147,10 +90,8 @@ static const ERR_STRING_DATA PKCS7_str_reasons[] = {
|
||||
int ERR_load_PKCS7_strings(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
if (ERR_func_error_string(PKCS7_str_functs[0].error) == NULL) {
|
||||
ERR_load_strings_const(PKCS7_str_functs);
|
||||
if (ERR_reason_error_string(PKCS7_str_reasons[0].error) == NULL)
|
||||
ERR_load_strings_const(PKCS7_str_reasons);
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user