net-ssh 5.2.0 → 6.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +7 -4
- data/.rubocop_todo.yml +389 -379
- data/.travis.yml +13 -14
- data/CHANGES.txt +7 -0
- data/README.md +286 -0
- data/Rakefile +1 -2
- data/appveyor.yml +4 -2
- data/lib/net/ssh/authentication/key_manager.rb +7 -3
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +3 -1
- data/lib/net/ssh/authentication/pub_key_fingerprint.rb +0 -1
- data/lib/net/ssh/authentication/session.rb +2 -6
- data/lib/net/ssh/buffer.rb +1 -9
- data/lib/net/ssh/config.rb +25 -10
- data/lib/net/ssh/connection/channel.rb +7 -3
- data/lib/net/ssh/connection/session.rb +7 -3
- data/lib/net/ssh/key_factory.rb +6 -8
- data/lib/net/ssh/known_hosts.rb +26 -29
- data/lib/net/ssh/service/forward.rb +2 -1
- data/lib/net/ssh/test.rb +3 -2
- data/lib/net/ssh/transport/algorithms.rb +67 -42
- data/lib/net/ssh/transport/cipher_factory.rb +11 -27
- data/lib/net/ssh/transport/constants.rb +10 -6
- data/lib/net/ssh/transport/ctr.rb +1 -7
- data/lib/net/ssh/transport/hmac.rb +15 -13
- data/lib/net/ssh/transport/hmac/abstract.rb +16 -0
- data/lib/net/ssh/transport/hmac/sha2_256.rb +7 -11
- data/lib/net/ssh/transport/hmac/sha2_256_96.rb +4 -8
- data/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
- data/lib/net/ssh/transport/hmac/sha2_512.rb +6 -9
- data/lib/net/ssh/transport/hmac/sha2_512_96.rb +4 -8
- data/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
- data/lib/net/ssh/transport/kex.rb +13 -11
- data/lib/net/ssh/transport/kex/abstract.rb +123 -0
- data/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
- data/lib/net/ssh/transport/kex/curve25519_sha256.rb +38 -0
- data/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb +1 -15
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +9 -118
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +0 -6
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +5 -9
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +18 -79
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +5 -4
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +5 -4
- data/lib/net/ssh/transport/openssl.rb +104 -107
- data/lib/net/ssh/transport/packet_stream.rb +44 -10
- data/lib/net/ssh/transport/state.rb +1 -1
- data/lib/net/ssh/version.rb +3 -3
- data/net-ssh.gemspec +8 -6
- metadata +35 -16
- metadata.gz.sig +0 -0
- data/Gemfile.noed25519.lock +0 -41
- data/README.rdoc +0 -194
- data/support/arcfour_check.rb +0 -20
@@ -1,8 +1,9 @@
|
|
1
|
-
|
2
|
-
module SSH
|
3
|
-
module Transport
|
4
|
-
module Kex
|
1
|
+
require 'net/ssh/transport/kex/ecdh_sha2_nistp256'
|
5
2
|
|
3
|
+
module Net
|
4
|
+
module SSH
|
5
|
+
module Transport
|
6
|
+
module Kex
|
6
7
|
# A key-exchange service implementing the "ecdh-sha2-nistp256"
|
7
8
|
# key-exchange algorithm. (defined in RFC 5656)
|
8
9
|
class EcdhSHA2NistP384 < EcdhSHA2NistP256
|
@@ -1,8 +1,9 @@
|
|
1
|
-
|
2
|
-
module SSH
|
3
|
-
module Transport
|
4
|
-
module Kex
|
1
|
+
require 'net/ssh/transport/kex/ecdh_sha2_nistp256'
|
5
2
|
|
3
|
+
module Net
|
4
|
+
module SSH
|
5
|
+
module Transport
|
6
|
+
module Kex
|
6
7
|
# A key-exchange service implementing the "ecdh-sha2-nistp521"
|
7
8
|
# key-exchange algorithm. (defined in RFC 5656)
|
8
9
|
class EcdhSHA2NistP521 < EcdhSHA2NistP256
|
@@ -98,9 +98,9 @@ module OpenSSL
|
|
98
98
|
sig_r = sig[0,20].unpack("H*")[0].to_i(16)
|
99
99
|
sig_s = sig[20,20].unpack("H*")[0].to_i(16)
|
100
100
|
a1sig = OpenSSL::ASN1::Sequence([
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
OpenSSL::ASN1::Integer(sig_r),
|
102
|
+
OpenSSL::ASN1::Integer(sig_s)
|
103
|
+
])
|
104
104
|
return verify(OpenSSL::Digest::SHA1.new, a1sig.to_der, data)
|
105
105
|
end
|
106
106
|
|
@@ -121,132 +121,129 @@ module OpenSSL
|
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
begin
|
146
|
-
key = OpenSSL::PKey::EC.new(OpenSSL::PKey::EC::CurveNameAlias[curve_name_in_key])
|
147
|
-
group = key.group
|
148
|
-
point = OpenSSL::PKey::EC::Point.new(group, OpenSSL::BN.new(public_key_oct, 2))
|
149
|
-
key.public_key = point
|
150
|
-
|
151
|
-
return key
|
152
|
-
rescue OpenSSL::PKey::ECError
|
153
|
-
raise NotImplementedError, "unsupported key type `#{type}'"
|
154
|
-
end
|
124
|
+
# This class is originally defined in the OpenSSL module. As needed, methods
|
125
|
+
# have been added to it by the Net::SSH module for convenience in dealing
|
126
|
+
# with SSH functionality.
|
127
|
+
class EC
|
128
|
+
CurveNameAlias = {
|
129
|
+
'nistp256' => 'prime256v1',
|
130
|
+
'nistp384' => 'secp384r1',
|
131
|
+
'nistp521' => 'secp521r1'
|
132
|
+
}.freeze
|
133
|
+
|
134
|
+
CurveNameAliasInv = {
|
135
|
+
'prime256v1' => 'nistp256',
|
136
|
+
'secp384r1' => 'nistp384',
|
137
|
+
'secp521r1' => 'nistp521'
|
138
|
+
}.freeze
|
139
|
+
|
140
|
+
def self.read_keyblob(curve_name_in_type, buffer)
|
141
|
+
curve_name_in_key = buffer.read_string
|
142
|
+
|
143
|
+
unless curve_name_in_type == curve_name_in_key
|
144
|
+
raise Net::SSH::Exception, "curve name mismatched (`#{curve_name_in_key}' with `#{curve_name_in_type}')"
|
155
145
|
end
|
156
146
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
147
|
+
public_key_oct = buffer.read_string
|
148
|
+
begin
|
149
|
+
key = OpenSSL::PKey::EC.new(OpenSSL::PKey::EC::CurveNameAlias[curve_name_in_key])
|
150
|
+
group = key.group
|
151
|
+
point = OpenSSL::PKey::EC::Point.new(group, OpenSSL::BN.new(public_key_oct, 2))
|
152
|
+
key.public_key = point
|
162
153
|
|
163
|
-
|
164
|
-
|
154
|
+
return key
|
155
|
+
rescue OpenSSL::PKey::ECError
|
156
|
+
raise NotImplementedError, "unsupported key type `#{type}'"
|
165
157
|
end
|
158
|
+
end
|
166
159
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
160
|
+
# Returns the description of this key type used by the
|
161
|
+
# SSH2 protocol, like "ecdsa-sha2-nistp256"
|
162
|
+
def ssh_type
|
163
|
+
"ecdsa-sha2-#{CurveNameAliasInv[group.curve_name]}"
|
164
|
+
end
|
165
|
+
|
166
|
+
def ssh_signature_type
|
167
|
+
ssh_type
|
168
|
+
end
|
169
|
+
|
170
|
+
def digester
|
171
|
+
if group.curve_name =~ /^[a-z]+(\d+)\w*\z/
|
172
|
+
curve_size = Regexp.last_match(1).to_i
|
173
|
+
if curve_size <= 256
|
178
174
|
OpenSSL::Digest::SHA256.new
|
175
|
+
elsif curve_size <= 384
|
176
|
+
OpenSSL::Digest::SHA384.new
|
177
|
+
else
|
178
|
+
OpenSSL::Digest::SHA512.new
|
179
179
|
end
|
180
|
+
else
|
181
|
+
OpenSSL::Digest::SHA256.new
|
180
182
|
end
|
181
|
-
|
183
|
+
end
|
184
|
+
private :digester
|
182
185
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
186
|
+
# Converts the key to a blob, according to the SSH2 protocol.
|
187
|
+
def to_blob
|
188
|
+
@blob ||= Net::SSH::Buffer.from(:string, ssh_type,
|
189
|
+
:string, CurveNameAliasInv[group.curve_name],
|
190
|
+
:mstring, public_key.to_bn.to_s(2)).to_s
|
191
|
+
@blob
|
192
|
+
end
|
190
193
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
194
|
+
# Verifies the given signature matches the given data.
|
195
|
+
def ssh_do_verify(sig, data)
|
196
|
+
digest = digester.digest(data)
|
197
|
+
a1sig = nil
|
195
198
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
+
begin
|
200
|
+
sig_r_len = sig[0, 4].unpack('H*')[0].to_i(16)
|
201
|
+
sig_l_len = sig[4 + sig_r_len, 4].unpack('H*')[0].to_i(16)
|
199
202
|
|
200
|
-
|
201
|
-
|
203
|
+
sig_r = sig[4, sig_r_len].unpack('H*')[0]
|
204
|
+
sig_s = sig[4 + sig_r_len + 4, sig_l_len].unpack('H*')[0]
|
202
205
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
206
|
+
a1sig = OpenSSL::ASN1::Sequence([
|
207
|
+
OpenSSL::ASN1::Integer(sig_r.to_i(16)),
|
208
|
+
OpenSSL::ASN1::Integer(sig_s.to_i(16))
|
209
|
+
])
|
210
|
+
rescue StandardError
|
211
|
+
end
|
209
212
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
end
|
213
|
+
if a1sig.nil?
|
214
|
+
return false
|
215
|
+
else
|
216
|
+
dsa_verify_asn1(digest, a1sig.to_der)
|
215
217
|
end
|
218
|
+
end
|
219
|
+
|
220
|
+
# Returns the signature for the given data.
|
221
|
+
def ssh_do_sign(data)
|
222
|
+
digest = digester.digest(data)
|
223
|
+
sig = dsa_sign_asn1(digest)
|
224
|
+
a1sig = OpenSSL::ASN1.decode(sig)
|
216
225
|
|
217
|
-
|
218
|
-
|
219
|
-
digest = digester.digest(data)
|
220
|
-
sig = dsa_sign_asn1(digest)
|
221
|
-
a1sig = OpenSSL::ASN1.decode(sig)
|
226
|
+
sig_r = a1sig.value[0].value
|
227
|
+
sig_s = a1sig.value[1].value
|
222
228
|
|
223
|
-
|
224
|
-
|
229
|
+
Net::SSH::Buffer.from(:bignum, sig_r, :bignum, sig_s).to_s
|
230
|
+
end
|
225
231
|
|
226
|
-
|
232
|
+
class Point
|
233
|
+
# Returns the description of this key type used by the
|
234
|
+
# SSH2 protocol, like "ecdsa-sha2-nistp256"
|
235
|
+
def ssh_type
|
236
|
+
"ecdsa-sha2-#{CurveNameAliasInv[group.curve_name]}"
|
227
237
|
end
|
228
238
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
# Converts the key to a blob, according to the SSH2 protocol.
|
237
|
-
def to_blob
|
238
|
-
@blob ||= Net::SSH::Buffer.from(:string, ssh_type,
|
239
|
-
:string, CurveNameAliasInv[self.group.curve_name],
|
240
|
-
:mstring, self.to_bn.to_s(2)).to_s
|
241
|
-
@blob
|
242
|
-
end
|
239
|
+
# Converts the key to a blob, according to the SSH2 protocol.
|
240
|
+
def to_blob
|
241
|
+
@blob ||= Net::SSH::Buffer.from(:string, ssh_type,
|
242
|
+
:string, CurveNameAliasInv[group.curve_name],
|
243
|
+
:mstring, to_bn.to_s(2)).to_s
|
244
|
+
@blob
|
243
245
|
end
|
244
246
|
end
|
245
|
-
else
|
246
|
-
class OpenSSL::PKey::ECError < RuntimeError
|
247
|
-
# for compatibility with interpreters
|
248
|
-
# without EC support (i.e. JRuby)
|
249
|
-
end
|
250
247
|
end
|
251
248
|
end
|
252
249
|
end
|
@@ -130,7 +130,7 @@ module Net
|
|
130
130
|
payload = client.compress(payload)
|
131
131
|
|
132
132
|
# the length of the packet, minus the padding
|
133
|
-
actual_length = 4 + payload.bytesize + 1
|
133
|
+
actual_length = (client.hmac.etm ? 0 : 4) + payload.bytesize + 1
|
134
134
|
|
135
135
|
# compute the padding length
|
136
136
|
padding_length = client.block_size - (actual_length % client.block_size)
|
@@ -146,11 +146,32 @@ module Net
|
|
146
146
|
|
147
147
|
padding = Array.new(padding_length) { rand(256) }.pack("C*")
|
148
148
|
|
149
|
-
|
150
|
-
|
149
|
+
if client.hmac.etm
|
150
|
+
debug { "using encrypt-then-mac" }
|
151
151
|
|
152
|
-
|
153
|
-
|
152
|
+
# Encrypt padding_length, payload, and padding. Take MAC
|
153
|
+
# from the unencrypted packet_lenght and the encrypted
|
154
|
+
# data.
|
155
|
+
length_data = [packet_length].pack("N")
|
156
|
+
|
157
|
+
unencrypted_data = [padding_length, payload, padding].pack("CA*A*")
|
158
|
+
|
159
|
+
encrypted_data = client.update_cipher(unencrypted_data) << client.final_cipher
|
160
|
+
|
161
|
+
mac_data = length_data + encrypted_data
|
162
|
+
|
163
|
+
mac = client.hmac.digest([client.sequence_number, mac_data].pack("NA*"))
|
164
|
+
|
165
|
+
message = mac_data + mac
|
166
|
+
else
|
167
|
+
unencrypted_data = [packet_length, padding_length, payload, padding].pack("NCA*A*")
|
168
|
+
|
169
|
+
mac = client.hmac.digest([client.sequence_number, unencrypted_data].pack("NA*"))
|
170
|
+
|
171
|
+
encrypted_data = client.update_cipher(unencrypted_data) << client.final_cipher
|
172
|
+
|
173
|
+
message = encrypted_data + mac
|
174
|
+
end
|
154
175
|
|
155
176
|
debug { "queueing packet nr #{client.sequence_number} type #{payload.getbyte(0)} len #{packet_length}" }
|
156
177
|
enqueue(message)
|
@@ -196,17 +217,25 @@ module Net
|
|
196
217
|
# algorithms specified in the server state object, and returned as a
|
197
218
|
# new Packet object.
|
198
219
|
def poll_next_packet
|
220
|
+
aad_length = server.hmac.etm ? 4 : 0
|
221
|
+
|
199
222
|
if @packet.nil?
|
200
223
|
minimum = server.block_size < 4 ? 4 : server.block_size
|
201
224
|
return nil if available < minimum
|
202
|
-
data = read_available(minimum)
|
225
|
+
data = read_available(minimum + aad_length)
|
203
226
|
|
204
227
|
# decipher it
|
205
|
-
|
206
|
-
|
228
|
+
if server.hmac.etm
|
229
|
+
@packet_length = data.unpack("N").first
|
230
|
+
@mac_data = data
|
231
|
+
@packet = Net::SSH::Buffer.new(server.update_cipher(data[aad_length..-1]))
|
232
|
+
else
|
233
|
+
@packet = Net::SSH::Buffer.new(server.update_cipher(data))
|
234
|
+
@packet_length = @packet.read_long
|
235
|
+
end
|
207
236
|
end
|
208
237
|
|
209
|
-
need = @packet_length + 4 - server.block_size
|
238
|
+
need = @packet_length + 4 - aad_length - server.block_size
|
210
239
|
raise Net::SSH::Exception, "padding error, need #{need} block #{server.block_size}" if need % server.block_size != 0
|
211
240
|
|
212
241
|
return nil if available < need + server.hmac.mac_length
|
@@ -214,6 +243,7 @@ module Net
|
|
214
243
|
if need > 0
|
215
244
|
# read the remainder of the packet and decrypt it.
|
216
245
|
data = read_available(need)
|
246
|
+
@mac_data += data if server.hmac.etm
|
217
247
|
@packet.append(server.update_cipher(data))
|
218
248
|
end
|
219
249
|
|
@@ -226,7 +256,11 @@ module Net
|
|
226
256
|
|
227
257
|
payload = @packet.read(@packet_length - padding_length - 1)
|
228
258
|
|
229
|
-
my_computed_hmac = server.hmac.
|
259
|
+
my_computed_hmac = if server.hmac.etm
|
260
|
+
server.hmac.digest([server.sequence_number, @mac_data].pack("NA*"))
|
261
|
+
else
|
262
|
+
server.hmac.digest([server.sequence_number, @packet.content].pack("NA*"))
|
263
|
+
end
|
230
264
|
raise Net::SSH::Exception, "corrupted hmac detected" if real_hmac != my_computed_hmac
|
231
265
|
|
232
266
|
# try to decompress the payload, in case compression is active
|
data/lib/net/ssh/version.rb
CHANGED
@@ -46,17 +46,17 @@ module Net
|
|
46
46
|
end
|
47
47
|
|
48
48
|
# The major component of this version of the Net::SSH library
|
49
|
-
MAJOR =
|
49
|
+
MAJOR = 6
|
50
50
|
|
51
51
|
# The minor component of this version of the Net::SSH library
|
52
|
-
MINOR =
|
52
|
+
MINOR = 0
|
53
53
|
|
54
54
|
# The tiny component of this version of the Net::SSH library
|
55
55
|
TINY = 0
|
56
56
|
|
57
57
|
# The prerelease component of this version of the Net::SSH library
|
58
58
|
# nil allowed
|
59
|
-
PRE =
|
59
|
+
PRE = "beta1"
|
60
60
|
|
61
61
|
# The current version of the Net::SSH library as a Version instance
|
62
62
|
CURRENT = new(*[MAJOR, MINOR, TINY, PRE].compact)
|
data/net-ssh.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
require_relative 'lib/net/ssh/version'
|
3
2
|
|
4
3
|
Gem::Specification.new do |spec|
|
@@ -16,11 +15,14 @@ Gem::Specification.new do |spec|
|
|
16
15
|
spec.description = %q{Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.}
|
17
16
|
spec.homepage = "https://github.com/net-ssh/net-ssh"
|
18
17
|
spec.license = "MIT"
|
19
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
18
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3")
|
19
|
+
spec.metadata = {
|
20
|
+
"changelog_uri" => "https://github.com/net-ssh/net-ssh/blob/master/CHANGES.txt"
|
21
|
+
}
|
20
22
|
|
21
23
|
spec.extra_rdoc_files = [
|
22
24
|
"LICENSE.txt",
|
23
|
-
"README.
|
25
|
+
"README.md"
|
24
26
|
]
|
25
27
|
|
26
28
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
@@ -31,12 +33,12 @@ Gem::Specification.new do |spec|
|
|
31
33
|
unless ENV['NET_SSH_NO_ED25519']
|
32
34
|
spec.add_development_dependency("bcrypt_pbkdf", "~> 1.0") unless RUBY_PLATFORM == "java"
|
33
35
|
spec.add_development_dependency("ed25519", "~> 1.2")
|
36
|
+
spec.add_development_dependency('x25519') unless RUBY_PLATFORM == 'java'
|
34
37
|
end
|
35
38
|
|
36
|
-
spec.add_development_dependency "bundler", "
|
37
|
-
|
39
|
+
spec.add_development_dependency "bundler", ">= 1.17"
|
38
40
|
spec.add_development_dependency "minitest", "~> 5.10"
|
39
41
|
spec.add_development_dependency "mocha", ">= 1.2.1"
|
40
42
|
spec.add_development_dependency "rake", "~> 12.0"
|
41
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
43
|
+
spec.add_development_dependency "rubocop", "~> 0.74.0"
|
42
44
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamis Buck
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
+MqVFjDxsJA7cDfACke51RypSH1gZoPjzoW6w0sMRAzZT8hU1eGyqtNuBiSZ1UKv
|
32
32
|
B/ztNLEP0OWhpj/NZ1fnGRvo/T0=
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2019-
|
34
|
+
date: 2019-10-25 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bcrypt_pbkdf
|
@@ -61,20 +61,34 @@ dependencies:
|
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '1.2'
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: x25519
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
64
78
|
- !ruby/object:Gem::Dependency
|
65
79
|
name: bundler
|
66
80
|
requirement: !ruby/object:Gem::Requirement
|
67
81
|
requirements:
|
68
|
-
- - "
|
82
|
+
- - ">="
|
69
83
|
- !ruby/object:Gem::Version
|
70
|
-
version: '1.
|
84
|
+
version: '1.17'
|
71
85
|
type: :development
|
72
86
|
prerelease: false
|
73
87
|
version_requirements: !ruby/object:Gem::Requirement
|
74
88
|
requirements:
|
75
|
-
- - "
|
89
|
+
- - ">="
|
76
90
|
- !ruby/object:Gem::Version
|
77
|
-
version: '1.
|
91
|
+
version: '1.17'
|
78
92
|
- !ruby/object:Gem::Dependency
|
79
93
|
name: minitest
|
80
94
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,14 +137,14 @@ dependencies:
|
|
123
137
|
requirements:
|
124
138
|
- - "~>"
|
125
139
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0.
|
140
|
+
version: 0.74.0
|
127
141
|
type: :development
|
128
142
|
prerelease: false
|
129
143
|
version_requirements: !ruby/object:Gem::Requirement
|
130
144
|
requirements:
|
131
145
|
- - "~>"
|
132
146
|
- !ruby/object:Gem::Version
|
133
|
-
version: 0.
|
147
|
+
version: 0.74.0
|
134
148
|
description: 'Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It
|
135
149
|
allows you to write programs that invoke and interact with processes on remote servers,
|
136
150
|
via SSH2.'
|
@@ -140,7 +154,7 @@ executables: []
|
|
140
154
|
extensions: []
|
141
155
|
extra_rdoc_files:
|
142
156
|
- LICENSE.txt
|
143
|
-
- README.
|
157
|
+
- README.md
|
144
158
|
files:
|
145
159
|
- ".gitignore"
|
146
160
|
- ".rubocop.yml"
|
@@ -149,11 +163,10 @@ files:
|
|
149
163
|
- CHANGES.txt
|
150
164
|
- Gemfile
|
151
165
|
- Gemfile.noed25519
|
152
|
-
- Gemfile.noed25519.lock
|
153
166
|
- ISSUE_TEMPLATE.md
|
154
167
|
- LICENSE.txt
|
155
168
|
- Manifest
|
156
|
-
- README.
|
169
|
+
- README.md
|
157
170
|
- Rakefile
|
158
171
|
- THANKS.txt
|
159
172
|
- appveyor.yml
|
@@ -220,10 +233,16 @@ files:
|
|
220
233
|
- lib/net/ssh/transport/hmac/sha1_96.rb
|
221
234
|
- lib/net/ssh/transport/hmac/sha2_256.rb
|
222
235
|
- lib/net/ssh/transport/hmac/sha2_256_96.rb
|
236
|
+
- lib/net/ssh/transport/hmac/sha2_256_etm.rb
|
223
237
|
- lib/net/ssh/transport/hmac/sha2_512.rb
|
224
238
|
- lib/net/ssh/transport/hmac/sha2_512_96.rb
|
239
|
+
- lib/net/ssh/transport/hmac/sha2_512_etm.rb
|
225
240
|
- lib/net/ssh/transport/identity_cipher.rb
|
226
241
|
- lib/net/ssh/transport/kex.rb
|
242
|
+
- lib/net/ssh/transport/kex/abstract.rb
|
243
|
+
- lib/net/ssh/transport/kex/abstract5656.rb
|
244
|
+
- lib/net/ssh/transport/kex/curve25519_sha256.rb
|
245
|
+
- lib/net/ssh/transport/kex/curve25519_sha256_loader.rb
|
227
246
|
- lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb
|
228
247
|
- lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb
|
229
248
|
- lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb
|
@@ -244,12 +263,12 @@ files:
|
|
244
263
|
- lib/net/ssh/version.rb
|
245
264
|
- net-ssh-public_cert.pem
|
246
265
|
- net-ssh.gemspec
|
247
|
-
- support/arcfour_check.rb
|
248
266
|
- support/ssh_tunnel_bug.rb
|
249
267
|
homepage: https://github.com/net-ssh/net-ssh
|
250
268
|
licenses:
|
251
269
|
- MIT
|
252
|
-
metadata:
|
270
|
+
metadata:
|
271
|
+
changelog_uri: https://github.com/net-ssh/net-ssh/blob/master/CHANGES.txt
|
253
272
|
post_install_message:
|
254
273
|
rdoc_options: []
|
255
274
|
require_paths:
|
@@ -258,12 +277,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
258
277
|
requirements:
|
259
278
|
- - ">="
|
260
279
|
- !ruby/object:Gem::Version
|
261
|
-
version: 2.
|
280
|
+
version: '2.3'
|
262
281
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
263
282
|
requirements:
|
264
|
-
- - "
|
283
|
+
- - ">"
|
265
284
|
- !ruby/object:Gem::Version
|
266
|
-
version:
|
285
|
+
version: 1.3.1
|
267
286
|
requirements: []
|
268
287
|
rubyforge_project:
|
269
288
|
rubygems_version: 2.6.8
|