Здесь есть пара неправильных вещей. Во-первых, это ключ с эллиптической кривой, поэтому попытка создать ключ RSA не сработает. Вам необходимо создать ключ EC .
Инициализатор ключа EC допускает несколько способов передачи ключа. К сожалению, ни один из них не соответствует точно, что у вас здесь. Вы можете перейти в форму PEM или форму DER, хотя. Форма PEM - это именно то, что у вас есть с добавленными строками BEGIN PUBLIC KEY
и END PUBLIC KEY
, поэтому это будет работать (аналогично тому, что вы пробовали, только с использованием правильного типа ключа):
key = OpenSSL::PKey::EC.new "-----BEGIN PUBLIC KEY-----\n#{public_key}\n-----END PUBLIC KEY-----\n"
Форма DER - это то, что у вас есть, но декодирована база 64, так что это также будет работать и может быть более удобным:
key = OpenSSL::PKey::EC.new(Base64.decode64(public_key))
Когда вы это сделаете, вы можете позвонить key.group.curve_name
, и вы увидите вторую проблему. Это простой ключ 256v1, , а не ключ secp128r2. Он не представляет точку на кривой secp128r2 и поэтому вызывает ошибку incompatible objects
, которую вы получаете. Убедитесь, что вы используете соответствующие типы ключей.