Fix indefinite length encoding so EOC correctly updates
authorDr. Stephen Henson <steve@openssl.org>
Tue, 25 Feb 2003 19:03:31 +0000 (19:03 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 25 Feb 2003 19:03:31 +0000 (19:03 +0000)
the buffer pointer.

Rename PKCS7_PARTSIGN to PKCS7_STREAM.

Guess what that's for :-)

CHANGES
apps/smime.c
crypto/asn1/tasn_enc.c
crypto/pkcs7/pk7_mime.c
crypto/pkcs7/pk7_smime.c
crypto/pkcs7/pkcs7.h

diff --git a/CHANGES b/CHANGES
index 98b44d5..b032498 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -18,7 +18,7 @@
      cleartext signing (multipart/signed type) is effectively streaming
      and the signed data does not need to be all held in memory.
 
-     This is done with a new flag PKCS7_PARTSIGN. When this flag is set
+     This is done with a new flag PKCS7_STREAM. When this flag is set
      PKCS7_sign() only initializes the PKCS7 structure and the actual signing
      is done after the data is output (and digests calculated) in
      SMIME_write_PKCS7().
index 83daa71..1d7d828 100644 (file)
@@ -482,10 +482,10 @@ int MAIN(int argc, char **argv)
                 * signing.
                 */
                if ((flags & PKCS7_DETACHED) && (outformat == FORMAT_SMIME))
-                       flags |= PKCS7_PARTSIGN;
+                       flags |= PKCS7_STREAM;
                p7 = PKCS7_sign(signer, key, other, in, flags);
                /* Don't need to rewind for partial signing */
-               if (!(flags & PKCS7_PARTSIGN) && (BIO_reset(in) != 0)) {
+               if (!(flags & PKCS7_STREAM) && (BIO_reset(in) != 0)) {
                  BIO_printf(bio_err, "Can't rewind input file\n");
                  goto end;
                }
index 5ce38e1..2e80655 100644 (file)
@@ -494,7 +494,10 @@ static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out, const A
        if(out) {
                if(usetag) ASN1_put_object(out, ndef, len, tag, aclass);
                asn1_ex_i2c(pval, *out, &utype, it);
-               *out += len;
+               if (ndef)
+                       ASN1_put_eoc(out);
+               else
+                       *out += len;
        }
 
        if(usetag) return ASN1_object_size(ndef, len, tag);
@@ -598,7 +601,6 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype, const ASN1_
                                {
                                strtmp->data = cout;
                                strtmp->length = 0;
-                               ASN1_put_eoc(&cout);
                                }
                        /* Special return code */
                        return -2;
index 51be777..431aff9 100644 (file)
@@ -202,7 +202,7 @@ static int pkcs7_output_data(BIO *out, BIO *data, PKCS7 *p7, int flags)
        {
        BIO *tmpbio, *p7bio;
 
-       if (!(flags & PKCS7_PARTSIGN))
+       if (!(flags & PKCS7_STREAM))
                {
                SMIME_crlf_copy(data, out, flags);
                return 1;
index b170fe2..333a8aa 100644 (file)
@@ -125,7 +125,7 @@ PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
                }
        }
 
-       if (flags & PKCS7_PARTSIGN)
+       if (flags & PKCS7_STREAM)
                return p7;
 
        if (!(p7bio = PKCS7_dataInit(p7, NULL))) {
index a295658..e6f6572 100644 (file)
@@ -260,7 +260,7 @@ DECLARE_PKCS12_STACK_OF(PKCS7)
 #define PKCS7_BINARY           0x80
 #define PKCS7_NOATTR           0x100
 #define        PKCS7_NOSMIMECAP        0x200
-#define        PKCS7_PARTSIGN          0x400
+#define        PKCS7_STREAM            0x400
 
 /* Flags: for compatibility with older code */