how to openSSL 1.1.1 ECDH with 25519

2.9k views Asked by At

i need to implement ecdh with 25519 using openssl.

using:

key = EC_KEY_new_by_curve_name(NID_X25519)

fails.

using this:

EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(NID_X25519, NULL);
EVP_PKEY_keygen_init(pctx);
EVP_PKEY_keygen(pctx, &pkey);

seems to work but i have no idea how to export the public key in uncompressed bin format. or how to import the other sides public key.

any help?

1

There are 1 answers

17
Matt Caswell On BEST ANSWER

Importing the other side's public key from raw binary format can be done with the EVP_PKEY_new_raw_public_key() function. Man page here:

https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_new_raw_public_key.html

Exporting the public key in raw binary format is a little more tricky since there is no function to do it. You can do it in SubjectPublicKeyInfo format using i2d_PUBKEY() described here:

https://www.openssl.org/docs/man1.1.1/man3/i2d_PUBKEY.html

Fortunately the SubjectPublicKeyInfo format has the raw public key as the last 32 bytes of its output. So you can use i2d_PUBKEY() and just use the last the 32 bytes.