sonixlabs-net-ssh 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. data/CHANGELOG.rdoc +262 -0
  2. data/Manifest +121 -0
  3. data/README.rdoc +184 -0
  4. data/Rakefile +86 -0
  5. data/Rudyfile +96 -0
  6. data/THANKS.rdoc +19 -0
  7. data/lib/net/ssh.rb +223 -0
  8. data/lib/net/ssh/authentication/agent.rb +179 -0
  9. data/lib/net/ssh/authentication/constants.rb +18 -0
  10. data/lib/net/ssh/authentication/key_manager.rb +253 -0
  11. data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  12. data/lib/net/ssh/authentication/methods/hostbased.rb +75 -0
  13. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +70 -0
  14. data/lib/net/ssh/authentication/methods/password.rb +43 -0
  15. data/lib/net/ssh/authentication/methods/publickey.rb +96 -0
  16. data/lib/net/ssh/authentication/pageant.rb +264 -0
  17. data/lib/net/ssh/authentication/session.rb +146 -0
  18. data/lib/net/ssh/buffer.rb +340 -0
  19. data/lib/net/ssh/buffered_io.rb +198 -0
  20. data/lib/net/ssh/config.rb +207 -0
  21. data/lib/net/ssh/connection/channel.rb +630 -0
  22. data/lib/net/ssh/connection/constants.rb +33 -0
  23. data/lib/net/ssh/connection/session.rb +597 -0
  24. data/lib/net/ssh/connection/term.rb +178 -0
  25. data/lib/net/ssh/errors.rb +88 -0
  26. data/lib/net/ssh/key_factory.rb +102 -0
  27. data/lib/net/ssh/known_hosts.rb +129 -0
  28. data/lib/net/ssh/loggable.rb +61 -0
  29. data/lib/net/ssh/packet.rb +102 -0
  30. data/lib/net/ssh/prompt.rb +93 -0
  31. data/lib/net/ssh/proxy/command.rb +75 -0
  32. data/lib/net/ssh/proxy/errors.rb +14 -0
  33. data/lib/net/ssh/proxy/http.rb +94 -0
  34. data/lib/net/ssh/proxy/socks4.rb +70 -0
  35. data/lib/net/ssh/proxy/socks5.rb +142 -0
  36. data/lib/net/ssh/ruby_compat.rb +43 -0
  37. data/lib/net/ssh/service/forward.rb +298 -0
  38. data/lib/net/ssh/test.rb +89 -0
  39. data/lib/net/ssh/test/channel.rb +129 -0
  40. data/lib/net/ssh/test/extensions.rb +152 -0
  41. data/lib/net/ssh/test/kex.rb +44 -0
  42. data/lib/net/ssh/test/local_packet.rb +51 -0
  43. data/lib/net/ssh/test/packet.rb +81 -0
  44. data/lib/net/ssh/test/remote_packet.rb +38 -0
  45. data/lib/net/ssh/test/script.rb +157 -0
  46. data/lib/net/ssh/test/socket.rb +64 -0
  47. data/lib/net/ssh/transport/algorithms.rb +386 -0
  48. data/lib/net/ssh/transport/cipher_factory.rb +79 -0
  49. data/lib/net/ssh/transport/constants.rb +30 -0
  50. data/lib/net/ssh/transport/hmac.rb +42 -0
  51. data/lib/net/ssh/transport/hmac/abstract.rb +79 -0
  52. data/lib/net/ssh/transport/hmac/md5.rb +12 -0
  53. data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  54. data/lib/net/ssh/transport/hmac/none.rb +15 -0
  55. data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  56. data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  57. data/lib/net/ssh/transport/hmac/sha2_256.rb +15 -0
  58. data/lib/net/ssh/transport/hmac/sha2_256_96.rb +13 -0
  59. data/lib/net/ssh/transport/hmac/sha2_512.rb +14 -0
  60. data/lib/net/ssh/transport/hmac/sha2_512_96.rb +13 -0
  61. data/lib/net/ssh/transport/identity_cipher.rb +55 -0
  62. data/lib/net/ssh/transport/kex.rb +17 -0
  63. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  64. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +80 -0
  65. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +15 -0
  66. data/lib/net/ssh/transport/key_expander.rb +26 -0
  67. data/lib/net/ssh/transport/openssl.rb +127 -0
  68. data/lib/net/ssh/transport/packet_stream.rb +235 -0
  69. data/lib/net/ssh/transport/server_version.rb +71 -0
  70. data/lib/net/ssh/transport/session.rb +278 -0
  71. data/lib/net/ssh/transport/state.rb +206 -0
  72. data/lib/net/ssh/verifiers/lenient.rb +30 -0
  73. data/lib/net/ssh/verifiers/null.rb +12 -0
  74. data/lib/net/ssh/verifiers/strict.rb +53 -0
  75. data/lib/net/ssh/version.rb +62 -0
  76. data/lib/sonixlabs-net-ssh.rb +1 -0
  77. data/net-ssh.gemspec +145 -0
  78. data/setup.rb +1585 -0
  79. data/support/arcfour_check.rb +20 -0
  80. data/support/ssh_tunnel_bug.rb +65 -0
  81. data/test/authentication/methods/common.rb +28 -0
  82. data/test/authentication/methods/test_abstract.rb +51 -0
  83. data/test/authentication/methods/test_hostbased.rb +114 -0
  84. data/test/authentication/methods/test_keyboard_interactive.rb +100 -0
  85. data/test/authentication/methods/test_password.rb +52 -0
  86. data/test/authentication/methods/test_publickey.rb +148 -0
  87. data/test/authentication/test_agent.rb +205 -0
  88. data/test/authentication/test_key_manager.rb +171 -0
  89. data/test/authentication/test_session.rb +106 -0
  90. data/test/common.rb +107 -0
  91. data/test/configs/eqsign +3 -0
  92. data/test/configs/exact_match +8 -0
  93. data/test/configs/host_plus +10 -0
  94. data/test/configs/multihost +4 -0
  95. data/test/configs/wild_cards +14 -0
  96. data/test/connection/test_channel.rb +467 -0
  97. data/test/connection/test_session.rb +488 -0
  98. data/test/test_all.rb +9 -0
  99. data/test/test_buffer.rb +336 -0
  100. data/test/test_buffered_io.rb +63 -0
  101. data/test/test_config.rb +120 -0
  102. data/test/test_key_factory.rb +79 -0
  103. data/test/transport/hmac/test_md5.rb +39 -0
  104. data/test/transport/hmac/test_md5_96.rb +25 -0
  105. data/test/transport/hmac/test_none.rb +34 -0
  106. data/test/transport/hmac/test_sha1.rb +34 -0
  107. data/test/transport/hmac/test_sha1_96.rb +25 -0
  108. data/test/transport/hmac/test_sha2_256.rb +35 -0
  109. data/test/transport/hmac/test_sha2_256_96.rb +25 -0
  110. data/test/transport/hmac/test_sha2_512.rb +35 -0
  111. data/test/transport/hmac/test_sha2_512_96.rb +25 -0
  112. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
  113. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
  114. data/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb +33 -0
  115. data/test/transport/test_algorithms.rb +308 -0
  116. data/test/transport/test_cipher_factory.rb +213 -0
  117. data/test/transport/test_hmac.rb +34 -0
  118. data/test/transport/test_identity_cipher.rb +40 -0
  119. data/test/transport/test_packet_stream.rb +736 -0
  120. data/test/transport/test_server_version.rb +78 -0
  121. data/test/transport/test_session.rb +315 -0
  122. data/test/transport/test_state.rb +179 -0
  123. metadata +178 -0
@@ -0,0 +1,206 @@
1
+ require 'zlib'
2
+ require 'net/ssh/transport/cipher_factory'
3
+ require 'net/ssh/transport/hmac'
4
+
5
+ module Net; module SSH; module Transport
6
+
7
+ # Encapsulates state information about one end of an SSH connection. Such
8
+ # state includes the packet sequence number, the algorithms in use, how
9
+ # many packets and blocks have been processed since the last reset, and so
10
+ # forth. This class will never be instantiated directly, but is used as
11
+ # part of the internal state of the PacketStream module.
12
+ class State
13
+ # The socket object that owns this state object.
14
+ attr_reader :socket
15
+
16
+ # The next packet sequence number for this socket endpoint.
17
+ attr_reader :sequence_number
18
+
19
+ # The hmac algorithm in use for this endpoint.
20
+ attr_reader :hmac
21
+
22
+ # The compression algorithm in use for this endpoint.
23
+ attr_reader :compression
24
+
25
+ # The compression level to use when compressing data (or nil, for the default).
26
+ attr_reader :compression_level
27
+
28
+ # The number of packets processed since the last call to #reset!
29
+ attr_reader :packets
30
+
31
+ # The number of data blocks processed since the last call to #reset!
32
+ attr_reader :blocks
33
+
34
+ # The cipher algorithm in use for this socket endpoint.
35
+ attr_reader :cipher
36
+
37
+ # The block size for the cipher
38
+ attr_reader :block_size
39
+
40
+ # The role that this state plays (either :client or :server)
41
+ attr_reader :role
42
+
43
+ # The maximum number of packets that this endpoint wants to process before
44
+ # needing a rekey.
45
+ attr_accessor :max_packets
46
+
47
+ # The maximum number of blocks that this endpoint wants to process before
48
+ # needing a rekey.
49
+ attr_accessor :max_blocks
50
+
51
+ # The user-specified maximum number of bytes that this endpoint ought to
52
+ # process before needing a rekey.
53
+ attr_accessor :rekey_limit
54
+
55
+ # Creates a new state object, belonging to the given socket. Initializes
56
+ # the algorithms to "none".
57
+ def initialize(socket, role)
58
+ @socket = socket
59
+ @role = role
60
+ @sequence_number = @packets = @blocks = 0
61
+ @cipher = CipherFactory.get("none")
62
+ @block_size = 8
63
+ @hmac = HMAC.get("none")
64
+ @compression = nil
65
+ @compressor = @decompressor = nil
66
+ @next_iv = ""
67
+ end
68
+
69
+ # A convenience method for quickly setting multiple values in a single
70
+ # command.
71
+ def set(values)
72
+ values.each do |key, value|
73
+ instance_variable_set("@#{key}", value)
74
+ end
75
+ reset!
76
+ end
77
+
78
+ def update_cipher(data)
79
+ result = cipher.update(data)
80
+ update_next_iv(role == :client ? result : data)
81
+ return result
82
+ end
83
+
84
+ def final_cipher
85
+ result = cipher.final
86
+ update_next_iv(role == :client ? result : "", true)
87
+ return result
88
+ end
89
+
90
+ # Increments the counters. The sequence number is incremented (and remapped
91
+ # so it always fits in a 32-bit integer). The number of packets and blocks
92
+ # are also incremented.
93
+ def increment(packet_length)
94
+ @sequence_number = (@sequence_number + 1) & 0xFFFFFFFF
95
+ @packets += 1
96
+ @blocks += (packet_length + 4) / @block_size
97
+ end
98
+
99
+ # The compressor object to use when compressing data. This takes into account
100
+ # the desired compression level.
101
+ def compressor
102
+ @compressor ||= Zlib::Deflate.new(compression_level || Zlib::DEFAULT_COMPRESSION)
103
+ end
104
+
105
+ # The decompressor object to use when decompressing data.
106
+ def decompressor
107
+ @decompressor ||= Zlib::Inflate.new(nil)
108
+ end
109
+
110
+ # Returns true if data compression/decompression is enabled. This will
111
+ # return true if :standard compression is selected, or if :delayed
112
+ # compression is selected and the :authenticated hint has been received
113
+ # by the socket.
114
+ def compression?
115
+ compression == :standard || (compression == :delayed && socket.hints[:authenticated])
116
+ end
117
+
118
+ # Compresses the data. If no compression is in effect, this will just return
119
+ # the data unmodified, otherwise it uses #compressor to compress the data.
120
+ def compress(data)
121
+ data = data.to_s
122
+ return data unless compression?
123
+ compressor.deflate(data, Zlib::SYNC_FLUSH)
124
+ end
125
+
126
+ # Deompresses the data. If no compression is in effect, this will just return
127
+ # the data unmodified, otherwise it uses #decompressor to decompress the data.
128
+ def decompress(data)
129
+ data = data.to_s
130
+ return data unless compression?
131
+ decompressor.inflate(data)
132
+ end
133
+
134
+ # Resets the counters on the state object, but leaves the sequence_number
135
+ # unchanged. It also sets defaults for and recomputes the max_packets and
136
+ # max_blocks values.
137
+ def reset!
138
+ @packets = @blocks = 0
139
+
140
+ @max_packets ||= 1 << 31
141
+
142
+ @block_size = cipher.name == "RC4" ? 8 : cipher.block_size
143
+
144
+ if max_blocks.nil?
145
+ # cargo-culted from openssh. the idea is that "the 2^(blocksize*2)
146
+ # limit is too expensive for 3DES, blowfish, etc., so enforce a 1GB
147
+ # limit for small blocksizes."
148
+ if @block_size >= 16
149
+ @max_blocks = 1 << (@block_size * 2)
150
+ else
151
+ @max_blocks = (1 << 30) / @block_size
152
+ end
153
+
154
+ # if a limit on the # of bytes has been given, convert that into a
155
+ # minimum number of blocks processed.
156
+
157
+ if rekey_limit
158
+ @max_blocks = [@max_blocks, rekey_limit / @block_size].min
159
+ end
160
+ end
161
+
162
+ cleanup
163
+ end
164
+
165
+ # Closes any the compressor and/or decompressor objects that have been
166
+ # instantiated.
167
+ def cleanup
168
+ if @compressor
169
+ @compressor.finish if !@compressor.finished?
170
+ @compressor.close
171
+ end
172
+
173
+ if @decompressor
174
+ # we call reset here so that we don't get warnings when we try to
175
+ # close the decompressor
176
+ @decompressor.reset
177
+ @decompressor.close
178
+ end
179
+
180
+ @compressor = @decompressor = nil
181
+ end
182
+
183
+ # Returns true if the number of packets processed exceeds the maximum
184
+ # number of packets, or if the number of blocks processed exceeds the
185
+ # maximum number of blocks.
186
+ def needs_rekey?
187
+ max_packets && packets > max_packets ||
188
+ max_blocks && blocks > max_blocks
189
+ end
190
+
191
+ private
192
+
193
+ def update_next_iv(data, reset=false)
194
+ @next_iv << data
195
+ @next_iv = @next_iv[-cipher.iv_len..-1]
196
+
197
+ if reset
198
+ cipher.reset
199
+ cipher.iv = @next_iv
200
+ end
201
+
202
+ return data
203
+ end
204
+ end
205
+
206
+ end; end; end
@@ -0,0 +1,30 @@
1
+ require 'net/ssh/verifiers/strict'
2
+
3
+ module Net; module SSH; module Verifiers
4
+
5
+ # Basically the same as the Strict verifier, but does not try to actually
6
+ # verify a connection if the server is the localhost and the port is a
7
+ # nonstandard port number. Those two conditions will typically mean the
8
+ # connection is being tunnelled through a forwarded port, so the known-hosts
9
+ # file will not be helpful (in general).
10
+ class Lenient < Strict
11
+ # Tries to determine if the connection is being tunnelled, and if so,
12
+ # returns true. Otherwise, performs the standard strict verification.
13
+ def verify(arguments)
14
+ return true if tunnelled?(arguments)
15
+ super
16
+ end
17
+
18
+ private
19
+
20
+ # A connection is potentially being tunnelled if the port is not 22,
21
+ # and the ip refers to the localhost.
22
+ def tunnelled?(args)
23
+ return false if args[:session].port == Net::SSH::Transport::Session::DEFAULT_PORT
24
+
25
+ ip = args[:session].peer[:ip]
26
+ return ip == "127.0.0.1" || ip == "::1"
27
+ end
28
+ end
29
+
30
+ end; end; end
@@ -0,0 +1,12 @@
1
+ module Net; module SSH; module Verifiers
2
+
3
+ # The Null host key verifier simply allows every key it sees, without
4
+ # bothering to verify. This is simple, but is not particularly secure.
5
+ class Null
6
+ # Returns true.
7
+ def verify(arguments)
8
+ true
9
+ end
10
+ end
11
+
12
+ end; end; end
@@ -0,0 +1,53 @@
1
+ require 'net/ssh/errors'
2
+ require 'net/ssh/known_hosts'
3
+
4
+ module Net; module SSH; module Verifiers
5
+
6
+ # Does a strict host verification, looking the server up in the known
7
+ # host files to see if a key has already been seen for this server. If this
8
+ # server does not appear in any host file, this will silently add the
9
+ # server. If the server does appear at least once, but the key given does
10
+ # not match any known for the server, an exception will be raised (HostKeyMismatch).
11
+ # Otherwise, this returns true.
12
+ class Strict
13
+ def verify(arguments)
14
+ options = arguments[:session].options
15
+ host = options[:host_key_alias] || arguments[:session].host_as_string
16
+ matches = Net::SSH::KnownHosts.search_for(host, arguments[:session].options)
17
+
18
+ # we've never seen this host before, so just automatically add the key.
19
+ # not the most secure option (since the first hit might be the one that
20
+ # is hacked), but since almost nobody actually compares the key
21
+ # fingerprint, this is a reasonable compromise between usability and
22
+ # security.
23
+ if matches.empty?
24
+ ip = arguments[:session].peer[:ip]
25
+ Net::SSH::KnownHosts.add(host, arguments[:key], arguments[:session].options)
26
+ return true
27
+ end
28
+
29
+ # If we found any matches, check to see that the key type and
30
+ # blob also match.
31
+ found = matches.any? do |key|
32
+ key.ssh_type == arguments[:key].ssh_type &&
33
+ key.to_blob == arguments[:key].to_blob
34
+ end
35
+
36
+ # If a match was found, return true. Otherwise, raise an exception
37
+ # indicating that the key was not recognized.
38
+ found || process_cache_miss(host, arguments)
39
+ end
40
+
41
+ private
42
+
43
+ def process_cache_miss(host, args)
44
+ exception = HostKeyMismatch.new("fingerprint #{args[:fingerprint]} does not match for #{host.inspect}")
45
+ exception.data = args
46
+ exception.callback = Proc.new do
47
+ Net::SSH::KnownHosts.add(host, args[:key], args[:session].options)
48
+ end
49
+ raise exception
50
+ end
51
+ end
52
+
53
+ end; end; end
@@ -0,0 +1,62 @@
1
+ module Net; module SSH
2
+ # A class for describing the current version of a library. The version
3
+ # consists of three parts: the +major+ number, the +minor+ number, and the
4
+ # +tiny+ (or +patch+) number.
5
+ #
6
+ # Two Version instances may be compared, so that you can test that a version
7
+ # of a library is what you require:
8
+ #
9
+ # require 'net/ssh/version'
10
+ #
11
+ # if Net::SSH::Version::CURRENT < Net::SSH::Version[2,1,0]
12
+ # abort "your software is too old!"
13
+ # end
14
+ class Version
15
+ include Comparable
16
+
17
+ # A convenience method for instantiating a new Version instance with the
18
+ # given +major+, +minor+, and +tiny+ components.
19
+ def self.[](major, minor, tiny)
20
+ new(major, minor, tiny)
21
+ end
22
+
23
+ attr_reader :major, :minor, :tiny
24
+
25
+ # Create a new Version object with the given components.
26
+ def initialize(major, minor, tiny)
27
+ @major, @minor, @tiny = major, minor, tiny
28
+ end
29
+
30
+ # Compare this version to the given +version+ object.
31
+ def <=>(version)
32
+ to_i <=> version.to_i
33
+ end
34
+
35
+ # Converts this version object to a string, where each of the three
36
+ # version components are joined by the '.' character. E.g., 2.0.0.
37
+ def to_s
38
+ @to_s ||= [@major, @minor, @tiny].join(".")
39
+ end
40
+
41
+ # Converts this version to a canonical integer that may be compared
42
+ # against other version objects.
43
+ def to_i
44
+ @to_i ||= @major * 1_000_000 + @minor * 1_000 + @tiny
45
+ end
46
+
47
+ # The major component of this version of the Net::SSH library
48
+ MAJOR = 2
49
+
50
+ # The minor component of this version of the Net::SSH library
51
+ MINOR = 3
52
+
53
+ # The tiny component of this version of the Net::SSH library
54
+ TINY = 0
55
+
56
+ # The current version of the Net::SSH library as a Version instance
57
+ CURRENT = new(MAJOR, MINOR, TINY)
58
+
59
+ # The current version of the Net::SSH library as a String
60
+ STRING = CURRENT.to_s
61
+ end
62
+ end; end
@@ -0,0 +1 @@
1
+ require 'net/ssh'
data/net-ssh.gemspec ADDED
@@ -0,0 +1,145 @@
1
+ @spec = Gem::Specification.new do |s|
2
+ s.name = "sonixlabs-net-ssh"
3
+ s.version = "2.3.0"
4
+ s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
5
+ s.description = s.summary + " It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
6
+ s.authors = ["Kazuhiro Yamada"]
7
+ s.email = ["sonixlabs@sonix.asia", "yamadakazu45@gmail.com"]
8
+ s.homepage = "https://github.com/sonixlabs/net-ssh"
9
+
10
+ s.extra_rdoc_files = %w[README.rdoc THANKS.rdoc CHANGELOG.rdoc]
11
+ s.has_rdoc = true
12
+ s.rdoc_options = ["--line-numbers", "--title", s.summary, "--main", "README.rdoc"]
13
+ s.require_paths = %w[lib]
14
+ s.rubygems_version = '1.3.2'
15
+
16
+ s.executables = %w[]
17
+
18
+ # = MANIFEST =
19
+ s.files = %w(
20
+ CHANGELOG.rdoc
21
+ Manifest
22
+ README.rdoc
23
+ Rakefile
24
+ Rudyfile
25
+ THANKS.rdoc
26
+ lib/sonixlabs-net-ssh.rb
27
+ lib/net/ssh.rb
28
+ lib/net/ssh/authentication/agent.rb
29
+ lib/net/ssh/authentication/constants.rb
30
+ lib/net/ssh/authentication/key_manager.rb
31
+ lib/net/ssh/authentication/methods/abstract.rb
32
+ lib/net/ssh/authentication/methods/hostbased.rb
33
+ lib/net/ssh/authentication/methods/keyboard_interactive.rb
34
+ lib/net/ssh/authentication/methods/password.rb
35
+ lib/net/ssh/authentication/methods/publickey.rb
36
+ lib/net/ssh/authentication/pageant.rb
37
+ lib/net/ssh/authentication/session.rb
38
+ lib/net/ssh/buffer.rb
39
+ lib/net/ssh/buffered_io.rb
40
+ lib/net/ssh/config.rb
41
+ lib/net/ssh/connection/channel.rb
42
+ lib/net/ssh/connection/constants.rb
43
+ lib/net/ssh/connection/session.rb
44
+ lib/net/ssh/connection/term.rb
45
+ lib/net/ssh/errors.rb
46
+ lib/net/ssh/key_factory.rb
47
+ lib/net/ssh/known_hosts.rb
48
+ lib/net/ssh/loggable.rb
49
+ lib/net/ssh/packet.rb
50
+ lib/net/ssh/prompt.rb
51
+ lib/net/ssh/proxy/command.rb
52
+ lib/net/ssh/proxy/errors.rb
53
+ lib/net/ssh/proxy/http.rb
54
+ lib/net/ssh/proxy/socks4.rb
55
+ lib/net/ssh/proxy/socks5.rb
56
+ lib/net/ssh/ruby_compat.rb
57
+ lib/net/ssh/service/forward.rb
58
+ lib/net/ssh/test.rb
59
+ lib/net/ssh/test/channel.rb
60
+ lib/net/ssh/test/extensions.rb
61
+ lib/net/ssh/test/kex.rb
62
+ lib/net/ssh/test/local_packet.rb
63
+ lib/net/ssh/test/packet.rb
64
+ lib/net/ssh/test/remote_packet.rb
65
+ lib/net/ssh/test/script.rb
66
+ lib/net/ssh/test/socket.rb
67
+ lib/net/ssh/transport/algorithms.rb
68
+ lib/net/ssh/transport/cipher_factory.rb
69
+ lib/net/ssh/transport/constants.rb
70
+ lib/net/ssh/transport/hmac.rb
71
+ lib/net/ssh/transport/hmac/abstract.rb
72
+ lib/net/ssh/transport/hmac/md5.rb
73
+ lib/net/ssh/transport/hmac/md5_96.rb
74
+ lib/net/ssh/transport/hmac/none.rb
75
+ lib/net/ssh/transport/hmac/sha1.rb
76
+ lib/net/ssh/transport/hmac/sha1_96.rb
77
+ lib/net/ssh/transport/hmac/sha2_256.rb
78
+ lib/net/ssh/transport/hmac/sha2_256_96.rb
79
+ lib/net/ssh/transport/hmac/sha2_512.rb
80
+ lib/net/ssh/transport/hmac/sha2_512_96.rb
81
+ lib/net/ssh/transport/identity_cipher.rb
82
+ lib/net/ssh/transport/key_expander.rb
83
+ lib/net/ssh/transport/kex.rb
84
+ lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb
85
+ lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb
86
+ lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb
87
+ lib/net/ssh/transport/openssl.rb
88
+ lib/net/ssh/transport/packet_stream.rb
89
+ lib/net/ssh/transport/server_version.rb
90
+ lib/net/ssh/transport/session.rb
91
+ lib/net/ssh/transport/state.rb
92
+ lib/net/ssh/verifiers/lenient.rb
93
+ lib/net/ssh/verifiers/null.rb
94
+ lib/net/ssh/verifiers/strict.rb
95
+ lib/net/ssh/version.rb
96
+ net-ssh.gemspec
97
+ setup.rb
98
+ support/arcfour_check.rb
99
+ support/ssh_tunnel_bug.rb
100
+ test/authentication/methods/common.rb
101
+ test/authentication/methods/test_abstract.rb
102
+ test/authentication/methods/test_hostbased.rb
103
+ test/authentication/methods/test_keyboard_interactive.rb
104
+ test/authentication/methods/test_password.rb
105
+ test/authentication/methods/test_publickey.rb
106
+ test/authentication/test_agent.rb
107
+ test/authentication/test_key_manager.rb
108
+ test/authentication/test_session.rb
109
+ test/common.rb
110
+ test/configs/eqsign
111
+ test/configs/exact_match
112
+ test/configs/host_plus
113
+ test/configs/multihost
114
+ test/configs/wild_cards
115
+ test/connection/test_channel.rb
116
+ test/connection/test_session.rb
117
+ test/test_all.rb
118
+ test/test_buffer.rb
119
+ test/test_buffered_io.rb
120
+ test/test_config.rb
121
+ test/test_key_factory.rb
122
+ test/transport/hmac/test_md5.rb
123
+ test/transport/hmac/test_md5_96.rb
124
+ test/transport/hmac/test_none.rb
125
+ test/transport/hmac/test_sha1.rb
126
+ test/transport/hmac/test_sha1_96.rb
127
+ test/transport/hmac/test_sha2_256.rb
128
+ test/transport/hmac/test_sha2_256_96.rb
129
+ test/transport/hmac/test_sha2_512.rb
130
+ test/transport/hmac/test_sha2_512_96.rb
131
+ test/transport/kex/test_diffie_hellman_group1_sha1.rb
132
+ test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb
133
+ test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb
134
+ test/transport/test_algorithms.rb
135
+ test/transport/test_cipher_factory.rb
136
+ test/transport/test_hmac.rb
137
+ test/transport/test_identity_cipher.rb
138
+ test/transport/test_packet_stream.rb
139
+ test/transport/test_server_version.rb
140
+ test/transport/test_session.rb
141
+ test/transport/test_state.rb
142
+ )
143
+
144
+
145
+ end