Latest update.
This commit is contained in:
+17
-1
@@ -363,6 +363,7 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
|
||||
unsigned char *ek = NULL;
|
||||
size_t eklen;
|
||||
int ret = 0;
|
||||
size_t fixlen = 0;
|
||||
CMS_EncryptedContentInfo *ec;
|
||||
ec = cms->d.envelopedData->encryptedContentInfo;
|
||||
|
||||
@@ -371,6 +372,19 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (cms->d.envelopedData->encryptedContentInfo->havenocert
|
||||
&& !cms->d.envelopedData->encryptedContentInfo->debug) {
|
||||
X509_ALGOR *calg = ec->contentEncryptionAlgorithm;
|
||||
const EVP_CIPHER *ciph = EVP_get_cipherbyobj(calg->algorithm);
|
||||
|
||||
if (ciph == NULL) {
|
||||
CMSerr(CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT, CMS_R_UNKNOWN_CIPHER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fixlen = EVP_CIPHER_key_length(ciph);
|
||||
}
|
||||
|
||||
ktri->pctx = EVP_PKEY_CTX_new(pkey, NULL);
|
||||
if (ktri->pctx == NULL)
|
||||
return 0;
|
||||
@@ -401,7 +415,9 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
|
||||
|
||||
if (EVP_PKEY_decrypt(ktri->pctx, ek, &eklen,
|
||||
ktri->encryptedKey->data,
|
||||
ktri->encryptedKey->length) <= 0) {
|
||||
ktri->encryptedKey->length) <= 0
|
||||
|| eklen == 0
|
||||
|| (fixlen != 0 && eklen != fixlen)) {
|
||||
CMSerr(CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT, CMS_R_CMS_LIB);
|
||||
goto err;
|
||||
}
|
||||
|
||||
+1
-149
@@ -13,152 +13,6 @@
|
||||
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
static const ERR_STRING_DATA CMS_str_functs[] = {
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CHECK_CONTENT, 0), "check_content"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD0_CERT, 0), "CMS_add0_cert"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD0_RECIPIENT_KEY, 0),
|
||||
"CMS_add0_recipient_key"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD0_RECIPIENT_PASSWORD, 0),
|
||||
"CMS_add0_recipient_password"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_RECEIPTREQUEST, 0),
|
||||
"CMS_add1_ReceiptRequest"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_RECIPIENT_CERT, 0),
|
||||
"CMS_add1_recipient_cert"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_SIGNER, 0), "CMS_add1_signer"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_SIGNINGTIME, 0),
|
||||
"cms_add1_signingTime"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_SIGNING_CERT, 0),
|
||||
"CMS_add1_signing_cert"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_SIGNING_CERT_V2, 0),
|
||||
"CMS_add1_signing_cert_v2"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COMPRESS, 0), "CMS_compress"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COMPRESSEDDATA_CREATE, 0),
|
||||
"cms_CompressedData_create"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COMPRESSEDDATA_INIT_BIO, 0),
|
||||
"cms_CompressedData_init_bio"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COPY_CONTENT, 0), "cms_copy_content"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COPY_MESSAGEDIGEST, 0),
|
||||
"cms_copy_messageDigest"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DATA, 0), "CMS_data"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DATAFINAL, 0), "CMS_dataFinal"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DATAINIT, 0), "CMS_dataInit"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT, 0), "CMS_decrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT_SET1_KEY, 0),
|
||||
"CMS_decrypt_set1_key"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT_SET1_PASSWORD, 0),
|
||||
"CMS_decrypt_set1_password"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT_SET1_PKEY, 0),
|
||||
"CMS_decrypt_set1_pkey"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGESTALGORITHM_FIND_CTX, 0),
|
||||
"cms_DigestAlgorithm_find_ctx"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGESTALGORITHM_INIT_BIO, 0),
|
||||
"cms_DigestAlgorithm_init_bio"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGESTEDDATA_DO_FINAL, 0),
|
||||
"cms_DigestedData_do_final"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGEST_VERIFY, 0), "CMS_digest_verify"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCODE_RECEIPT, 0), "cms_encode_Receipt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPT, 0), "CMS_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDCONTENT_INIT, 0),
|
||||
"cms_EncryptedContent_init"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 0),
|
||||
"cms_EncryptedContent_init_bio"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDDATA_DECRYPT, 0),
|
||||
"CMS_EncryptedData_decrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT, 0),
|
||||
"CMS_EncryptedData_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY, 0),
|
||||
"CMS_EncryptedData_set1_key"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENVELOPEDDATA_CREATE, 0),
|
||||
"CMS_EnvelopedData_create"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENVELOPEDDATA_INIT_BIO, 0),
|
||||
"cms_EnvelopedData_init_bio"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENVELOPED_DATA_INIT, 0),
|
||||
"cms_enveloped_data_init"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENV_ASN1_CTRL, 0), "cms_env_asn1_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_FINAL, 0), "CMS_final"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_CERTIFICATE_CHOICES, 0),
|
||||
"cms_get0_certificate_choices"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_CONTENT, 0), "CMS_get0_content"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_ECONTENT_TYPE, 0),
|
||||
"cms_get0_econtent_type"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_ENVELOPED, 0), "cms_get0_enveloped"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_REVOCATION_CHOICES, 0),
|
||||
"cms_get0_revocation_choices"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_SIGNED, 0), "cms_get0_signed"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_MSGSIGDIGEST_ADD1, 0),
|
||||
"cms_msgSigDigest_add1"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECEIPTREQUEST_CREATE0, 0),
|
||||
"CMS_ReceiptRequest_create0"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECEIPT_VERIFY, 0), "cms_Receipt_verify"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_DECRYPT, 0),
|
||||
"CMS_RecipientInfo_decrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_ENCRYPT, 0),
|
||||
"CMS_RecipientInfo_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT, 0),
|
||||
"cms_RecipientInfo_kari_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG, 0),
|
||||
"CMS_RecipientInfo_kari_get0_alg"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID, 0),
|
||||
"CMS_RecipientInfo_kari_get0_orig_id"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS, 0),
|
||||
"CMS_RecipientInfo_kari_get0_reks"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP, 0),
|
||||
"CMS_RecipientInfo_kari_orig_id_cmp"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT, 0),
|
||||
"cms_RecipientInfo_kekri_decrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT, 0),
|
||||
"cms_RecipientInfo_kekri_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID, 0),
|
||||
"CMS_RecipientInfo_kekri_get0_id"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP, 0),
|
||||
"CMS_RecipientInfo_kekri_id_cmp"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP, 0),
|
||||
"CMS_RecipientInfo_ktri_cert_cmp"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT, 0),
|
||||
"cms_RecipientInfo_ktri_decrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT, 0),
|
||||
"cms_RecipientInfo_ktri_encrypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS, 0),
|
||||
"CMS_RecipientInfo_ktri_get0_algs"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID, 0),
|
||||
"CMS_RecipientInfo_ktri_get0_signer_id"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT, 0),
|
||||
"cms_RecipientInfo_pwri_crypt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_SET0_KEY, 0),
|
||||
"CMS_RecipientInfo_set0_key"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD, 0),
|
||||
"CMS_RecipientInfo_set0_password"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_SET0_PKEY, 0),
|
||||
"CMS_RecipientInfo_set0_pkey"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SD_ASN1_CTRL, 0), "cms_sd_asn1_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET1_IAS, 0), "cms_set1_ias"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET1_KEYID, 0), "cms_set1_keyid"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET1_SIGNERIDENTIFIER, 0),
|
||||
"cms_set1_SignerIdentifier"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET_DETACHED, 0), "CMS_set_detached"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGN, 0), "CMS_sign"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNED_DATA_INIT, 0),
|
||||
"cms_signed_data_init"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_CONTENT_SIGN, 0),
|
||||
"cms_SignerInfo_content_sign"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_SIGN, 0),
|
||||
"CMS_SignerInfo_sign"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_VERIFY, 0),
|
||||
"CMS_SignerInfo_verify"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_VERIFY_CERT, 0),
|
||||
"cms_signerinfo_verify_cert"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT, 0),
|
||||
"CMS_SignerInfo_verify_content"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGN_RECEIPT, 0), "CMS_sign_receipt"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SI_CHECK_ATTRIBUTES, 0),
|
||||
"CMS_si_check_attributes"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_STREAM, 0), "CMS_stream"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_UNCOMPRESS, 0), "CMS_uncompress"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_VERIFY, 0), "CMS_verify"},
|
||||
{ERR_PACK(ERR_LIB_CMS, CMS_F_KEK_UNWRAP_KEY, 0), "kek_unwrap_key"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const ERR_STRING_DATA CMS_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ADD_SIGNER_ERROR), "add signer error"},
|
||||
{ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ATTRIBUTE_ERROR), "attribute error"},
|
||||
@@ -292,10 +146,8 @@ static const ERR_STRING_DATA CMS_str_reasons[] = {
|
||||
int ERR_load_CMS_strings(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
if (ERR_func_error_string(CMS_str_functs[0].error) == NULL) {
|
||||
ERR_load_strings_const(CMS_str_functs);
|
||||
if (ERR_reason_error_string(CMS_str_reasons[0].error) == NULL)
|
||||
ERR_load_strings_const(CMS_str_reasons);
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <openssl/ess.h>
|
||||
#include "cms_lcl.h"
|
||||
#include "internal/ess_int.h"
|
||||
#include "internal/cms_int.h"
|
||||
|
||||
IMPLEMENT_ASN1_FUNCTIONS(CMS_ReceiptRequest)
|
||||
|
||||
@@ -339,12 +340,10 @@ ASN1_OCTET_STRING *cms_encode_Receipt(CMS_SignerInfo *si)
|
||||
}
|
||||
|
||||
/*
|
||||
* Add signer certificate's V2 digest to a SignerInfo
|
||||
* structure
|
||||
* Add signer certificate's V2 digest |sc| to a SignerInfo structure |si|
|
||||
*/
|
||||
|
||||
int CMS_add1_signing_cert_v2(CMS_SignerInfo *si,
|
||||
ESS_SIGNING_CERT_V2 *sc)
|
||||
int cms_add1_signing_cert_v2(CMS_SignerInfo *si, ESS_SIGNING_CERT_V2 *sc)
|
||||
{
|
||||
ASN1_STRING *seq = NULL;
|
||||
unsigned char *p, *pp;
|
||||
@@ -373,11 +372,10 @@ int CMS_add1_signing_cert_v2(CMS_SignerInfo *si,
|
||||
}
|
||||
|
||||
/*
|
||||
* Add signer certificate's digest to a SignerInfo
|
||||
* structure
|
||||
* Add signer certificate's digest |sc| to a SignerInfo structure |si|
|
||||
*/
|
||||
|
||||
int CMS_add1_signing_cert(CMS_SignerInfo *si, ESS_SIGNING_CERT *sc)
|
||||
int cms_add1_signing_cert(CMS_SignerInfo *si, ESS_SIGNING_CERT *sc)
|
||||
{
|
||||
ASN1_STRING *seq = NULL;
|
||||
unsigned char *p, *pp;
|
||||
|
||||
@@ -125,6 +125,8 @@ struct CMS_EncryptedContentInfo_st {
|
||||
size_t keylen;
|
||||
/* Set to 1 if we are debugging decrypt and don't fake keys for MMA */
|
||||
int debug;
|
||||
/* Set to 1 if we have no cert and need extra safety measures for MMA */
|
||||
int havenocert;
|
||||
};
|
||||
|
||||
struct CMS_RecipientInfo_st {
|
||||
@@ -317,8 +319,6 @@ struct CMS_OtherKeyAttribute_st {
|
||||
|
||||
/* ESS structures */
|
||||
|
||||
# ifdef HEADER_X509V3_H
|
||||
|
||||
struct CMS_ReceiptRequest_st {
|
||||
ASN1_OCTET_STRING *signedContentIdentifier;
|
||||
CMS_ReceiptsFrom *receiptsFrom;
|
||||
@@ -332,7 +332,6 @@ struct CMS_ReceiptsFrom_st {
|
||||
STACK_OF(GENERAL_NAMES) *receiptList;
|
||||
} d;
|
||||
};
|
||||
# endif
|
||||
|
||||
struct CMS_Receipt_st {
|
||||
int32_t version;
|
||||
|
||||
+29
-2
@@ -14,9 +14,12 @@
|
||||
#include <openssl/x509v3.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/cms.h>
|
||||
#include <openssl/ess.h>
|
||||
#include "cms_lcl.h"
|
||||
#include "internal/asn1_int.h"
|
||||
#include "internal/evp_int.h"
|
||||
#include "internal/cms_int.h"
|
||||
#include "internal/ess_int.h"
|
||||
|
||||
/* CMS SignedData Utilities */
|
||||
|
||||
@@ -355,13 +358,13 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
|
||||
if ((sc = ESS_SIGNING_CERT_new_init(signer,
|
||||
NULL, 1)) == NULL)
|
||||
goto err;
|
||||
add_sc = CMS_add1_signing_cert(si, sc);
|
||||
add_sc = cms_add1_signing_cert(si, sc);
|
||||
ESS_SIGNING_CERT_free(sc);
|
||||
} else {
|
||||
if ((sc2 = ESS_SIGNING_CERT_V2_new_init(md, signer,
|
||||
NULL, 1)) == NULL)
|
||||
goto err;
|
||||
add_sc = CMS_add1_signing_cert_v2(si, sc2);
|
||||
add_sc = cms_add1_signing_cert_v2(si, sc2);
|
||||
ESS_SIGNING_CERT_V2_free(sc2);
|
||||
}
|
||||
if (!add_sc)
|
||||
@@ -703,11 +706,23 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si)
|
||||
si->pctx = pctx;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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 been
|
||||
* present since CMS was first put in - but has never been used to do
|
||||
* anything. 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.
|
||||
*/
|
||||
#if 0
|
||||
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
|
||||
EVP_PKEY_CTRL_CMS_SIGN, 0, si) <= 0) {
|
||||
CMSerr(CMS_F_CMS_SIGNERINFO_SIGN, CMS_R_CTRL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
|
||||
alen = ASN1_item_i2d((ASN1_VALUE *)si->signedAttrs, &abuf,
|
||||
ASN1_ITEM_rptr(CMS_Attributes_Sign));
|
||||
@@ -724,11 +739,23 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *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 been
|
||||
* present since CMS was first put in - but has never been used to do
|
||||
* anything. 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.
|
||||
*/
|
||||
#if 0
|
||||
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
|
||||
EVP_PKEY_CTRL_CMS_SIGN, 1, si) <= 0) {
|
||||
CMSerr(CMS_F_CMS_SIGNERINFO_SIGN, CMS_R_CTRL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
|
||||
EVP_MD_CTX_reset(mctx);
|
||||
|
||||
|
||||
@@ -743,6 +743,10 @@ int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert,
|
||||
cms->d.envelopedData->encryptedContentInfo->debug = 1;
|
||||
else
|
||||
cms->d.envelopedData->encryptedContentInfo->debug = 0;
|
||||
if (!cert)
|
||||
cms->d.envelopedData->encryptedContentInfo->havenocert = 1;
|
||||
else
|
||||
cms->d.envelopedData->encryptedContentInfo->havenocert = 0;
|
||||
if (!pk && !cert && !dcont && !out)
|
||||
return 1;
|
||||
if (pk && !CMS_decrypt_set1_pkey(cms, pk, cert))
|
||||
|
||||
Reference in New Issue
Block a user