Index: openssl/crypto/pkcs7/pk7_mime.c |
=================================================================== |
--- openssl/crypto/pkcs7/pk7_mime.c (revision 105093) |
+++ openssl/crypto/pkcs7/pk7_mime.c (working copy) |
@@ -59,57 +59,19 @@ |
#include <openssl/x509.h> |
#include <openssl/asn1.h> |
-/* PKCS#7 wrappers round generalised MIME routines */ |
+/* PKCS#7 wrappers round generalised stream and MIME routines */ |
-PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont) |
+int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags) |
{ |
- return (PKCS7 *)SMIME_read_ASN1(bio, bcont, ASN1_ITEM_rptr(PKCS7)); |
+ return i2d_ASN1_bio_stream(out, (ASN1_VALUE *)p7, in, flags, |
+ ASN1_ITEM_rptr(PKCS7)); |
} |
-/* Callback for int_smime_write_ASN1 */ |
- |
-static int pk7_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags, |
- const ASN1_ITEM *it) |
+int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags) |
{ |
- PKCS7 *p7 = (PKCS7 *)val; |
- BIO *tmpbio, *p7bio; |
- int r = 0; |
- |
- if (!(flags & SMIME_DETACHED)) |
- { |
- SMIME_crlf_copy(data, out, flags); |
- return 1; |
- } |
- |
- /* Let PKCS7 code prepend any needed BIOs */ |
- |
- p7bio = PKCS7_dataInit(p7, out); |
- |
- if (!p7bio) |
- return 0; |
- |
- /* Copy data across, passing through filter BIOs for processing */ |
- SMIME_crlf_copy(data, p7bio, flags); |
- |
- /* Finalize structure */ |
- if (PKCS7_dataFinal(p7, p7bio) <= 0) |
- goto err; |
- |
- r = 1; |
- |
- err: |
- |
- /* Now remove any digests prepended to the BIO */ |
- |
- while (p7bio != out) |
- { |
- tmpbio = BIO_pop(p7bio); |
- BIO_free(p7bio); |
- p7bio = tmpbio; |
- } |
- |
- return 1; |
- |
+ return PEM_write_bio_ASN1_stream(out, (ASN1_VALUE *) p7, in, flags, |
+ "PKCS7", |
+ ASN1_ITEM_rptr(PKCS7)); |
} |
int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags) |
@@ -121,8 +83,15 @@ |
else |
mdalgs = NULL; |
- return int_smime_write_ASN1(bio, (ASN1_VALUE *)p7, data, flags, |
+ flags ^= SMIME_OLDMIME; |
+ |
+ |
+ return SMIME_write_ASN1(bio, (ASN1_VALUE *)p7, data, flags, |
ctype_nid, NID_undef, mdalgs, |
- pk7_output_data, |
ASN1_ITEM_rptr(PKCS7)); |
} |
+ |
+PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont) |
+ { |
+ return (PKCS7 *)SMIME_read_ASN1(bio, bcont, ASN1_ITEM_rptr(PKCS7)); |
+ } |