我正在使用Ruby 2.5.x OpenSSL库来使用Elliptic Curves。我可以使用
轻松生成私钥和公钥对curve = OpenSSL::PKey::EC.new('secp256k1')
curve.generate_key
但是给定私钥我想重新生成公钥。
我知道OpenSSL可以做到这一点,因为命令行允许你这样做,而Ruby比特币项目也可以做到这一点。但Ruby比特币项目有自己的使用FFI的OpenSSL接口,而不是Ruby提供的接口。
Ruby 2.5.x openssl库是否暴露了足够的OpenSSL接口以便能够从私钥生成椭圆曲线公钥,或者它可以但是它没有记录?
答案 0 :(得分:2)
Ruby OpenSSL绑定不允许您直接从PKey::EC
对象获取公钥,但是它们确实暴露了足以自己进行计算,这很简单。
给定私钥作为OpenSSL:BN
对象,我们可以像这样生成:
example_key = OpenSSL::PKey::EC.new('secp256k1').generate_key
private_key = example_key.private_key
我们可以通过将组基点(即生成器)乘以私钥来计算公钥:
group = OpenSSL::PKey::EC::Group.new('secp256k1')
public_key = group.generator.mul(private_key)
公钥是OpenSSL::PKey::EC::Point
。您可以与原始版本进行比较,看是否相同:
puts example_key.public_key == public_key # => true
答案 1 :(得分:0)
如果有人也有兴趣以pem格式获取公钥:)
const Queue = require("../queue/queue");
const connectDB = require("../../config/db");
const constants = require("../constants");
connectDB();