diff options
Diffstat (limited to 'crypto/pkcs7/pk7_mime.c')
-rw-r--r-- | crypto/pkcs7/pk7_mime.c | 62 |
1 files changed, 17 insertions, 45 deletions
diff --git a/crypto/pkcs7/pk7_mime.c b/crypto/pkcs7/pk7_mime.c index 831b47d..938f79a 100644 --- a/crypto/pkcs7/pk7_mime.c +++ b/crypto/pkcs7/pk7_mime.c @@ -59,54 +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; - - 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; - - 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) @@ -118,8 +83,15 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags) 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)); + } |