Use correct headers for signed receipts. Use consistent naming.
authorDr. Stephen Henson <steve@openssl.org>
Mon, 31 Mar 2008 15:03:55 +0000 (15:03 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 31 Mar 2008 15:03:55 +0000 (15:03 +0000)
Update cms-test.pl to support OpenSSL 0.9.8.

crypto/asn1/asn1.h
crypto/asn1/asn_mime.c
crypto/cms/cms_io.c
crypto/pkcs7/pk7_mime.c
test/cms-test.pl

index 6ab12a9df9825d8690e5862a3b1da5869320f350..8185e1dbb57c14997f0c4f8d0f6ccf17dba747b4 100644 (file)
@@ -324,7 +324,7 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
 
 #define DECLARE_ASN1_FUNCTIONS_const(name) \
        name *name##_new(void); \
-       void name##_free(name *a);
+       void name##_free(name *a); \
 
 #define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \
        type *name##_new(void); \
@@ -1126,10 +1126,10 @@ int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,
                                const char *hdr,
                                const ASN1_ITEM *it);
 int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
-                               int ctype_nid,
+                               int ctype_nid, int econt_nid,
                                STACK_OF(X509_ALGOR) *mdalgs,
                                const ASN1_ITEM *it);
-ASN1_VALUE *SMIME_read_asn1(BIO *bio, BIO **bcont, const ASN1_ITEM *it);
+ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it);
 int SMIME_crlf_copy(BIO *in, BIO *out, int flags);
 int SMIME_text(BIO *in, BIO *out);
 
index 91488172108b8db2b528089657deb206f0380285..8fbdf21337653fe99f2cd1d97fd5658b082ba382 100644 (file)
@@ -276,7 +276,7 @@ static int asn1_write_micalg(BIO *out, STACK_OF(X509_ALGOR) *mdalgs)
 /* SMIME sender */
 
 int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
-                               int ctype_nid,
+                               int ctype_nid, int econt_nid,
                                STACK_OF(X509_ALGOR) *mdalgs,
                                const ASN1_ITEM *it)
 {
@@ -340,7 +340,9 @@ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
                msg_type = "enveloped-data";
        else if (ctype_nid == NID_pkcs7_signed)
                {
-               if (sk_X509_ALGOR_num(mdalgs) >= 0)
+               if (econt_nid == NID_id_smime_ct_receipt)
+                       msg_type = "signed-receipt";
+               else if (sk_X509_ALGOR_num(mdalgs) >= 0)
                        msg_type = "signed-data";
                else
                        msg_type = "certs-only";
@@ -423,7 +425,7 @@ static int asn1_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags,
  * pointed to by "bcont". In opaque this is set to NULL
  */
 
-ASN1_VALUE *SMIME_read_asn1(BIO *bio, BIO **bcont, const ASN1_ITEM *it)
+ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it)
 {
        BIO *asnin;
        STACK_OF(MIME_HEADER) *headers = NULL;
index 051757b560742da7449264a296566df2b92edeed..1cb0264cc531fbed2cca51040b3c2c51f88b71f5 100644 (file)
@@ -114,19 +114,20 @@ int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags)
        {
        STACK_OF(X509_ALGOR) *mdalgs;
        int ctype_nid = OBJ_obj2nid(cms->contentType);
+       int econt_nid = OBJ_obj2nid(CMS_get0_eContentType(cms));
        if (ctype_nid == NID_pkcs7_signed)
                mdalgs = cms->d.signedData->digestAlgorithms;
        else
                mdalgs = NULL;
 
        return SMIME_write_ASN1(bio, (ASN1_VALUE *)cms, data, flags,
-                                       ctype_nid, mdalgs,
+                                       ctype_nid, econt_nid, mdalgs,
                                        ASN1_ITEM_rptr(CMS_ContentInfo));       
        }
 
 CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont)
        {
-       return (CMS_ContentInfo *)SMIME_read_asn1(bio, bcont,
+       return (CMS_ContentInfo *)SMIME_read_ASN1(bio, bcont,
                                        ASN1_ITEM_rptr(CMS_ContentInfo));
        }
 
index f44ca697db49c501b6cb30adf40a5efb9f5565c4..92362980ae5a137f1df74303c949cad386e663f3 100644 (file)
@@ -87,11 +87,11 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags)
 
 
        return SMIME_write_ASN1(bio, (ASN1_VALUE *)p7, data, flags,
-                                       ctype_nid, mdalgs,
+                                       ctype_nid, NID_undef, mdalgs,
                                        ASN1_ITEM_rptr(PKCS7)); 
        }
 
 PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont)
        {
-       return (PKCS7 *)SMIME_read_asn1(bio, bcont, ASN1_ITEM_rptr(PKCS7));
+       return (PKCS7 *)SMIME_read_ASN1(bio, bcont, ASN1_ITEM_rptr(PKCS7));
        }
index db272e4d666bcb81c578bfbcba34d389e09570f8..254f11c630e4c5f3e7eadf661e3c4f1e68ef6a4b 100644 (file)
@@ -74,6 +74,7 @@ my $smdir    = "smime-certs";
 my $halt_err = 1;
 
 my $badcmd = 0;
+my $ossl8 = `$ossl_path version -v` =~ /0\.9\.8/;
 
 my @smime_pkcs7_tests = (
 
@@ -333,6 +334,8 @@ else {
     print "Zlib not supported: compression tests skipped\n";
 }
 
+print "Running modified tests for OpenSSL 0.9.8 cms backport\n" if($ossl8);
+
 if ($badcmd) {
     print "$badcmd TESTS FAILED!!\n";
 }
@@ -351,6 +354,15 @@ sub run_smime_tests {
 
     foreach $smtst (@$aref) {
         my ( $tnam, $rscmd, $rvcmd ) = @$smtst;
+       if ($ossl8)
+               {
+               # Skip smime resign: 0.9.8 smime doesn't support -resign        
+               next if ($scmd =~ /smime/ && $rscmd =~ /-resign/);
+               # Disable streaming: option not supported in 0.9.8
+               $tnam =~ s/streaming//; 
+               $rscmd =~ s/-stream//;  
+               $rvcmd =~ s/-stream//;
+               }
         system("$scmd$rscmd 2>cms.err 1>cms.out");
         if ($?) {
             print "$tnam: generation error\n";