x86cpuid.pl: fix processor capability detection on pre-586.
[openssl.git] / crypto / cms / cms_lib.c
index a715fc3ad54a30ddf12d7749100485b40a84e074..a5a186c5ac85c265c7e34b0ecf66c2dfd1dff575 100644 (file)
@@ -341,21 +341,6 @@ int CMS_set_detached(CMS_ContentInfo *cms, int detached)
        return 0;
        }
 
-/* Set up an X509_ALGOR DigestAlgorithmIdentifier from an EVP_MD */
-
-void cms_DigestAlgorithm_set(X509_ALGOR *alg, const EVP_MD *md)
-       {
-       int param_type;
-
-       if (md->flags & EVP_MD_FLAG_DIGALGID_ABSENT)
-               param_type = V_ASN1_UNDEF;
-       else
-               param_type = V_ASN1_NULL;
-
-       X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL);
-
-       }
-
 /* Create a digest BIO from an X509_ALGOR structure */
 
 BIO *cms_DigestAlgorithm_init_bio(X509_ALGOR *digestAlgorithm)
@@ -406,11 +391,12 @@ int cms_DigestAlgorithm_find_ctx(EVP_MD_CTX *mctx, BIO *chain,
                        return 0;
                        }
                BIO_get_md_ctx(chain, &mtmp);
-               if (EVP_MD_CTX_type(mtmp) == nid)
-                       {
-                       EVP_MD_CTX_copy_ex(mctx, mtmp);
-                       return 1;
-                       }
+               if (EVP_MD_CTX_type(mtmp) == nid
+               /* Workaround for broken implementations that use signature
+                * algorithm  OID instead of digest.
+                */
+                       || EVP_MD_pkey_type(EVP_MD_CTX_md(mtmp)) == nid)
+                       return EVP_MD_CTX_copy_ex(mctx, mtmp);
                chain = BIO_next(chain);
                }
        }
@@ -474,7 +460,7 @@ int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert)
                        if (!X509_cmp(cch->d.certificate, cert))
                                {
                                CMSerr(CMS_F_CMS_ADD0_CERT, 
-                                       CMS_R_CERTIFICTATE_ALREADY_PRESENT);
+                                       CMS_R_CERTIFICATE_ALREADY_PRESENT);
                                return 0;
                                }
                        }
@@ -548,6 +534,15 @@ int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl)
        return 1;
        }
 
+int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl)
+       {
+       int r;
+       r = CMS_add0_crl(cms, crl);
+       if (r > 0)
+               CRYPTO_add(&crl->references, 1, CRYPTO_LOCK_X509_CRL);
+       return r;
+       }
+
 STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms)
        {
        STACK_OF(X509) *certs = NULL;