我正在尝试复制EOS的签名过程,该过程使用OpenSSL的ECDSA_sign
方法。
EOS使用secp256k1曲线进行签名。
ECDSA_sign
的参数之一是EC_KEY。我假设EC_KEY结构包含曲线的类型和私钥-但是如何创建EC_KEY结构以使其包含私钥?
就像比特币一样,密钥是用WIF编码的,我已经成功地将其转换为二进制(或十六进制,如果需要)。不过,我不知道该从哪里去。
我可以转换为bignum并让EC_KEY导入该私钥吗?我还有什么要做的吗?
答案 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);
(注意:以上内容未经测试,为清楚起见,我省略了所有应添加的错误检查代码)。