PKCS8_PKEY_SET0(3) | Library Functions Manual | PKCS8_PKEY_SET0(3)

# NAME

`PKCS8_pkey_set0`, `PKCS8_pkey_get0`, `PKCS8_pkey_add1_attr_by_NID`, `PKCS8_pkey_get0_attrs` — change and inspect PKCS#8 PrivateKeyInfo objects

# SYNOPSIS

library “libcrypto”
`#include <openssl/x509.h>`

int
`PKCS8_pkey_set0`(PKCS8_PRIV_KEY_INFO *keyinfo, ASN1_OBJECT *aobj, int version, int ptype, void *pval, unsigned char *data, int len);

int
`PKCS8_pkey_get0`(const ASN1_OBJECT **paobj, const unsigned char **pdata, int *plen, const X509_ALGOR **palgor, const PKCS8_PRIV_KEY_INFO *keyinfo);

int
`PKCS8_pkey_add1_attr_by_NID`(PKCS8_PRIV_KEY_INFO *keyinfo, int nid, int type, const unsigned char *data, int len);

const STACK_OF(X509_ATTRIBUTE) *
`PKCS8_pkey_get0_attrs`(const PKCS8_PRIV_KEY_INFO *keyinfo);

# DESCRIPTION

`PKCS8_pkey_set0`() initializes the keyinfo object. The algorithm is set to aobj with the associated parameter type ptype and parameter value pval using X509_ALGOR_set0(3), replacing any previous information about the algorithm. Unless data is `NULL`, the encoded private key is set to the len bytes starting at data using ASN1_STRING_set0(3), not performing any validation. If data is `NULL`, the key data remains unchanged. If the version argument is greater than or equal to 0, it replaces any existing version; otherwise, the version remains unchanged. If keyinfo contains any attributes, they remain unchanged.

`PKCS8_pkey_get0`() retrieves some information from the keyinfo object. Internal pointers to the algorithm OID, the AlgorithmIdentifier, and the encoded private key are stored in *paobj, *palgor, and *pdata, respectively. `NULL` pointers can be passed for any of these three arguments if the respective information is not needed. Unless pdata is `NULL`, *plen is set to the number of bytes in *pdata.

`PKCS8_pkey_add1_attr_by_NID`() creates a new X.501 Attribute object using X509_ATTRIBUTE_create_by_NID(3) and appends it to the attributes of keyinfo.

# RETURN VALUES

`PKCS8_pkey_set0`() and `PKCS8_pkey_add1_attr_by_NID`() return 1 for success or 0 for failure.

`PKCS8_pkey_get0`() always returns 1.

`PKCS8_pkey_get0_attrs`() returns an internal pointer to the array of attributes associated with keyinfo or `NULL` if no attributes are set.

# SEE ALSO

ASN1_STRING_set0(3), EVP_PKCS82PKEY(3), OBJ_nid2obj(3), PKCS8_PRIV_KEY_INFO_new(3), STACK_OF(3), X509_ALGOR_new(3), X509_ATTRIBUTE_create_by_NID(3), X509_ATTRIBUTE_new(3)

# HISTORY

`PKCS8_pkey_set0`() and `PKCS8_pkey_get0`() first appeared in OpenSSL 1.0.0 and have been available since OpenBSD 4.9.

`PKCS8_pkey_add1_attr_by_NID`() and `PKCS8_pkey_get0_attrs`() first appeared in OpenSSL 1.1.0 and have been available since OpenBSD 6.4.

June 8, 2025 | Debian