---
name: "libressl-SMIME_read_CMS"
section: "3"
platform: "linux"
package: "libressl"
version: "4.4.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libressl-SMIME_read_CMS"
---

# libressl-SMIME\_read\_CMS(3)

extract CMS ContentInfo from an S/MIME message

## NAME

**SMIME\_read\_CMS** – extract CMS ContentInfo from an S/MIME message

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

**#include \<openssl/cms.h\>**

*CMS\_ContentInfo* *\**\

**SMIME\_read\_CMS**(*BIO \*in*, *BIO \*\*bcont*);

## DESCRIPTION

**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).

## SEE ALSO

BIO\_f\_base64(3), BIO\_new(3), CMS\_ContentInfo\_new(3), CMS\_decrypt(3), CMS\_get0\_type(3), CMS\_verify(3), d2i\_CMS\_ContentInfo(3), SMIME\_read\_PKCS7(3), SMIME\_text(3), SMIME\_write\_CMS(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.
