diff options
Diffstat (limited to 'src/lib/libssl/src/crypto/pkcs7/pk7_doit.c')
-rw-r--r-- | src/lib/libssl/src/crypto/pkcs7/pk7_doit.c | 13 |
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); |