【问题标题】:How do I import an ECC private key into OpenSSL's EC_KEY?如何将 ECC 私钥导入 OpenSSL 的 EC_KEY?
【发布时间】:2018-08-14 12:50:53
【问题描述】:

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

EOS 使用 secp256k1 曲线进行签名。

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

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

我是否转换为 bignum,并通过 EC_KEY 导入该私钥?我还有什么要做的吗?

【问题讨论】:

    标签: openssl


    【解决方案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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2017-03-12
      • 2017-03-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多