1=pod 2 3=head1 NAME 4 5SMIME_read_PKCS7 - parse S/MIME message. 6 7=head1 SYNOPSIS 8 9PKCS7 *SMIME_read_PKCS7(BIO *in, BIO **bcont); 10 11=head1 DESCRIPTION 12 13SMIME_read_PKCS7() parses a message in S/MIME format. 14 15B<in> is a BIO to read the message from. 16 17If cleartext signing is used then the content is saved in 18a memory bio which is written to B<*bcont>, otherwise 19B<*bcont> is set to B<NULL>. 20 21The parsed PKCS#7 structure is returned or B<NULL> if an 22error occurred. 23 24=head1 NOTES 25 26If B<*bcont> is not B<NULL> then the message is clear text 27signed. B<*bcont> can then be passed to PKCS7_verify() with 28the B<PKCS7_DETACHED> flag set. 29 30Otherwise the type of the returned structure can be determined 31using PKCS7_type(). 32 33To support future functionality if B<bcont> is not B<NULL> 34B<*bcont> should be initialized to B<NULL>. For example: 35 36 BIO *cont = NULL; 37 PKCS7 *p7; 38 39 p7 = SMIME_read_PKCS7(in, &cont); 40 41=head1 BUGS 42 43The MIME parser used by SMIME_read_PKCS7() is somewhat primitive. 44While it will handle most S/MIME messages more complex compound 45formats may not work. 46 47The parser assumes that the PKCS7 structure is always base64 48encoded and will not handle the case where it is in binary format 49or uses quoted printable format. 50 51The use of a memory BIO to hold the signed content limits the size 52of message which can be processed due to memory restraints: a 53streaming single pass option should be available. 54 55=head1 RETURN VALUES 56 57SMIME_read_PKCS7() returns a valid B<PKCS7> structure or B<NULL> 58is an error occurred. The error can be obtained from ERR_get_error(3). 59 60=head1 SEE ALSO 61 62L<ERR_get_error(3)|ERR_get_error(3)>, L<PKCS7_type(3)|PKCS7_type(3)> 63L<SMIME_read_PKCS7(3)|SMIME_read_PKCS7(3)>, L<PKCS7_sign(3)|PKCS7_sign(3)>, 64L<PKCS7_verify(3)|PKCS7_verify(3)>, L<PKCS7_encrypt(3)|PKCS7_encrypt(3)> 65L<PKCS7_decrypt(3)|PKCS7_decrypt(3)> 66 67=head1 HISTORY 68 69SMIME_read_PKCS7() was added to OpenSSL 0.9.5 70 71=cut 72