DH_GENERATE_KEY(3)

πŸ“¦ version 4.4.0, in alpine 3.24, arch rolling

πŸŽ€ NAME πŸŽ€

DH_generate_key, DH_compute_key β€” perform Diffie-Hellman key exchange.

hiii bestie!! this is DH_GENERATE_KEY(3) from the Library Functions Manual, and it’s literally the group-chat guide to doing Diffie-Hellman key exchange with libcrypto πŸ’…βœ¨


πŸ¦‹ SYNOPSIS πŸ¦‹

okay so the include-and-signatures sitch is exactly this, no edits, periodt:

library β€œlibcrypto” #include <openssl/dh.h>

int
DH_generate_key(DH *dh);

int
DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh);

🌸 DESCRIPTION 🌸

okay so picture this: you and your bestie wanna build a shared secret without yelling it across the group chat. DH_generate_key() performs the first step of a Diffie-Hellman key exchange by generating private and public DH values ✨. Then, by calling DH_compute_key(), these are combined with the other party’s public value to compute the shared key. team effort, no cap 🀝.

DH_generate_key() expects dh to contain the shared parameters dh->p and dh->g. It generates a random private DH value unless dh->priv_key is already set, and computes the corresponding public value dh->pub_key, which can then be published πŸ“£.

DH_compute_key() computes the shared secret from the private DH value in dh and the other party’s public value in pub_key and stores it in key.

bestie, hear me: key must point to DH_size(dh) bytes of memory. no tiny-buffer energy, okay? πŸ’€

πŸ’œ RETURN VALUES πŸ’œ

like, what even comes back? πŸ‘€

  • DH_generate_key() β€” returns 1 on success, or 0 otherwise.
  • DH_compute_key() β€” returns the size of the shared secret on success, or -1 on error.

The error codes can be obtained by ERR_get_error(3). grab those receipts if something acts up 🧾.


🌈 SEE ALSO 🌈

go peek at these besties:


⭐ HISTORY ⭐

DH_generate_key() and DH_compute_key() first appeared in SSLeay 0.5.1 and have been available since OpenBSD 2.4. iconic longevity, honestly πŸ‘‘

xoxo, Debian πŸ’– June 8, 2025 πŸ’–

πŸ“¦ where this page comes from