diff options
Diffstat (limited to 'src/lib/libcrypto/cms/cms_lib.c')
| -rw-r--r-- | src/lib/libcrypto/cms/cms_lib.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/lib/libcrypto/cms/cms_lib.c b/src/lib/libcrypto/cms/cms_lib.c index 8e6c1d29a5..d00fe0f87b 100644 --- a/src/lib/libcrypto/cms/cms_lib.c +++ b/src/lib/libcrypto/cms/cms_lib.c | |||
| @@ -60,7 +60,8 @@ | |||
| 60 | #include "cms.h" | 60 | #include "cms.h" |
| 61 | #include "cms_lcl.h" | 61 | #include "cms_lcl.h" |
| 62 | 62 | ||
| 63 | IMPLEMENT_ASN1_FUNCTIONS_const(CMS_ContentInfo) | 63 | IMPLEMENT_ASN1_FUNCTIONS(CMS_ContentInfo) |
| 64 | IMPLEMENT_ASN1_PRINT_FUNCTION(CMS_ContentInfo) | ||
| 64 | 65 | ||
| 65 | DECLARE_ASN1_ITEM(CMS_CertificateChoices) | 66 | DECLARE_ASN1_ITEM(CMS_CertificateChoices) |
| 66 | DECLARE_ASN1_ITEM(CMS_RevocationInfoChoice) | 67 | DECLARE_ASN1_ITEM(CMS_RevocationInfoChoice) |
| @@ -346,20 +347,10 @@ void cms_DigestAlgorithm_set(X509_ALGOR *alg, const EVP_MD *md) | |||
| 346 | { | 347 | { |
| 347 | int param_type; | 348 | int param_type; |
| 348 | 349 | ||
| 349 | switch (EVP_MD_type(md)) | 350 | if (md->flags & EVP_MD_FLAG_DIGALGID_ABSENT) |
| 350 | { | ||
| 351 | case NID_sha1: | ||
| 352 | case NID_sha224: | ||
| 353 | case NID_sha256: | ||
| 354 | case NID_sha384: | ||
| 355 | case NID_sha512: | ||
| 356 | param_type = V_ASN1_UNDEF; | 351 | param_type = V_ASN1_UNDEF; |
| 357 | break; | 352 | else |
| 358 | |||
| 359 | default: | ||
| 360 | param_type = V_ASN1_NULL; | 353 | param_type = V_ASN1_NULL; |
| 361 | break; | ||
| 362 | } | ||
| 363 | 354 | ||
| 364 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); | 355 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); |
| 365 | 356 | ||
| @@ -415,7 +406,11 @@ int cms_DigestAlgorithm_find_ctx(EVP_MD_CTX *mctx, BIO *chain, | |||
| 415 | return 0; | 406 | return 0; |
| 416 | } | 407 | } |
| 417 | BIO_get_md_ctx(chain, &mtmp); | 408 | BIO_get_md_ctx(chain, &mtmp); |
| 418 | if (EVP_MD_CTX_type(mtmp) == nid) | 409 | if (EVP_MD_CTX_type(mtmp) == nid |
| 410 | /* Workaround for broken implementations that use signature | ||
| 411 | * algorithm OID instead of digest. | ||
| 412 | */ | ||
| 413 | || EVP_MD_pkey_type(EVP_MD_CTX_md(mtmp)) == nid) | ||
| 419 | { | 414 | { |
| 420 | EVP_MD_CTX_copy_ex(mctx, mtmp); | 415 | EVP_MD_CTX_copy_ex(mctx, mtmp); |
| 421 | return 1; | 416 | return 1; |
| @@ -557,6 +552,15 @@ int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl) | |||
| 557 | return 1; | 552 | return 1; |
| 558 | } | 553 | } |
| 559 | 554 | ||
| 555 | int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl) | ||
| 556 | { | ||
| 557 | int r; | ||
| 558 | r = CMS_add0_crl(cms, crl); | ||
| 559 | if (r > 0) | ||
| 560 | CRYPTO_add(&crl->references, 1, CRYPTO_LOCK_X509_CRL); | ||
| 561 | return r; | ||
| 562 | } | ||
| 563 | |||
| 560 | STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms) | 564 | STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms) |
| 561 | { | 565 | { |
| 562 | STACK_OF(X509) *certs = NULL; | 566 | STACK_OF(X509) *certs = NULL; |
