sonixlabs-net-ssh 2.3.0

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.
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