如何使用 25519 打开 SSL 1.1.1 ECDH

how to openSSL 1.1.1 ECDH with 25519

我需要用 25519 使用 openssl 实现 ecdh。

使用:

key = EC_KEY_new_by_curve_name(NID_X25519)

失败。

使用这个:

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);

似乎可以工作,但我不知道如何以未压缩的 bin 格式导出 public 密钥。或者如何导入另一边 public key.

有什么帮助吗?

可以使用 EVP_PKEY_new_raw_public_key() 函数从原始二进制格式导入对方的 public 密钥。此处的手册页:

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

以原始二进制格式导出 public 密钥有点棘手,因为没有执行此操作的函数。您可以使用此处描述的 i2d_PUBKEY() 以 SubjectPublicKeyInfo 格式执行此操作:

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

幸运的是,SubjectPublicKeyInfo 格式将原始 public 密钥作为其输出的最后 32 个字节。所以你可以使用 i2d_PUBKEY() 并且只使用最后的 32 个字节。