我有一个EC证书(签名算法是ECDSA),我想知道使用openssl api的EC密钥的长度。 现在,我可以从证书中获取EC_KEY结构,但我不知道EC_KEY中的哪个元素是键的长度以及如何获得它。
以下是EC_KEY的结构:
struct ec_key_st {
int version;
EC_GROUP *group;// used to represent the definition of an elliptic curve
EC_POINT *pub_key;//used to store the points on the elliptic curve
BIGNUM *priv_key;
unsigned int enc_flag;
point_conversion_form_t conv_form;
int references;
int flags;
EC_EXTRA_DATA *method_data;
} /* EC_KEY */;
请帮忙!
答案 0 :(得分:3)
ECC密钥大小由EC_GROUP
参数p
的大小定义。如果您的变量EC_KEY *
中有ec
,则可以使用
int bits = BN_num_bits(ec->group->p);
使用函数从EVP_KEY
结构或更好
int bits = EVP_PKEY_bits(EVP_PKEY *pkey);
编辑2018 : 使用OpenSSL 1.1.0+不透明结构,我们不能再直接访问结构元素,但我们需要使用特定的功能(在旧的OpenSSL 1.0.x版本中不可用):
EC_GROUP *g = EC_KEY_get0_group(ec);
int bits = EC_GROUP_order_bits(g);
但最便携的方式是使用EC_GROUP_get_degree()
,这在所有OpenSSL版本中都可用(目前为1.0.2到1.1.1):
EC_GROUP *g = EC_KEY_get0_group(ec);
int bits = EC_GROUP_get_degree(g);