Commit e9ec6396 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Fix indefinite length encoding so EOC correctly updates

the buffer pointer.

Rename PKCS7_PARTSIGN to PKCS7_STREAM.

Guess what that's for :-)
parent 0185803c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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().
+2 −2
Original line number Diff line number Diff line
@@ -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;
		}
+4 −2
Original line number Diff line number Diff line
@@ -494,6 +494,9 @@ 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);
		if (ndef)
			ASN1_put_eoc(out);
		else
			*out += len;
	}

@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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))) {
Loading