提交 e9ec6396 编写于 作者: D Dr. Stephen Henson

Fix indefinite length encoding so EOC correctly updates

the buffer pointer.

Rename PKCS7_PARTSIGN to PKCS7_STREAM.

Guess what that's for :-)
上级 0185803c
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
cleartext signing (multipart/signed type) is effectively streaming cleartext signing (multipart/signed type) is effectively streaming
and the signed data does not need to be all held in memory. 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 PKCS7_sign() only initializes the PKCS7 structure and the actual signing
is done after the data is output (and digests calculated) in is done after the data is output (and digests calculated) in
SMIME_write_PKCS7(). SMIME_write_PKCS7().
......
...@@ -482,10 +482,10 @@ int MAIN(int argc, char **argv) ...@@ -482,10 +482,10 @@ int MAIN(int argc, char **argv)
* signing. * signing.
*/ */
if ((flags & PKCS7_DETACHED) && (outformat == FORMAT_SMIME)) if ((flags & PKCS7_DETACHED) && (outformat == FORMAT_SMIME))
flags |= PKCS7_PARTSIGN; flags |= PKCS7_STREAM;
p7 = PKCS7_sign(signer, key, other, in, flags); p7 = PKCS7_sign(signer, key, other, in, flags);
/* Don't need to rewind for partial signing */ /* 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"); BIO_printf(bio_err, "Can't rewind input file\n");
goto end; goto end;
} }
......
...@@ -494,7 +494,10 @@ static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out, const A ...@@ -494,7 +494,10 @@ static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out, const A
if(out) { if(out) {
if(usetag) ASN1_put_object(out, ndef, len, tag, aclass); if(usetag) ASN1_put_object(out, ndef, len, tag, aclass);
asn1_ex_i2c(pval, *out, &utype, it); 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); 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_ ...@@ -598,7 +601,6 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype, const ASN1_
{ {
strtmp->data = cout; strtmp->data = cout;
strtmp->length = 0; strtmp->length = 0;
ASN1_put_eoc(&cout);
} }
/* Special return code */ /* Special return code */
return -2; return -2;
......
...@@ -202,7 +202,7 @@ static int pkcs7_output_data(BIO *out, BIO *data, PKCS7 *p7, int flags) ...@@ -202,7 +202,7 @@ static int pkcs7_output_data(BIO *out, BIO *data, PKCS7 *p7, int flags)
{ {
BIO *tmpbio, *p7bio; BIO *tmpbio, *p7bio;
if (!(flags & PKCS7_PARTSIGN)) if (!(flags & PKCS7_STREAM))
{ {
SMIME_crlf_copy(data, out, flags); SMIME_crlf_copy(data, out, flags);
return 1; return 1;
......
...@@ -125,7 +125,7 @@ PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, ...@@ -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; return p7;
if (!(p7bio = PKCS7_dataInit(p7, NULL))) { if (!(p7bio = PKCS7_dataInit(p7, NULL))) {
......
...@@ -260,7 +260,7 @@ DECLARE_PKCS12_STACK_OF(PKCS7) ...@@ -260,7 +260,7 @@ DECLARE_PKCS12_STACK_OF(PKCS7)
#define PKCS7_BINARY 0x80 #define PKCS7_BINARY 0x80
#define PKCS7_NOATTR 0x100 #define PKCS7_NOATTR 0x100
#define PKCS7_NOSMIMECAP 0x200 #define PKCS7_NOSMIMECAP 0x200
#define PKCS7_PARTSIGN 0x400 #define PKCS7_STREAM 0x400
/* Flags: for compatibility with older code */ /* Flags: for compatibility with older code */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册