Sortix nightly manual
This manual documents Sortix nightly, a development build that has not been officially released. You can instead view this document in the latest official manual.
| EVP_PKEY_NEW(3) | Library Functions Manual | EVP_PKEY_NEW(3) | 
NAME
EVP_PKEY_new,
    EVP_PKEY_up_ref,
    EVP_PKEY_free,
    EVP_PKEY_new_raw_private_key,
    EVP_PKEY_new_raw_public_key,
    EVP_PKEY_new_CMAC_key,
    EVP_PKEY_new_mac_key,
    EVP_PKEY_get_raw_private_key,
    EVP_PKEY_get_raw_public_key —
    public and private key allocation and raw key handling
    functions
SYNOPSIS
#include
    <openssl/evp.h>
EVP_PKEY *
  
  EVP_PKEY_new(void);
int
  
  EVP_PKEY_up_ref(EVP_PKEY
  *pkey);
void
  
  EVP_PKEY_free(EVP_PKEY
  *pkey);
EVP_PKEY *
  
  EVP_PKEY_new_raw_private_key(int
    type, ENGINE *engine, const
    unsigned char *rawpriv, size_t rawlen);
EVP_PKEY *
  
  EVP_PKEY_new_raw_public_key(int
    type, ENGINE *engine, const
    unsigned char *rawpub, size_t rawlen);
EVP_PKEY *
  
  EVP_PKEY_new_CMAC_key(ENGINE
    *engine, const unsigned char *rawpriv,
    size_t rawlen, const EVP_CIPHER
    *cipher);
EVP_PKEY *
  
  EVP_PKEY_new_mac_key(int type,
    ENGINE *engine, const unsigned char
    *rawpriv, int rawlen);
int
  
  EVP_PKEY_get_raw_private_key(const
    EVP_PKEY *pkey, unsigned char *rawpriv,
    size_t *rawlen);
int
  
  EVP_PKEY_get_raw_public_key(const
    EVP_PKEY *pkey, unsigned char *rawpub,
    size_t *rawlen);
DESCRIPTION
The EVP_PKEY structure is used by various OpenSSL functions which require a general private or public key without reference to any particular algorithm.
The
    EVP_PKEY_new()
    function allocates an empty EVP_PKEY structure. The
    reference count is set to 1. To add a private or public key to it, use the
    functions described in
    EVP_PKEY_set1_RSA(3).
EVP_PKEY_up_ref()
    increments the reference count of pkey by 1.
EVP_PKEY_free()
    decrements the reference count of pkey by 1, and if
    the reference count reaches zero, frees it up. If pkey
    is a NULL pointer, no action occurs.
EVP_PKEY_new_raw_private_key()
    allocates a new EVP_PKEY. The NID of a public key
    algorithm that supports raw private keys, i.e.
    EVP_PKEY_HMAC,
    EVP_PKEY_X25519, or
    EVP_PKEY_ED25519, is provided in the
    type argument and rawlen bytes
    of raw private key data of that type in rawpriv. The
    public key data is automatically derived from the given private key data, if
    appropriate for the algorithm type. The ENGINE *engine
    argument is always ignored and passing NULL is
    recommended.
EVP_PKEY_new_raw_public_key()
    works in the same way as
    EVP_PKEY_new_raw_private_key() except that
    rawpub points to the raw public key data. The
    EVP_PKEY structure is initialised without any private
    key information. Algorithm types that support raw public keys are
    EVP_PKEY_X25519 and
    EVP_PKEY_ED25519.
EVP_PKEY_new_CMAC_key()
    works in the same way as
    EVP_PKEY_new_raw_private_key() except that it only
    handles the EVP_PKEY_CMAC algorithm type. The
    additional cipher argument specifies the cipher
    algorithm to be used during the creation of the CMAC. It should be a
    standard encryption only cipher. For example, AEAD and XTS ciphers should
    not be used.
EVP_PKEY_new_mac_key()
    is a deprecated function that works in the same way as
    EVP_PKEY_new_raw_private_key().
EVP_PKEY_get_raw_private_key()
    writes up to *rawlen bytes of raw private key data to
    the buffer starting at rawpriv and stores the number
    of bytes written in *rawlen. The calling application
    is responsible for ensuring that the buffer is large enough to receive the
    private key data. If the rawpriv argument is
    NULL, the number of bytes required to hold the key
    is stored in *rawlen. This function only works for
    algorithms that support raw private keys. Currently these are
    EVP_PKEY_HMAC,
    EVP_PKEY_X25519, and
    EVP_PKEY_ED25519.
EVP_PKEY_get_raw_public_key()
    is similar to EVP_PKEY_get_raw_private_key() except
    that it writes raw public key data. This function only works for algorithms
    that support raw public keys. Currently these are
    EVP_PKEY_X25519 and
    EVP_PKEY_ED25519.
RETURN VALUES
EVP_PKEY_new(),
    EVP_PKEY_new_raw_private_key(),
    EVP_PKEY_new_raw_public_key(),
    EVP_PKEY_new_CMAC_key(), and
    EVP_PKEY_new_mac_key() return either the newly
    allocated EVP_PKEY structure or
    NULL if an error occurred.
EVP_PKEY_up_ref(),
    EVP_PKEY_get_raw_private_key(), and
    EVP_PKEY_get_raw_public_key() return 1 for success
    or 0 for failure.
SEE ALSO
CMAC_Init(3), d2i_PrivateKey(3), evp(3), EVP_PKCS82PKEY(3), EVP_PKEY_asn1_new(3), EVP_PKEY_check(3), EVP_PKEY_cmp(3), EVP_PKEY_CTX_new(3), EVP_PKEY_get_default_digest_nid(3), EVP_PKEY_meth_new(3), EVP_PKEY_print_private(3), EVP_PKEY_set1_RSA(3), EVP_PKEY_size(3), X509_get_pubkey_parameters(3)
HISTORY
EVP_PKEY_new() and
    EVP_PKEY_free() first appeared in SSLeay 0.6.0 and
    have been available since OpenBSD 2.4.
EVP_PKEY_new_CMAC_key() first appeared in
    OpenSSL 1.1.1 and has been available since OpenBSD
    6.9.
EVP_PKEY_new_mac_key() first appeared in
    OpenSSL 1.0.0 and has been available since OpenBSD
    4.9.
EVP_PKEY_up_ref() first appeared in
    OpenSSL 1.1.0 and has been available since OpenBSD
    6.3.
EVP_PKEY_new_raw_private_key(),
    EVP_PKEY_new_raw_public_key(),
    EVP_PKEY_get_raw_private_key(), and
    EVP_PKEY_get_raw_public_key() first appeared in
    OpenSSL 1.1.1 and have been available since OpenBSD
    7.3.
| August 24, 2024 | Sortix 1.1.0-dev | 
