ECDH_COMPUTE_KEY(3) | Library Functions Manual | ECDH_COMPUTE_KEY(3)

# NAME

`ECDH_compute_key`, `ECDH_size` — Elliptic Curve Diffie-Hellman key exchange

# SYNOPSIS

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

int
`ECDH_compute_key`(void *out, size_t outlen, const EC_POINT *public_key, EC_KEY *ecdh, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen));

int
`ECDH_size`(const EC_KEY *ecdh);

# DESCRIPTION

`ECDH_compute_key`() performs Elliptic Curve Diffie-Hellman key agreement. It combines the private key contained in ecdh with the other party's public_key, takes the x component of the affine coordinates, and optionally applies the key derivation function KDF. It stores the resulting symmetric key in the buffer out, which is outlen bytes long. If KDF is `NULL`, outlen must be at least `ECDH_size`(ecdh).

`ECDH_size`() returns the number of bytes needed to store an affine coordinate of a point on the elliptic curve used by ecdh, which is one eighth of the degree of the finite field underlying that elliptic curve, rounded up to the next integer number.

# RETURN VALUES

`ECDH_compute_key`() returns the length of the computed key in bytes or -1 if an error occurs.

`ECDH_size`() returns the number of bytes needed to store an affine coordinate.

# SEE ALSO

DH_generate_key(3), DH_size(3), EC_GROUP_new_by_curve_name(3), EC_KEY_new(3), EC_POINT_new(3), X25519(3)

# HISTORY

`ECDH_compute_key`() first appeared in OpenSSL 0.9.8 and has been available since OpenBSD 4.5.

`ECDH_size`() first appeared in OpenBSD 6.1.

June 8, 2025 | Debian