从C中的.pem文件中读取EC公钥

时间:2014-07-25 20:08:31

标签: c openssl public-key elliptic-curve

我使用以下方式生成了EC公钥和私钥对:

openssl ecparam -name prime256v1 -genkey -noout -out ecprikey.pem
openssl ec -in ecprikey.pem -pubout -out ecpubkey.pem

我想将公钥读入C中的字节数组中。我该怎么做?刚从文件中读取?或OpenSSL提供什么?谢谢你!

1 个答案:

答案 0 :(得分:2)

  

我想将公钥读入C ...中的字节数组

嗯,磁盘上的密钥可能是PEM编码的。因为它是一个公钥,它可能具有-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----的封装前和封装后的边界。你可以像使用标准库函数那样阅读它。

您还可以使用PEM_read_PUBKEY阅读公钥。该函数返回EVP_PKEY*。我相信您可以使用以下内容将EVP_PKEY*转换为EC_KEY*

EC_KEY* ecKey = EVP_PKEY_get1_EC_KEY(pKey);

上面的get1表示密钥上的引用计数已被提升(与get0相对)。完成后请务必致电EC_KEY_free

我不确定在给定EVP_PKEY*EC_KEY*的情况下如何将公钥读入数组。至少有两条信息:曲线(如secp256k1)和公共元素(曲线上的一个点,由(x,y)坐标组成)。如果指定的曲线(即OID)存在(即缺少OPENSSL_EC_NAMED_CURVE标志),那么您拥有所有域参数,如p,{ {1}},ab等。也许您应该查看ASN.1 / DER编码。我认为这就是你要获得的壁橱。

相关问题