=pod

=head1 NAME

SMIME_write_PKCS7 - convert PKCS#7 structure to S/MIME format.

=head1 SYNOPSIS

int SMIME_write_PKCS7(BIO *out, PKCS7 *p7, BIO *data, int flags);

=head1 DESCRIPTION

SMIME_write_PKCS7() adds the appropriate MIME headers to a PKCS#7
structure to produce an S/MIME message.

B<out> is the BIO to write the data to. B<p7> is the appropriate
B<PKCS7> structure. If cleartext signing (B<multipart/signed>) is
being used then the signed data must be supplied in the B<data> 
argument. B<flags> is an optional set of flags.

=head1 NOTES

The following flags can be passed in the B<flags> parameter.

If B<PKCS7_DETACHED> is set then cleartext signing will be used,
this option only makes sense for signedData where B<PKCS7_DETACHED>
is also set when PKCS7_sign() is also called.

If the B<PKCS7_TEXT> flag is set MIME headers for type B<text/plain>
are added to the content, this only makes sense if B<PKCS7_DETACHED>
is also set.

If the B<PKCS7_PARTSIGN> flag is set the signed data is finalized
and output along with the content. This flag should only be set
if B<PKCS7_DETACHED> is also set and the previous call to PKCS7_sign()
also set these flags.

If cleartext signing is being used and B<PKCS7_PARTSIGN> not set then
the data must be read twice: once to compute the signature in PKCS7_sign()
and once to output the S/MIME message.

=head1 BUGS

SMIME_write_PKCS7() always base64 encodes PKCS#7 structures, there
should be an option to disable this.

=head1 RETURN VALUES

SMIME_write_PKCS7() returns 1 for success or 0 for failure.

=head1 SEE ALSO

L<ERR_get_error(3)|ERR_get_error(3)>, L<PKCS7_sign(3)|PKCS7_sign(3)>,
L<PKCS7_verify(3)|PKCS7_verify(3)>, L<PKCS7_encrypt(3)|PKCS7_encrypt(3)>
L<PKCS7_decrypt(3)|PKCS7_decrypt(3)>

=head1 HISTORY

SMIME_write_PKCS7() was added to OpenSSL 0.9.5

=cut
