如何将ECC私钥导入OpenSSL的EC_KEY?

时间:2018-08-14 12:50:53

标签: openssl

我正在尝试复制EOS的签名过程,该过程使用OpenSSL的ECDSA_sign方法。

EOS使用secp256k1曲线进行签名。

ECDSA_sign的参数之一是EC_KEY。我假设EC_KEY结构包含曲线的类型和私钥-但是如何创建EC_KEY结构以使其包含私钥?

就像比特币一样,密钥是用WIF编码的,我已经成功地将其转换为二进制(或十六进制,如果需要)。不过,我不知道该从哪里去。

我可以转换为bignum并让EC_KEY导入该私钥吗?我还有什么要做的吗?

1 个答案:

答案 0 :(得分:1)

OpenSSL不支持WIF格式。如果您可以将解码后的原始私钥转换成BIGNUM结构(称为priv_key),则应该可以执行以下操作:

EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp256k1);
EC_KEY *key = EC_KEY_new();
EC_POINT *pub_key = EC_POINT_new(group);

EC_KEY_set_group(key, group);
EC_KEY_set_private_key(key, priv_key);
EC_POINT_mul(group, pub_key, priv_key, NULL, NULL, NULL);
EC_KEY_set_public_key(key, pub_key);

(注意:以上内容未经测试,为清楚起见,我省略了所有应添加的错误检查代码)。