EVP_PKEY-X25519(7ossl)
π EVP_PKEY-X25519 β the X25519 / X448 / ED25519 / ED448 glow-up guide β¨
okay so bestie, welcome to the 7ossl girlies' corner of the OpenSSL docs π
this one is all about the EVP_PKEY keytypes and algorithm support for X25519, X448, ED25519 and ED448, and the EVP_KEYMGMT side of the same four πΈ
π NAME π
EVP_PKEY-X25519, EVP_PKEY-X448, EVP_PKEY-ED25519, EVP_PKEY-ED448, EVP_KEYMGMT-X25519, EVP_KEYMGMT-X448, EVP_KEYMGMT-ED25519, EVP_KEYMGMT-ED448 β all of these are literally the "EVP_PKEY X25519, X448, ED25519 and ED448 keytype and algorithm support" page π«Ά
β¨ DESCRIPTION β¨
So the X25519, X448, ED25519 and ED448 keytypes are implemented in OpenSSL's default and FIPS providers, no cap π and those implementations support the associated key, which contains the public key pub and the private key priv π₯
π¨ heads up babes: no additional parameters can be set during key generation. that's just how it is, periodt π
π Common X25519, X448, ED25519 and ED448 parameters
on top of the common parameters that all keytypes should support (peep "Common parameters" in provider-keymgmt(7)), these keytypes also support the following π
- "group" (
OSSL_PKEY_PARAM_GROUP_NAME)<UTF8 string>β bestie this one is only supported by X25519 and X448 π¦ the group name must be"x25519"or"x448"respectively for those algorithms. it's only present for consistency with other key exchange algorithms and is typically not needed, so likeβ¦ lowkey optional vibes π - "pub" (
OSSL_PKEY_PARAM_PUB_KEY)<octet string>β the public key value β¨ - "priv" (
OSSL_PKEY_PARAM_PRIV_KEY)<octet string>β the private key value π - "encoded-pub-key" (
OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY)<octet string>β used for getting and setting the encoding of a public key for the X25519 and X448 key types πΈ public keys are expected be encoded in a format as defined byRFC7748(yes, the manpage says "expected be", we're keeping it exactly like that, character for character, that's the rule π ).
π ED25519 and ED448 parameters
- "mandatory-digest" (
OSSL_PKEY_PARAM_MANDATORY_DIGEST)<UTF8 string>β the empty string, signifying that no digest may be specified π that's it, that's the whole parameter.
π¦ CONFORMING TO π¦
iconic standards behaviour, we love to see it π
π EXAMPLES π
an EVP_PKEY context can be obtained by calling β here's the whole squad π«Ά:
EVP_PKEY_CTX *pctx =
EVP_PKEY_CTX_new_from_name(NULL, "X25519", NULL);
EVP_PKEY_CTX *pctx =
EVP_PKEY_CTX_new_from_name(NULL, "X448", NULL);
EVP_PKEY_CTX *pctx =
EVP_PKEY_CTX_new_from_name(NULL, "ED25519", NULL);
EVP_PKEY_CTX *pctx =
EVP_PKEY_CTX_new_from_name(NULL, "ED448", NULL);
and an X25519 key can be generated like this β¨:
pkey = EVP_PKEY_Q_keygen(NULL, NULL, "X25519");
an X448, ED25519, or ED448 key can be generated likewise, fr fr π
πΈ SEE ALSO πΈ
go read these next bestie, they're all connected iykyk:
EVP_KEYMGMT(3)EVP_PKEY(3)provider-keymgmt(7)EVP_KEYEXCH-X25519(7)EVP_KEYEXCH-X448(7)EVP_SIGNATURE-ED25519(7)EVP_SIGNATURE-ED448(7)
π COPYRIGHT π
Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. π
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>. π
mwah π that's the whole page β sourced from OpenSSL 3.0.21, dated 2026-06-09, and it's the EVP_PKEY-X25519(7ossl) manpage. go slay your key exchange bestie π¦β¨
π¦ where this page comes from
- freebsd 14.5: base 14.5
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms