summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net/ssh/buffer.rb31
-rw-r--r--test/test_buffer.rb28
2 files changed, 36 insertions, 23 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
diff --git a/test/test_buffer.rb b/test/test_buffer.rb
index b6968bb..1ff2028 100644
--- a/test/test_buffer.rb
+++ b/test/test_buffer.rb
@@ -319,16 +319,24 @@ class TestBuffer < NetSSHTest
def test_write_dss_key_should_write_argument_to_end_of_buffer
buffer = new("start")
- key = OpenSSL::PKey::DSA.new
- if key.respond_to?(:set_pqg)
- key.set_pqg(0xffeeddccbbaa9988, 0x7766554433221100, 0xffddbb9977553311)
- key.set_key(0xeeccaa8866442200, nil)
- else
- key.p = 0xffeeddccbbaa9988
- key.q = 0x7766554433221100
- key.g = 0xffddbb9977553311
- key.pub_key = 0xeeccaa8866442200
- end
+ p = 0xffeeddccbbaa9988
+ q = 0x7766554433221100
+ g = 0xffddbb9977553311
+ pub_key = 0xeeccaa8866442200
+
+ 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)
buffer.write_key(key)
assert_equal "start\0\0\0\7ssh-dss\0\0\0\011\0\xff\xee\xdd\xcc\xbb\xaa\x99\x88\0\0\0\010\x77\x66\x55\x44\x33\x22\x11\x00\0\0\0\011\0\xff\xdd\xbb\x99\x77\x55\x33\x11\0\0\0\011\0\xee\xcc\xaa\x88\x66\x44\x22\x00", buffer.to_s