143: def self.read_keyblob(curve_name_in_type, buffer)
144: curve_name_in_key = buffer.read_string
145: unless curve_name_in_type == curve_name_in_key
146: raise Net::SSH::Exception, "curve name mismatched (`#{curve_name_in_key}' with `#{curve_name_in_type}')"
147: end
148: public_key_oct = buffer.read_string
149: begin
150: key = OpenSSL::PKey::EC.new(OpenSSL::PKey::EC::CurveNameAlias[curve_name_in_key])
151: group = key.group
152: point = OpenSSL::PKey::EC::Point.new(group, OpenSSL::BN.new(public_key_oct, 2))
153: key.public_key = point
154:
155: return key
156: rescue OpenSSL::PKey::ECError => e
157: raise NotImplementedError, "unsupported key type `#{type}'"
158: end
159:
160: end