summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/crypto/pkcs7/pk7_doit.c')
-rw-r--r--src/lib/libssl/src/crypto/pkcs7/pk7_doit.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c b/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c
index 099e9651c1..bf43d030ad 100644
--- a/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c
+++ b/src/lib/libssl/src/crypto/pkcs7/pk7_doit.c
@@ -370,7 +370,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
370 if (ri == NULL) { 370 if (ri == NULL) {
371 PKCS7err(PKCS7_F_PKCS7_DATADECODE, 371 PKCS7err(PKCS7_F_PKCS7_DATADECODE,
372 PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE); 372 PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE);
373 return(NULL); 373 goto err;
374 } 374 }
375 375
376 jj=EVP_PKEY_size(pkey); 376 jj=EVP_PKEY_size(pkey);
@@ -393,7 +393,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
393 BIO_get_cipher_ctx(etmp,&evp_ctx); 393 BIO_get_cipher_ctx(etmp,&evp_ctx);
394 EVP_CipherInit(evp_ctx,evp_cipher,NULL,NULL,0); 394 EVP_CipherInit(evp_ctx,evp_cipher,NULL,NULL,0);
395 if (EVP_CIPHER_asn1_to_param(evp_ctx,enc_alg->parameter) < 0) 395 if (EVP_CIPHER_asn1_to_param(evp_ctx,enc_alg->parameter) < 0)
396 return(NULL); 396 goto err;
397 397
398 if (jj != EVP_CIPHER_CTX_key_length(evp_ctx)) { 398 if (jj != EVP_CIPHER_CTX_key_length(evp_ctx)) {
399 /* Some S/MIME clients don't use the same key 399 /* Some S/MIME clients don't use the same key
@@ -588,8 +588,10 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio)
588 pp=NULL; 588 pp=NULL;
589 } 589 }
590 590
591#ifndef NO_DSA
591 if (si->pkey->type == EVP_PKEY_DSA) 592 if (si->pkey->type == EVP_PKEY_DSA)
592 ctx_tmp.digest=EVP_dss1(); 593 ctx_tmp.digest=EVP_dss1();
594#endif
593 595
594 if (!EVP_SignFinal(&ctx_tmp,(unsigned char *)buf->data, 596 if (!EVP_SignFinal(&ctx_tmp,(unsigned char *)buf->data,
595 (unsigned int *)&buf->length,si->pkey)) 597 (unsigned int *)&buf->length,si->pkey))
@@ -783,7 +785,14 @@ for (ii=0; ii<md_len; ii++) printf("%02X",md_dat[ii]); printf(" calc\n");
783 785
784 os=si->enc_digest; 786 os=si->enc_digest;
785 pkey = X509_get_pubkey(x509); 787 pkey = X509_get_pubkey(x509);
788 if (!pkey)
789 {
790 ret = -1;
791 goto err;
792 }
793#ifndef NO_DSA
786 if(pkey->type == EVP_PKEY_DSA) mdc_tmp.digest=EVP_dss1(); 794 if(pkey->type == EVP_PKEY_DSA) mdc_tmp.digest=EVP_dss1();
795#endif
787 796
788 i=EVP_VerifyFinal(&mdc_tmp,os->data,os->length, pkey); 797 i=EVP_VerifyFinal(&mdc_tmp,os->data,os->length, pkey);
789 EVP_PKEY_free(pkey); 798 EVP_PKEY_free(pkey);