gpt4 book ai didi

openssl - 使用 openssl api 识别证书中的 EC 曲线

转载 作者:行者123 更新时间:2023-12-02 16:38:01 29 4
gpt4 key购买 nike

我试图在屏幕上显示一些证书信息,但用于 key 生成的曲线给我带来了麻烦。在 certificate example使用的曲线被正确识别为 prime256v1。不过,我想使用 OpenSsl api 获取此信息。什么函数可以完成这个任务?

我正在使用 ManagedOpenSsl,但这并不重要。问题是我可以找到解决我遇到的所有其他问题的 C 语言示例,但不能找到解决这个问题的示例。

最佳答案

OpenSSL wiki 有一个页面包含一些此类内容,地址为 Elliptic Curve Cryptography 。您需要的大部分 EC 功能都在 <openssl src dir>/crypto/ec/ec.h 中.

您必须使用 EVP_PKEY* pkey=X509_get_pubkey(x509) 从证书中提取公钥.

使用 EVP_PKEY_get_type(pkey) 检查 key 类型。它应该返回 EVP_PKEY_EC 。您需要写EVP_PKEY_get_type 。这是:

int EVP_PKEY_get_type(EVP_PKEY *pkey)
{
ASSERT(pkey);
if (!pkey)
return NID_undef;

return EVP_PKEY_type(pkey->type);
}

您可以使用 EC_KEY* key = EVP_PKEY_get1_EC_KEY(pkey) 获取 key 。因为它是get1 ,它会增加 EC_KEY* 上的引用计数。务必调用EC_KEY_free在上面。 (get0不需要需要免费)。

如果 OPENSSL_EC_NAMED_CURVE设置好后,就可以使用 EC_GROUP_get_curve_name 。它将返回所用曲线的NID(更准确地说,是域参数)。例如,prime256v1将返回NID_X9_62_prime256v1 .

否则,您需要获取域参数,例如 curve , G , h等一一与 EC_GROUP_get_curve_GFp (或EC_GROUP_get_curve_GF2m),EC_GROUP_get_order , 和 friend 。

OPENSSL_EC_NAMED_CURVE是一面旗帜。您可以使用 EC_GROUP_get_asn1_flag 获取标志并使用 flag & OPENSSL_EC_NAMED_CURVE 进行测试.

您可以在Named Curves处查看命名曲线和非命名曲线的示例。 。您很可能会得到一条命名曲线。对于 OpenSSL,省略 OPENSSL_EC_NAMED_CURVE标志导致握手失败。

关于openssl - 使用 openssl api 识别证书中的 EC 曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247371/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com