Я пытаюсь превратить известный открытый ключ в экземпляр OpenSSL::PKey::EC::Point
со следующим кодом:
require 'base64'
require 'openssl'
public = 'MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgAD5tgZhw82GpGYJYkWNgeDp/0OzT4y/YLS+tMpZeJ2VEQ='
decoded_public = Base64.encode64(public)
hex_string = decoded_public.each_byte.map { |b| b.to_s(16) }.join()
ec_group = OpenSSL::PKey::EC::Group.new('prime256v1')
key = OpenSSL::PKey::EC.new(ec_group)
bn = OpenSSL::BN.new(hex_string, 16)
point = OpenSSL::PKey::EC::Point.new(ec_group, bn)
Ошибка возникает в последней строке, выбрасывая:
`initialize': invalid encoding (OpenSSL::PKey::EC::Point::Error)
Я запускаю Base64.encode64
, а затем превращаю каждый байт в шестнадцатеричное представление, потому что при чтении вокруг него кажется, что шестнадцатеричные строки являются обычным способом создания нового BigNum.
Я предполагаю, что это то, что яя делаю что-то не так с информацией открытого ключа, потому что ec_group
создается без жалоб.