如何使用 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 个字节。
我需要用 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 个字节。