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

# libressl-d2i\_PKCS8\_PRIV\_KEY\_INFO(3)

decode and encode PKCS#8 private key

## NAME

**d2i\_PKCS8\_PRIV\_KEY\_INFO**, **i2d\_PKCS8\_PRIV\_KEY\_INFO**, **d2i\_PKCS8\_PRIV\_KEY\_INFO\_bio**, **i2d\_PKCS8\_PRIV\_KEY\_INFO\_bio**, **d2i\_PKCS8\_PRIV\_KEY\_INFO\_fp**, **i2d\_PKCS8\_PRIV\_KEY\_INFO\_fp** – decode and encode PKCS#8 private key

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

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

*PKCS8\_PRIV\_KEY\_INFO* *\**\

**d2i\_PKCS8\_PRIV\_KEY\_INFO**(*PKCS8\_PRIV\_KEY\_INFO \*\*val\_out*, *const unsigned char \*\*der\_in*, *long length*);

*int*\

**i2d\_PKCS8\_PRIV\_KEY\_INFO**(*PKCS8\_PRIV\_KEY\_INFO \*val\_in*, *unsigned char \*\*der\_out*);

*PKCS8\_PRIV\_KEY\_INFO* *\**\

**d2i\_PKCS8\_PRIV\_KEY\_INFO\_bio**(*BIO \*in\_bio*, *PKCS8\_PRIV\_KEY\_INFO \*\*val\_out*);

*int*\

**i2d\_PKCS8\_PRIV\_KEY\_INFO\_bio**(*BIO \*out\_bio*, *PKCS8\_PRIV\_KEY\_INFO \*val\_in*);

*PKCS8\_PRIV\_KEY\_INFO* *\**\

**d2i\_PKCS8\_PRIV\_KEY\_INFO\_fp**(*FILE \*in\_fp*, *PKCS8\_PRIV\_KEY\_INFO \*\*val\_out*);

*int*\

**i2d\_PKCS8\_PRIV\_KEY\_INFO\_fp**(*BIO \*out\_fp*, *PKCS8\_PRIV\_KEY\_INFO \*val\_in*);

## DESCRIPTION

**d2i\_PKCS8\_PRIV\_KEY\_INFO**() and **i2d\_PKCS8\_PRIV\_KEY\_INFO**() decode and encode an ASN.1 *PrivateKeyInfo* structure defined in RFC 5208 section 5.

**d2i\_PKCS8\_PRIV\_KEY\_INFO\_bio**(), **i2d\_PKCS8\_PRIV\_KEY\_INFO\_bio**(), **d2i\_PKCS8\_PRIV\_KEY\_INFO\_fp**(), and **i2d\_PKCS8\_PRIV\_KEY\_INFO\_fp**() are similar except that they decode or encode using a *BIO* or *FILE* pointer.

For details about the semantics, examples, caveats, and bugs, see ASN1\_item\_d2i(3).

These functions all use unencrypted DER format. To store private keys in encrypted form, consider d2i\_PKCS8PrivateKey\_bio(3) or PEM\_write\_PKCS8PrivateKey(3).

## RETURN VALUES

**d2i\_PKCS8\_PRIV\_KEY\_INFO**(), **d2i\_PKCS8\_PRIV\_KEY\_INFO\_bio**(), and **d2i\_PKCS8\_PRIV\_KEY\_INFO\_fp**() return a *PKCS8\_PRIV\_KEY\_INFO* object or NULL if an error occurs.

**i2d\_PKCS8\_PRIV\_KEY\_INFO**() returns the number of bytes successfully encoded or a negative value if an error occurs.

**i2d\_PKCS8\_PRIV\_KEY\_INFO\_bio**() and **i2d\_PKCS8\_PRIV\_KEY\_INFO\_fp**() return 1 for success or 0 if an error occurs.

## SEE ALSO

ASN1\_item\_d2i(3), d2i\_PKCS8PrivateKey\_bio(3), d2i\_PrivateKey(3), PEM\_write\_PKCS8\_PRIV\_KEY\_INFO(3), PKCS8\_PRIV\_KEY\_INFO\_new(3)

## STANDARDS

RFC 5208: PKCS#8: Private-Key Information Syntax Specification

## HISTORY

**d2i\_PKCS8\_PRIV\_KEY\_INFO**() and **i2d\_PKCS8\_PRIV\_KEY\_INFO**() first appeared in OpenSSL 0.9.3. **d2i\_PKCS8\_PRIV\_KEY\_INFO\_bio**(), **i2d\_PKCS8\_PRIV\_KEY\_INFO\_bio**(), **d2i\_PKCS8\_PRIV\_KEY\_INFO\_fp**(), and **i2d\_PKCS8\_PRIV\_KEY\_INFO\_fp**() first appeared in OpenSSL 0.9.4. All these functions have been available since OpenBSD 2.6.
