1

我需要使用 openssl 用 25519 实现 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 格式导出公钥。或者如何导入对方公钥。

有什么帮助吗?

4

1 回答 1

3

可以使用 EVP_PKEY_new_raw_public_key() 函数从原始二进制格式导入对方的公钥。手册页在这里:

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

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

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

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

于 2018-05-15T14:19:37.517 回答