---
name: "libressl-SMIME_read_PKCS7"
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_PKCS7"
---

# libressl-SMIME\_read\_PKCS7(3)

extract a PKCS#7 object from an S/MIME message

## NAME

**SMIME\_read\_PKCS7** – extract a PKCS#7 object from an S/MIME message

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

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

*PKCS7* *\**\

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

## DESCRIPTION

**SMIME\_read\_PKCS7**() parses a message in S/MIME format.

*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 \**bcont*, otherwise \**bcont* is set to NULL.

The parsed PKCS#7 structure is returned, or NULL if an error occurred.

If \**bcont* is not NULL, then the message is clear text signed. \**bcont* can then be passed to PKCS7\_verify(3) with the PKCS7\_DETACHED flag set.

Otherwise the type of the returned structure can be determined using the **PKCS7\_type\_is\_\***() macros defined in ⟨openssl/pkcs7.h⟩.

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

```
BIO *cont = NULL;
PKCS7 *p7;
p7 = SMIME_read_PKCS7(in, &cont);
```

## RETURN VALUES

**SMIME\_read\_PKCS7**() returns a valid *PKCS7* 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), PKCS7\_new(3), SMIME\_read\_CMS(3), SMIME\_text(3), SMIME\_write\_PKCS7(3)

## HISTORY

**SMIME\_read\_PKCS7**() first appeared in OpenSSL 0.9.5 and has been available since OpenBSD 2.7.

## 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 it 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.
