我使用以下方式生成了EC公钥和私钥对:
openssl ecparam -name prime256v1 -genkey -noout -out ecprikey.pem
openssl ec -in ecprikey.pem -pubout -out ecpubkey.pem
我想将公钥读入C中的字节数组中。我该怎么做?刚从文件中读取?或OpenSSL提供什么?谢谢你!
答案 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}},a
,b
等。也许您应该查看ASN.1 / DER编码。我认为这就是你要获得的壁橱。