libressl-SMIME_read_CMS(3)

libressl-SMIME_read_CMS3

Extract cms contentinfo from an s/mime message

Usage

Crypto Library (libcrypto, -lcrypto)

#include <openssl/cms.h>

CMS_ContentInfo *

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

Overview

SMIME_read_CMS() parses a message in S/MIME format from in.

If the message uses cleartext signing, the content is saved in a memory BIO which is written to *bcont and which can then be passed to CMS_verify(3) with the CMS_DETACHED flag set. Otherwise, *bcont is set to NULL and the type of the returned structure can be determined using CMS_get0_type(3).

To support future functionality if bcont is not NULL, *bcont should be initialized to NULL, for example:

BIO *cont = NULL;
CMS_ContentInfo *cms = SMIME_read_CMS(in, &cont);

Return values

SMIME_read_CMS() returns a valid CMS_ContentInfo structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

History

SMIME_read_CMS() first appeared in OpenSSL 0.9.8h and has been available since OpenBSD 6.7.

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 the message which can be processed due to memory restraints: a streaming single pass option should be available.

From libressl 4.4.0-1 in Arch Linux 2026-11-01. Parsed by carta from the page's mdoc source.