Fix indefinite length encoding so EOC correctly updates
the buffer pointer. Rename PKCS7_PARTSIGN to PKCS7_STREAM. Guess what that's for :-)
This commit is contained in:
parent
0185803cc2
commit
e9ec63961b
6 changed files with 10 additions and 8 deletions
2
CHANGES
2
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().
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))) {
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Reference in a new issue