EVP_PKEY_CTX_NEW(3) | Library Functions Manual | EVP_PKEY_CTX_NEW(3)

# NAME

`EVP_PKEY_CTX_new`, `EVP_PKEY_CTX_new_id`, `EVP_PKEY_CTX_dup`, `EVP_PKEY_CTX_free` — public key algorithm context functions

# SYNOPSIS

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

EVP_PKEY_CTX *
`EVP_PKEY_CTX_new`(EVP_PKEY *pkey, ENGINE *engine);

EVP_PKEY_CTX *
`EVP_PKEY_CTX_new_id`(int id, ENGINE *engine);

EVP_PKEY_CTX *
`EVP_PKEY_CTX_dup`(EVP_PKEY_CTX *ctx);

void
`EVP_PKEY_CTX_free`(EVP_PKEY_CTX *ctx);

# DESCRIPTION

The `EVP_PKEY_CTX_new`() function allocates a public key algorithm context using the algorithm specified in pkey. The ENGINE *engine argument is always ignored and passing `NULL` is recommended.

The `EVP_PKEY_CTX_new_id`() function allocates a public key algorithm context using the algorithm specified by id. The ENGINE *engine argument is always ignored and passing `NULL` is recommended. It is normally used when no EVP_PKEY structure is associated with the operations, for example during parameter generation of key generation for some algorithms. The id argument can be any of the constants that EVP_PKEY_base_id(3) and EVP_PKEY_id(3) may return.

`EVP_PKEY_CTX_dup`() duplicates the context ctx.

`EVP_PKEY_CTX_free`() frees up the context ctx. If ctx is a `NULL` pointer, no action occurs.

# RETURN VALUES

`EVP_PKEY_CTX_new`(), `EVP_PKEY_CTX_new_id`(), and `EVP_PKEY_CTX_dup`() return either the newly allocated EVP_PKEY_CTX structure or `NULL` if an error occurred.

# SEE ALSO

EVP_DigestSignInit(3), EVP_DigestVerifyInit(3), EVP_PKEY_base_id(3), EVP_PKEY_CTX_ctrl(3), EVP_PKEY_CTX_get_operation(3), EVP_PKEY_CTX_hkdf_mode(3), EVP_PKEY_decrypt(3), EVP_PKEY_derive(3), EVP_PKEY_encrypt(3), EVP_PKEY_keygen(3), EVP_PKEY_new(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), RSA_pkey_ctx_ctrl(3), X25519(3)

# HISTORY

These functions first appeared in OpenSSL 1.0.0 and have been available since OpenBSD 4.9.

# CAVEATS

The EVP_PKEY_CTX structure is an opaque public key algorithm context used by the OpenSSL high level public key API. Contexts MUST NOT be shared between threads. It is not permissible to use the same context simultaneously in two threads.

June 8, 2025 | Debian