summaryrefslogtreecommitdiff
path: root/lib/net/ssh/transport/openssl.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/ssh/transport/openssl.rb')
-rw-r--r--lib/net/ssh/transport/openssl.rb14
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/net/ssh/transport/openssl.rb b/lib/net/ssh/transport/openssl.rb
index a398326..40561fb 100644
--- a/lib/net/ssh/transport/openssl.rb
+++ b/lib/net/ssh/transport/openssl.rb
@@ -159,10 +159,18 @@ module OpenSSL
public_key_oct = buffer.read_string
begin
- key = OpenSSL::PKey::EC.new(OpenSSL::PKey::EC::CurveNameAlias[curve_name_in_key])
- group = key.group
+ curvename = OpenSSL::PKey::EC::CurveNameAlias[curve_name_in_key]
+ group = OpenSSL::PKey::EC::Group.new(curvename)
point = OpenSSL::PKey::EC::Point.new(group, OpenSSL::BN.new(public_key_oct, 2))
- key.public_key = point
+ asn1 = OpenSSL::ASN1::Sequence([
+ OpenSSL::ASN1::Sequence([
+ OpenSSL::ASN1::ObjectId("id-ecPublicKey"),
+ OpenSSL::ASN1::ObjectId(curvename)
+ ]),
+ OpenSSL::ASN1::BitString(point.to_octet_string(:uncompressed))
+ ])
+
+ key = OpenSSL::PKey::EC.new(asn1.to_der)
return key
rescue OpenSSL::PKey::ECError