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

# libressl-EVP\_PKEY\_cmp(3)

public key parameter and comparison functions

## NAME

**EVP\_PKEY\_missing\_parameters**, **EVP\_PKEY\_copy\_parameters**, **EVP\_PKEY\_cmp\_parameters**, **EVP\_PKEY\_cmp** – public key parameter and comparison functions

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

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

*int*\

**EVP\_PKEY\_missing\_parameters**(*const EVP\_PKEY \*pkey*);

*int*\

**EVP\_PKEY\_copy\_parameters**(*EVP\_PKEY \*destination*, *const EVP\_PKEY \*source*);

*int*\

**EVP\_PKEY\_cmp\_parameters**(*const EVP\_PKEY \*a*, *const EVP\_PKEY \*b*);

*int*\

**EVP\_PKEY\_cmp**(*const EVP\_PKEY \*a*, *const EVP\_PKEY \*b*);

## DESCRIPTION

**EVP\_PKEY\_missing\_parameters**() checks whether any public key parameters are missing from *pkey*.

**EVP\_PKEY\_copy\_parameters**() copies all public key parameters from the *source* to the *destination*. If the algorithm does not use parameters, no action occurs.

**EVP\_PKEY\_cmp\_parameters**() compares the public key parameters of *a* and *b*. This is only supported for algorithms that use parameters.

**EVP\_PKEY\_cmp**() compares the public key components of *a* and *b*. If the algorithm uses public key parameters, it also compares the parameters.

The main purpose of the functions **EVP\_PKEY\_missing\_parameters**() and **EVP\_PKEY\_copy\_parameters**() is to handle public keys in certificates where the parameters are sometimes omitted from a public key if they are inherited from the CA that signed it.

Since OpenSSL private keys contain public key components too, the function **EVP\_PKEY\_cmp**() can also be used to determine if a private key matches a public key.

## RETURN VALUES

**EVP\_PKEY\_missing\_parameters**() returns 1 if the public key parameters of *pkey* are missing or incomplete or 0 if they are present and complete or if the algorithm doesn't use parameters.

**EVP\_PKEY\_copy\_parameters**() returns 1 for success or 0 for failure. In particular, it fails if the key types mismatch or if the public key parameters in the *source* are missing or incomplete.

**EVP\_PKEY\_cmp\_parameters**() and **EVP\_PKEY\_cmp**() return 1 if the keys match, 0 if they don't match, -1 if the key types are different and -2 if the operation is not supported.

## SEE ALSO

EVP\_PKEY\_CTX\_new(3), EVP\_PKEY\_keygen(3), EVP\_PKEY\_new(3), X509\_get\_pubkey\_parameters(3)

## HISTORY

**EVP\_PKEY\_missing\_parameters**() and **EVP\_PKEY\_copy\_parameters**() first appeared in SSLeay 0.8.0. **EVP\_PKEY\_cmp\_parameters**() first appeared in SSLeay 0.9.0. These functions have been available since OpenBSD 2.4.

**EVP\_PKEY\_cmp**() first appeared in OpenSSL 0.9.8 and has been available since OpenBSD 4.5.
