summaryrefslogtreecommitdiff
path: root/lib/net/ssh/buffer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/ssh/buffer.rb')
-rw-r--r--lib/net/ssh/buffer.rb31
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/net/ssh/buffer.rb b/lib/net/ssh/buffer.rb
index 8a67d3e..42cc892 100644
--- a/lib/net/ssh/buffer.rb
+++ b/lib/net/ssh/buffer.rb
@@ -301,19 +301,24 @@ module Net
when /^(.*)-cert-v01@openssh\.com$/
key = Net::SSH::Authentication::Certificate.read_certblob(self, $1)
when /^ssh-dss$/
- key = OpenSSL::PKey::DSA.new
- if key.respond_to?(:set_pqg)
- key.set_pqg(read_bignum, read_bignum, read_bignum)
- else
- key.p = read_bignum
- key.q = read_bignum
- key.g = read_bignum
- end
- if key.respond_to?(:set_key)
- key.set_key(read_bignum, nil)
- else
- key.pub_key = read_bignum
- end
+ p = read_bignum
+ q = read_bignum
+ g = read_bignum
+ pub_key = read_bignum
+
+ asn1 = OpenSSL::ASN1::Sequence.new([
+ OpenSSL::ASN1::Sequence.new([
+ OpenSSL::ASN1::ObjectId.new('DSA'),
+ OpenSSL::ASN1::Sequence.new([
+ OpenSSL::ASN1::Integer.new(p),
+ OpenSSL::ASN1::Integer.new(q),
+ OpenSSL::ASN1::Integer.new(g)
+ ]),
+ ]),
+ OpenSSL::ASN1::BitString.new(OpenSSL::ASN1::Integer.new(pub_key).to_der)
+ ])
+
+ key = OpenSSL::PKey::DSA.new(asn1.to_der)
when /^ssh-rsa$/
e = read_bignum
n = read_bignum