=pod

=head1 NAME

 SMIME_read_CMS - parse S/MIME message.

=head1 SYNOPSIS

 #include <openssl/cms.h>

 CMS_ContentInfo *SMIME_read_CMS(BIO *in, BIO **bcont);

=head1 DESCRIPTION

SMIME_read_CMS() 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 NULL.

The parsed CMS_ContentInfo structure is returned or NULL if an
error occurred.

=head1 NOTES

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

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

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

 BIO *cont = NULL;
 CMS_ContentInfo *cms;

 cms = SMIME_read_CMS(in, &cont);

=head1 BUGS

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

The parser assumes that the CMS_ContentInfo 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_CMS() returns a valid B<CMS_ContentInfo> structure or B<NULL>
if 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<CMS_type(3)|CMS_type(3)>
L<SMIME_read_CMS(3)|SMIME_read_CMS(3)>, L<CMS_sign(3)|CMS_sign(3)>,
L<CMS_verify(3)|CMS_verify(3)>, L<CMS_encrypt(3)|CMS_encrypt(3)>
L<CMS_decrypt(3)|CMS_decrypt(3)>

=head1 HISTORY

SMIME_read_CMS() was added to OpenSSL 0.9.8

=cut
