=pod

=head1 NAME

SMIME_read_PKCS7 - parse S/MIME message.

=head1 SYNOPSIS

PKCS7 *SMIME_read_PKCS7(BIO *in, BIO **bcont);

=head1 DESCRIPTION

SMIME_read_PKCS7() parses a message in S/MIME format.

B<in> is a BIO to read the message from.

If cleartext signing is used then the content is saved in
a memory bio which is written to B<*bcont>, otherwise
B<*bcont> is set to B<NULL>.

The parsed PKCS#7 structure is returned or B<NULL> if an
error occurred.

=head1 NOTES

If B<*bcont> is not B<NULL> then the message is clear text
signed. B<*bcont> can then be passed to PKCS7_verify() with
the B<PKCS7_DETACHED> flag set.

Otherwise the type of the returned structure can be determined
using PKCS7_type().

To support future functionality if B<bcont> is not B<NULL>
B<*bcont> should be initialized to B<NULL>. For example:

 BIO *cont = NULL;
 PKCS7 *p7;

 p7 = SMIME_read_PKCS7(in, &cont);

=head1 BUGS

The MIME parser used by SMIME_read_PKCS7() is somewhat primitive.
While it will handle most S/MIME messages more complex compound
formats may not work.

The parser assumes that the PKCS7 structure is always base64
encoded and will not handle the case where it is in binary format
or uses quoted printable format.

The use of a memory BIO to hold the signed content limits the size
of message which can be processed due to memory restraints: a
streaming single pass option should be available.

=head1 RETURN VALUES

SMIME_read_PKCS7() returns a valid B<PKCS7> structure or B<NULL>
is an error occurred. The error can be obtained from ERR_get_error(3).

=head1 SEE ALSO

L<ERR_get_error(3)|ERR_get_error(3)>, L<PKCS7_type(3)|PKCS7_type(3)>
L<SMIME_read_PKCS7(3)|SMIME_read_PKCS7(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_read_PKCS7() was added to OpenSSL 0.9.5

=cut
