Code Bye

Openssl 怎么样获取ECC sm2证书公钥数据

本人现在通过调用x509系列API接口函数可以解析sm2证书,获取出证书的信息例如:序列号,CN值等,
但是获取公钥数据时出错。
直接上代码吧
EVP_PKEY * pubKey ;
X509 *x509Cert = NULL;
x509Cert = d2i_X509(NULL,usrCertificate,usrCertificateLen);
//获取证书版本,能正确获取到值
Version = X509_get_version(x509Cert); 
//这里省略一些解析证书的代码
//下面是获取公钥数据的代码
if ( x509Cert->cert_info == NULL)
    return ;
pubKey = X509_PUBKEY_get(x509Cert->cert_info->key); 这里获取到的pubKey为空,导致获取不到公钥数据

是不是这种解析方法有问题!
应该怎样获取到公钥数据呢?大家帮忙解决下吧,谢谢了!

解决方案

8

ecc的过程与rsa相比有很大的不同,ecc涉及到了很多额外的概念,例如group等等,另外ecc包含两套截然不同的机制ecdh ,ecdsa
struct ec_key_st {
int version;
EC_GROUP *group;
EC_POINT *pub_key;
BIGNUM     *priv_key;
unsigned int enc_flag;
point_conversion_form_t conv_form;
int     references;
EC_EXTRA_DATA *method_data;
} /* EC_KEY */;

2

本人最近也有这个问题,但说实话,ECC没人或没几个人能说的清楚。
网上的东西,都搬来搬去。
例如,最大的问题就是ECC算法的非对称加密解密。
网上根本没人谈及到过。

10

有两种方案,比较简单的一种是本人封个接口去cert_info的pub_key里读data解析,另一种就是通过get_pubkey接口了,不过这个需要加入sm2的曲线参数,算法oid也要加,原因是sm2和Openssl的ecc不太一样,中间还要改一些东西,一步一步的调试跟下来

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Openssl 怎么样获取ECC sm2证书公钥数据