net-ssh 1.1.4 → 2.0.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 (297) hide show
  1. data/CHANGELOG.rdoc +37 -0
  2. data/Manifest +101 -0
  3. data/README.rdoc +110 -0
  4. data/Rakefile +26 -0
  5. data/{THANKS → THANKS.rdoc} +2 -5
  6. data/lib/net/ssh.rb +189 -57
  7. data/lib/net/ssh/authentication/agent.rb +175 -0
  8. data/lib/net/ssh/authentication/constants.rb +18 -0
  9. data/lib/net/ssh/authentication/key_manager.rb +166 -0
  10. data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  11. data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  12. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  13. data/lib/net/ssh/authentication/methods/password.rb +39 -0
  14. data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  15. data/lib/net/ssh/authentication/pageant.rb +176 -0
  16. data/lib/net/ssh/authentication/session.rb +116 -0
  17. data/lib/net/ssh/buffer.rb +339 -0
  18. data/lib/net/ssh/buffered_io.rb +149 -0
  19. data/lib/net/ssh/config.rb +173 -0
  20. data/lib/net/ssh/connection/channel.rb +575 -454
  21. data/lib/net/ssh/connection/constants.rb +31 -45
  22. data/lib/net/ssh/connection/session.rb +569 -0
  23. data/lib/net/ssh/connection/term.rb +176 -88
  24. data/lib/net/ssh/errors.rb +83 -61
  25. data/lib/net/ssh/key_factory.rb +85 -0
  26. data/lib/net/ssh/known_hosts.rb +129 -0
  27. data/lib/net/ssh/loggable.rb +61 -0
  28. data/lib/net/ssh/packet.rb +102 -0
  29. data/lib/net/ssh/prompt.rb +93 -0
  30. data/lib/net/ssh/proxy/errors.rb +8 -28
  31. data/lib/net/ssh/proxy/http.rb +75 -107
  32. data/lib/net/ssh/proxy/socks4.rb +35 -48
  33. data/lib/net/ssh/proxy/socks5.rb +76 -108
  34. data/lib/net/ssh/service/forward.rb +267 -0
  35. data/lib/net/ssh/test.rb +89 -0
  36. data/lib/net/ssh/test/channel.rb +129 -0
  37. data/lib/net/ssh/test/extensions.rb +152 -0
  38. data/lib/net/ssh/test/kex.rb +44 -0
  39. data/lib/net/ssh/test/local_packet.rb +51 -0
  40. data/lib/net/ssh/test/packet.rb +81 -0
  41. data/lib/net/ssh/test/remote_packet.rb +38 -0
  42. data/lib/net/ssh/test/script.rb +157 -0
  43. data/lib/net/ssh/test/socket.rb +59 -0
  44. data/lib/net/ssh/transport/algorithms.rb +384 -0
  45. data/lib/net/ssh/transport/cipher_factory.rb +72 -0
  46. data/lib/net/ssh/transport/constants.rb +22 -58
  47. data/lib/net/ssh/transport/hmac.rb +31 -0
  48. data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
  49. data/lib/net/ssh/transport/hmac/md5.rb +12 -0
  50. data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  51. data/lib/net/ssh/transport/hmac/none.rb +15 -0
  52. data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  53. data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  54. data/lib/net/ssh/transport/identity_cipher.rb +40 -0
  55. data/lib/net/ssh/transport/kex.rb +13 -0
  56. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  57. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  58. data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
  59. data/lib/net/ssh/transport/packet_stream.rb +230 -0
  60. data/lib/net/ssh/transport/server_version.rb +61 -0
  61. data/lib/net/ssh/transport/session.rb +225 -303
  62. data/lib/net/ssh/transport/state.rb +170 -0
  63. data/lib/net/ssh/verifiers/lenient.rb +30 -0
  64. data/lib/net/ssh/verifiers/null.rb +12 -0
  65. data/lib/net/ssh/verifiers/strict.rb +53 -0
  66. data/lib/net/ssh/version.rb +57 -26
  67. data/net-ssh.gemspec +54 -0
  68. data/setup.rb +1585 -0
  69. data/test/authentication/methods/common.rb +28 -0
  70. data/test/authentication/methods/test_abstract.rb +51 -0
  71. data/test/authentication/methods/test_hostbased.rb +108 -0
  72. data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
  73. data/test/authentication/methods/test_password.rb +50 -0
  74. data/test/authentication/methods/test_publickey.rb +123 -0
  75. data/test/authentication/test_agent.rb +205 -0
  76. data/test/authentication/test_key_manager.rb +100 -0
  77. data/test/authentication/test_session.rb +93 -0
  78. data/test/common.rb +106 -0
  79. data/test/configs/exact_match +8 -0
  80. data/test/configs/wild_cards +14 -0
  81. data/test/connection/test_channel.rb +452 -0
  82. data/test/connection/test_session.rb +483 -0
  83. data/test/test_all.rb +6 -0
  84. data/test/test_buffer.rb +336 -0
  85. data/test/test_buffered_io.rb +63 -0
  86. data/test/test_config.rb +78 -0
  87. data/test/test_key_factory.rb +67 -0
  88. data/test/transport/hmac/test_md5.rb +34 -0
  89. data/test/transport/hmac/test_md5_96.rb +25 -0
  90. data/test/transport/hmac/test_none.rb +34 -0
  91. data/test/transport/hmac/test_sha1.rb +34 -0
  92. data/test/transport/hmac/test_sha1_96.rb +25 -0
  93. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
  94. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
  95. data/test/transport/test_algorithms.rb +302 -0
  96. data/test/transport/test_cipher_factory.rb +163 -0
  97. data/test/transport/test_hmac.rb +34 -0
  98. data/test/transport/test_identity_cipher.rb +40 -0
  99. data/test/transport/test_packet_stream.rb +433 -0
  100. data/test/transport/test_server_version.rb +55 -0
  101. data/test/transport/test_session.rb +312 -0
  102. data/test/transport/test_state.rb +173 -0
  103. metadata +102 -253
  104. data/ChangeLog +0 -560
  105. data/LICENSE +0 -7
  106. data/NEWS +0 -152
  107. data/README +0 -14
  108. data/bin/rb-keygen +0 -210
  109. data/doc/LICENSE-BSD +0 -27
  110. data/doc/LICENSE-GPL +0 -280
  111. data/doc/LICENSE-RUBY +0 -56
  112. data/doc/manual-html/chapter-1.html +0 -388
  113. data/doc/manual-html/chapter-2.html +0 -552
  114. data/doc/manual-html/chapter-3.html +0 -470
  115. data/doc/manual-html/chapter-4.html +0 -413
  116. data/doc/manual-html/chapter-5.html +0 -525
  117. data/doc/manual-html/chapter-6.html +0 -456
  118. data/doc/manual-html/chapter-7.html +0 -343
  119. data/doc/manual-html/index.html +0 -235
  120. data/doc/manual-html/stylesheets/manual.css +0 -270
  121. data/doc/manual-html/stylesheets/ruby.css +0 -17
  122. data/doc/manual/chapter.erb +0 -38
  123. data/doc/manual/example.erb +0 -18
  124. data/doc/manual/index.erb +0 -29
  125. data/doc/manual/manual.rb +0 -311
  126. data/doc/manual/manual.yml +0 -73
  127. data/doc/manual/page.erb +0 -87
  128. data/doc/manual/parts/0000.txt +0 -5
  129. data/doc/manual/parts/0001.txt +0 -3
  130. data/doc/manual/parts/0002.txt +0 -40
  131. data/doc/manual/parts/0003.txt +0 -6
  132. data/doc/manual/parts/0004.txt +0 -7
  133. data/doc/manual/parts/0005.txt +0 -1
  134. data/doc/manual/parts/0006.txt +0 -49
  135. data/doc/manual/parts/0007.txt +0 -67
  136. data/doc/manual/parts/0008.txt +0 -43
  137. data/doc/manual/parts/0009.txt +0 -14
  138. data/doc/manual/parts/0010.txt +0 -7
  139. data/doc/manual/parts/0011.txt +0 -14
  140. data/doc/manual/parts/0012.txt +0 -3
  141. data/doc/manual/parts/0013.txt +0 -20
  142. data/doc/manual/parts/0014.txt +0 -32
  143. data/doc/manual/parts/0015.txt +0 -14
  144. data/doc/manual/parts/0016.txt +0 -28
  145. data/doc/manual/parts/0017.txt +0 -50
  146. data/doc/manual/parts/0018.txt +0 -35
  147. data/doc/manual/parts/0019.txt +0 -7
  148. data/doc/manual/parts/0020.txt +0 -72
  149. data/doc/manual/parts/0021.txt +0 -50
  150. data/doc/manual/parts/0022.txt +0 -42
  151. data/doc/manual/parts/0023.txt +0 -51
  152. data/doc/manual/parts/0024.txt +0 -18
  153. data/doc/manual/parts/0025.txt +0 -18
  154. data/doc/manual/parts/0026.txt +0 -15
  155. data/doc/manual/parts/0027.txt +0 -37
  156. data/doc/manual/parts/0028.txt +0 -16
  157. data/doc/manual/parts/0029.txt +0 -1
  158. data/doc/manual/parts/0030.txt +0 -52
  159. data/doc/manual/parts/0031.txt +0 -25
  160. data/doc/manual/stylesheets/manual.css +0 -270
  161. data/doc/manual/stylesheets/ruby.css +0 -17
  162. data/doc/manual/tutorial.erb +0 -30
  163. data/examples/auth-forward.rb +0 -41
  164. data/examples/channel-demo.rb +0 -81
  165. data/examples/port-forward.rb +0 -51
  166. data/examples/process-demo.rb +0 -91
  167. data/examples/remote-net-port-forward.rb +0 -45
  168. data/examples/remote-port-forward.rb +0 -80
  169. data/examples/shell-demo.rb +0 -46
  170. data/examples/ssh-client.rb +0 -67
  171. data/examples/sync-shell-demo.rb +0 -69
  172. data/examples/tail-demo.rb +0 -49
  173. data/lib/net/ssh/connection/driver.rb +0 -446
  174. data/lib/net/ssh/connection/services.rb +0 -72
  175. data/lib/net/ssh/host-key-verifier.rb +0 -52
  176. data/lib/net/ssh/known-hosts.rb +0 -96
  177. data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
  178. data/lib/net/ssh/null-host-key-verifier.rb +0 -14
  179. data/lib/net/ssh/service/agentforward/driver.rb +0 -78
  180. data/lib/net/ssh/service/agentforward/services.rb +0 -41
  181. data/lib/net/ssh/service/forward/driver.rb +0 -319
  182. data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
  183. data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
  184. data/lib/net/ssh/service/forward/services.rb +0 -76
  185. data/lib/net/ssh/service/process/driver.rb +0 -153
  186. data/lib/net/ssh/service/process/open.rb +0 -193
  187. data/lib/net/ssh/service/process/popen3.rb +0 -178
  188. data/lib/net/ssh/service/process/services.rb +0 -66
  189. data/lib/net/ssh/service/services.rb +0 -60
  190. data/lib/net/ssh/service/shell/driver.rb +0 -86
  191. data/lib/net/ssh/service/shell/services.rb +0 -54
  192. data/lib/net/ssh/service/shell/shell.rb +0 -222
  193. data/lib/net/ssh/service/shell/sync.rb +0 -114
  194. data/lib/net/ssh/session.rb +0 -305
  195. data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
  196. data/lib/net/ssh/transport/compress/compressor.rb +0 -53
  197. data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
  198. data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
  199. data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
  200. data/lib/net/ssh/transport/compress/services.rb +0 -68
  201. data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
  202. data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
  203. data/lib/net/ssh/transport/errors.rb +0 -47
  204. data/lib/net/ssh/transport/identity-cipher.rb +0 -61
  205. data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
  206. data/lib/net/ssh/transport/kex/dh.rb +0 -249
  207. data/lib/net/ssh/transport/kex/services.rb +0 -62
  208. data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
  209. data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
  210. data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
  211. data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
  212. data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
  213. data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
  214. data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
  215. data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
  216. data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
  217. data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
  218. data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
  219. data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
  220. data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
  221. data/lib/net/ssh/transport/ossl/services.rb +0 -149
  222. data/lib/net/ssh/transport/packet-stream.rb +0 -236
  223. data/lib/net/ssh/transport/services.rb +0 -146
  224. data/lib/net/ssh/transport/version-negotiator.rb +0 -73
  225. data/lib/net/ssh/userauth/agent.rb +0 -222
  226. data/lib/net/ssh/userauth/constants.rb +0 -35
  227. data/lib/net/ssh/userauth/driver.rb +0 -183
  228. data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
  229. data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
  230. data/lib/net/ssh/userauth/methods/password.rb +0 -70
  231. data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
  232. data/lib/net/ssh/userauth/methods/services.rb +0 -90
  233. data/lib/net/ssh/userauth/pageant.rb +0 -197
  234. data/lib/net/ssh/userauth/services.rb +0 -141
  235. data/lib/net/ssh/userauth/userkeys.rb +0 -258
  236. data/lib/net/ssh/util/buffer.rb +0 -274
  237. data/lib/net/ssh/util/prompter.rb +0 -73
  238. data/test/ALL-TESTS.rb +0 -18
  239. data/test/connection/tc_channel.rb +0 -136
  240. data/test/connection/tc_driver.rb +0 -287
  241. data/test/connection/tc_integration.rb +0 -87
  242. data/test/proxy/tc_http.rb +0 -209
  243. data/test/proxy/tc_socks4.rb +0 -148
  244. data/test/proxy/tc_socks5.rb +0 -214
  245. data/test/service/agentforward/tc_driver.rb +0 -138
  246. data/test/service/forward/tc_driver.rb +0 -289
  247. data/test/service/forward/tc_local_network_handler.rb +0 -123
  248. data/test/service/forward/tc_remote_network_handler.rb +0 -111
  249. data/test/service/process/tc_driver.rb +0 -79
  250. data/test/service/process/tc_integration.rb +0 -119
  251. data/test/service/process/tc_open.rb +0 -179
  252. data/test/service/process/tc_popen3.rb +0 -164
  253. data/test/tc_integration.rb +0 -80
  254. data/test/transport/compress/tc_none_compress.rb +0 -41
  255. data/test/transport/compress/tc_none_decompress.rb +0 -45
  256. data/test/transport/compress/tc_zlib_compress.rb +0 -61
  257. data/test/transport/compress/tc_zlib_decompress.rb +0 -48
  258. data/test/transport/kex/tc_dh.rb +0 -312
  259. data/test/transport/kex/tc_dh_gex.rb +0 -71
  260. data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
  261. data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
  262. data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
  263. data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
  264. data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
  265. data/test/transport/ossl/fixtures/not-a-private-key +0 -4
  266. data/test/transport/ossl/fixtures/not-supported +0 -2
  267. data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
  268. data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
  269. data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
  270. data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
  271. data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
  272. data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
  273. data/test/transport/ossl/hmac/tc_md5.rb +0 -50
  274. data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
  275. data/test/transport/ossl/hmac/tc_none.rb +0 -50
  276. data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
  277. data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
  278. data/test/transport/ossl/tc_buffer.rb +0 -97
  279. data/test/transport/ossl/tc_buffer_factory.rb +0 -67
  280. data/test/transport/ossl/tc_cipher_factory.rb +0 -84
  281. data/test/transport/ossl/tc_digest_factory.rb +0 -39
  282. data/test/transport/ossl/tc_hmac_factory.rb +0 -72
  283. data/test/transport/ossl/tc_key_factory.rb +0 -199
  284. data/test/transport/tc_algorithm_negotiator.rb +0 -170
  285. data/test/transport/tc_identity_cipher.rb +0 -52
  286. data/test/transport/tc_integration.rb +0 -115
  287. data/test/transport/tc_packet_stream.rb +0 -184
  288. data/test/transport/tc_session.rb +0 -296
  289. data/test/transport/tc_version_negotiator.rb +0 -86
  290. data/test/userauth/methods/tc_hostbased.rb +0 -136
  291. data/test/userauth/methods/tc_password.rb +0 -89
  292. data/test/userauth/methods/tc_publickey.rb +0 -167
  293. data/test/userauth/tc_agent.rb +0 -223
  294. data/test/userauth/tc_driver.rb +0 -190
  295. data/test/userauth/tc_integration.rb +0 -97
  296. data/test/userauth/tc_userkeys.rb +0 -265
  297. data/test/util/tc_buffer.rb +0 -217
@@ -1,170 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../lib"
18
-
19
- require 'net/ssh/transport/algorithm-negotiator'
20
- require 'net/ssh/transport/constants'
21
- require 'net/ssh/util/buffer'
22
- require 'test/unit'
23
-
24
- class TC_AlgorithmNegotiator < Test::Unit::TestCase
25
- include Net::SSH::Transport::Constants
26
-
27
- class MockLogger; def debug?; false; end; end
28
-
29
- class Buffers
30
- def writer
31
- Net::SSH::Util::WriterBuffer.new
32
- end
33
- end
34
-
35
- class ScriptedSession
36
- attr_reader :messages
37
- attr_reader :host, :port
38
-
39
- def initialize( *script )
40
- @script = script
41
- @messages = []
42
- end
43
-
44
- def wait_for_message
45
- @script.shift
46
- end
47
-
48
- def send_message( msg )
49
- @messages << msg.to_s
50
- end
51
- end
52
-
53
- ALGORITHMS = {
54
- :host_key => [ "A", "B" ],
55
- :kex => [ "C", "D" ],
56
- :encryption => [ "E", "F" ],
57
- :hmac => [ "G", "H" ],
58
- :compression => [ "I", "J" ],
59
- :languages => [ "K", "L" ],
60
- }
61
-
62
- def reader( text )
63
- Net::SSH::Util::ReaderBuffer.new( text )
64
- end
65
-
66
- def setup
67
- logger = MockLogger.new
68
- buffers = Buffers.new
69
- @negotiator = Net::SSH::Transport::AlgorithmNegotiator.new( logger, ALGORITHMS, buffers )
70
- end
71
-
72
- def test_no_kexinit
73
- session = ScriptedSession.new( [ -1, reader("") ] )
74
- assert_raise( Net::SSH::Exception ) do
75
- @negotiator.negotiate( session, {} )
76
- end
77
- end
78
-
79
- def test_simple_exchange
80
- session = ScriptedSession.new(
81
- [ KEXINIT,
82
- reader("1234567890123456" +
83
- "\0\0\0\3C,D" +
84
- "\0\0\0\3A,B" +
85
- "\0\0\0\3E,F\0\0\0\3E,F" +
86
- "\0\0\0\3G,H\0\0\0\3G,H" +
87
- "\0\0\0\3I,J\0\0\0\3I,J" +
88
- "\0\0\0\0\0\0\0\0\0\0\0\0\0") ]
89
- )
90
-
91
- result = @negotiator.negotiate( session, {} )
92
-
93
- assert_equal "C", result.kex
94
- assert_equal "A", result.host_key
95
- assert_equal "E", result.encryption_c2s
96
- assert_equal "E", result.encryption_s2c
97
- assert_equal "G", result.mac_c2s
98
- assert_equal "G", result.mac_s2c
99
- assert_equal "I", result.compression_c2s
100
- assert_equal "I", result.compression_s2c
101
- assert_equal "", result.language_c2s
102
- assert_equal "", result.language_s2c
103
-
104
- assert_equal "1234567890123456\0\0\0\3C,D\0\0\0\3A,B\0\0\0\3E,F\0\0\0\3E,F\0\0\0\3G,H\0\0\0\3G,H\0\0\0\3I,J\0\0\0\3I,J\0\0\0\0\0\0\0\0\0\0\0\0\0", result.server_packet
105
- assert_equal "\0\0\0\3C,D\0\0\0\3A,B\0\0\0\3E,F\0\0\0\3E,F\0\0\0\3G,H\0\0\0\3G,H\0\0\0\3I,J\0\0\0\3I,J\0\0\0\3K,L\0\0\0\3K,L\0\0\0\0\0", result.client_packet[17..-1]
106
- end
107
-
108
- def test_custom_exchange
109
- session = ScriptedSession.new(
110
- [ KEXINIT,
111
- reader("1234567890123456" +
112
- "\0\0\0\3C,D" +
113
- "\0\0\0\3A,B" +
114
- "\0\0\0\3E,F\0\0\0\3E,F" +
115
- "\0\0\0\3G,H\0\0\0\3G,H" +
116
- "\0\0\0\3I,J\0\0\0\3I,J" +
117
- "\0\0\0\0\0\0\0\0\0\0\0\0\0") ]
118
- )
119
-
120
- result = @negotiator.negotiate( session,
121
- :kex => "D",
122
- :host_key => [ "B", "A" ] )
123
-
124
- assert_equal "D", result.kex
125
- assert_equal "B", result.host_key
126
- assert_equal "E", result.encryption_c2s
127
- assert_equal "E", result.encryption_s2c
128
- assert_equal "G", result.mac_c2s
129
- assert_equal "G", result.mac_s2c
130
- assert_equal "I", result.compression_c2s
131
- assert_equal "I", result.compression_s2c
132
- assert_equal "", result.language_c2s
133
- assert_equal "", result.language_s2c
134
- end
135
-
136
- def test_bad_algorithm
137
- session = ScriptedSession.new(
138
- [ KEXINIT,
139
- reader("1234567890123456" +
140
- "\0\0\0\3C,D" +
141
- "\0\0\0\3A,B" +
142
- "\0\0\0\3E,F\0\0\0\3E,F" +
143
- "\0\0\0\3G,H\0\0\0\3G,H" +
144
- "\0\0\0\3I,J\0\0\0\3I,J" +
145
- "\0\0\0\0\0\0\0\0\0\0\0\0\0") ]
146
- )
147
-
148
- assert_raise( NotImplementedError ) do
149
- @negotiator.negotiate( session, :kex => "K" )
150
- end
151
- end
152
-
153
- def test_no_agree
154
- session = ScriptedSession.new(
155
- [ KEXINIT,
156
- reader("1234567890123456" +
157
- "\0\0\0\3C,D" +
158
- "\0\0\0\3M,N" +
159
- "\0\0\0\3E,F\0\0\0\3E,F" +
160
- "\0\0\0\3G,H\0\0\0\3G,H" +
161
- "\0\0\0\3I,J\0\0\0\3I,J" +
162
- "\0\0\0\0\0\0\0\0\0\0\0\0\0") ]
163
- )
164
-
165
- assert_raise( Net::SSH::Exception ) do
166
- @negotiator.negotiate( session, {} )
167
- end
168
- end
169
-
170
- end
@@ -1,52 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../lib"
18
-
19
- require 'net/ssh/transport/identity-cipher'
20
- require 'test/unit'
21
-
22
- class TC_IdentityCipher < Test::Unit::TestCase
23
-
24
- def setup
25
- @cipher = Net::SSH::Transport::IdentityCipher.new
26
- end
27
-
28
- def test_block_size
29
- assert_equal 8, @cipher.block_size
30
- end
31
-
32
- def test_encrypt
33
- @cipher.encrypt
34
- text = @cipher.update( "value1" )
35
- text << @cipher.update( "value2" )
36
- text << @cipher.final
37
- assert_equal text, "value1value2"
38
- end
39
-
40
- def test_decrypt
41
- @cipher.decrypt
42
- text = @cipher.update( "value1" )
43
- text << @cipher.update( "value2" )
44
- text << @cipher.final
45
- assert_equal text, "value1value2"
46
- end
47
-
48
- def test_name
49
- assert_equal "identity", @cipher.name
50
- end
51
-
52
- end
@@ -1,115 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../lib"
18
-
19
- if $run_integration_tests || __FILE__ == $0
20
-
21
- require 'needle'
22
- require 'net/ssh/transport/services'
23
- require 'net/ssh/null-host-key-verifier'
24
- require 'test/unit'
25
-
26
- class TC_Transport_Integration < Test::Unit::TestCase
27
-
28
- def setup
29
- @registry = Needle::Registry.new :logs => { :device=>STDOUT, :default_level => :WARN }
30
- @registry.define { |b| b.host_key_verifier { Net::SSH::NullHostKeyVerifier.new } }
31
- Net::SSH::Transport.register_services( @registry )
32
- end
33
-
34
- def teardown
35
- @registry.logs.close
36
- end
37
-
38
- backends = [ :ossl ]
39
- keys = [ "ssh-dss", "ssh-rsa" ]
40
- kexs = [ "diffie-hellman-group-exchange-sha1", "diffie-hellman-group1-sha1" ]
41
- # we don't test "idea-cbc" because it is not supported by OpenSSH. OpenSSH
42
- # will use 3des-cbc instead, which we are already testing.
43
- encryptions = [ "3des-cbc", "aes128-cbc", "blowfish-cbc", "aes256-cbc",
44
- "aes192-cbc" ]
45
- hmacs = [ "hmac-md5", "hmac-sha1", "hmac-md5-96", "hmac-sha1-96" ]
46
- # for some reason, the version of sshd I'm using locally reports the 'zlib'
47
- # algorithm as 'zlib@openssh.com', which wreaks havoc on the code. For now,
48
- # I'm just disabling the zlib tests.
49
- compressions = [ "none" ] #, "zlib" ]
50
-
51
- # keys = [ 'ssh-dss' ]
52
- # kexs = [ 'diffie-hellman-group-exchange-sha1' ]
53
- # encryptions = [ '3des-cbc' ]
54
- # hmacs = [ 'hmac-md5' ]
55
- # compressions = [ 'none' ]
56
-
57
- backends.each do |backend|
58
- keys.each do |key|
59
- kexs.each do |kex|
60
- encryptions.each do |encryption|
61
- hmacs.each do |hmac|
62
- compressions.each do |compression|
63
- method_name = "test_#{backend}__#{key}__#{kex}__" +
64
- "#{encryption}__#{hmac}__#{compression}"
65
- method_name.gsub!( /-/, "_" )
66
-
67
- define_method( method_name ) do
68
- @registry.define do |b|
69
- b.crypto_backend { backend }
70
- b.transport_host { "test.host" }
71
- b.transport_options do
72
- Hash[ :host_key => key,
73
- :kex => kex,
74
- :encryption => encryption,
75
- :hmac => hmac,
76
- :compression => compression ]
77
- end
78
- end
79
-
80
- session = nil
81
- assert_nothing_raised do
82
- session = @registry.transport.session
83
- end
84
-
85
- assert_equal key, session.algorithms.host_key
86
- assert_equal kex, session.algorithms.kex
87
- assert_equal encryption, session.algorithms.encryption_c2s
88
- assert_equal encryption, session.algorithms.encryption_s2c
89
- assert_equal hmac, session.algorithms.mac_c2s
90
- assert_equal hmac, session.algorithms.mac_s2c
91
- assert_equal compression, session.algorithms.compression_c2s
92
- assert_equal compression, session.algorithms.compression_s2c
93
-
94
- type = nil
95
- assert_nothing_raised do
96
- session.send_message(
97
- session.class::SERVICE_REQUEST.chr +
98
- "\0\0\0\14ssh-userauth" )
99
- type, buffer = session.wait_for_message
100
- end
101
-
102
- assert_equal session.class::SERVICE_ACCEPT, type
103
- session.close
104
- end
105
-
106
- end
107
- end
108
- end
109
- end
110
- end
111
- end
112
-
113
- end
114
-
115
- end
@@ -1,184 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../lib"
18
-
19
- require 'net/ssh/transport/packet-stream'
20
- require 'net/ssh/util/buffer'
21
- require 'test/unit'
22
-
23
- module PacketStream_Mock
24
- class Cipher
25
- def block_size
26
- 8
27
- end
28
-
29
- def update( text )
30
- "!" + text
31
- end
32
-
33
- def final
34
- "!"
35
- end
36
- end
37
-
38
- class NullCipher
39
- def block_size; 8; end
40
- def update( text ); text; end
41
- def final; ""; end
42
- end
43
-
44
- class HMAC
45
- def mac_length
46
- 8
47
- end
48
-
49
- def digest( text )
50
- text[0,mac_length]
51
- end
52
- end
53
-
54
- class Compressor
55
- def initialize( b="<", e=">" )
56
- @b, @e = b, e
57
- end
58
-
59
- def compress( text )
60
- "#{@b}#{text}#{@e}"
61
- end
62
- end
63
-
64
- class Decompressor
65
- def decompress( text )
66
- text
67
- end
68
- end
69
-
70
- class CipherFactory
71
- def initialize( klass )
72
- @klass = klass
73
- end
74
-
75
- def get( name )
76
- raise ArgumentError, "expected \"none\", got #{name.inspect}" unless name=="none"
77
- @klass.new
78
- end
79
- end
80
-
81
- class HMACFactory
82
- def get( name )
83
- raise ArgumentError, "expected \"none\", got #{name.inspect}" unless name=="none"
84
- HMAC.new
85
- end
86
- end
87
-
88
- class BufferFactory
89
- def reader( text )
90
- Net::SSH::Util::ReaderBuffer.new( text )
91
- end
92
- end
93
-
94
- class Socket
95
- attr_reader :send_buffer
96
-
97
- def initialize( source="" )
98
- @send_buffer = ""
99
- @source = source
100
- end
101
-
102
- def recv( bytes )
103
- result, @source = @source[0,bytes], @source[bytes..-1]
104
- result
105
- end
106
-
107
- def send( text, arg )
108
- @send_buffer << text
109
- text.length
110
- end
111
- end
112
-
113
- Compressors = { "none" => Compressor.new }
114
- Decompressors = { "none" => Decompressor.new }
115
- end
116
-
117
- class TC_OutgoingPacketStream < Test::Unit::TestCase
118
-
119
- def setup
120
- @stream = Net::SSH::Transport::OutgoingPacketStream.new(
121
- PacketStream_Mock::CipherFactory.new( PacketStream_Mock::Cipher ),
122
- PacketStream_Mock::HMACFactory.new,
123
- PacketStream_Mock::Compressors )
124
- @socket = PacketStream_Mock::Socket.new
125
- @stream.socket = @socket
126
- end
127
-
128
- def test_send_empty
129
- assert_equal 0, @stream.sequence_number
130
- @stream.send( "" )
131
- assert_equal 1, @stream.sequence_number
132
- assert_match( %r{^!\0\0\0\24\21<>.................!\0\0\0\0\0\0\0\24$}m, @socket.send_buffer )
133
- end
134
-
135
- def test_send_nonstring
136
- assert_equal 0, @stream.sequence_number
137
- @stream.send( 15 )
138
- assert_equal 1, @stream.sequence_number
139
- assert_match( %r{^!\0\0\0\24\17<15>...............!\0\0\0\0\0\0\0\24$}m, @socket.send_buffer )
140
- end
141
-
142
- def test_send_long_string
143
- assert_equal 0, @stream.sequence_number
144
- @stream.send( "12345678901234567" )
145
- assert_equal 1, @stream.sequence_number
146
- assert_match( %r{^!\0\0\0\34\10<12345678901234567>........!\0\0\0\0\0\0\0\034$}m, @socket.send_buffer )
147
- end
148
-
149
- end
150
-
151
- class TC_IncomingPacketStream < Test::Unit::TestCase
152
-
153
- class MockLog
154
- def debug?
155
- false
156
- end
157
- end
158
-
159
- def setup
160
- @stream = Net::SSH::Transport::IncomingPacketStream.new(
161
- PacketStream_Mock::CipherFactory.new( PacketStream_Mock::NullCipher ),
162
- PacketStream_Mock::HMACFactory.new,
163
- PacketStream_Mock::Decompressors )
164
- @stream.buffers = PacketStream_Mock::BufferFactory.new
165
- @stream.log = MockLog.new
166
- end
167
-
168
- def test_get_empty
169
- @stream.socket = PacketStream_Mock::Socket.new( "\0\0\0\21\0201234567890123456\0\0\0\0\0\0\0\21" )
170
- assert_equal 0, @stream.sequence_number
171
- buffer = @stream.get
172
- assert_equal 1, @stream.sequence_number
173
- assert_equal 0, buffer.length
174
- end
175
-
176
- def test_get_long
177
- @stream.socket = PacketStream_Mock::Socket.new( "\0\0\0\32\020ABCDEFGHI1234567890123456\0\0\0\0\0\0\0\32" )
178
- assert_equal 0, @stream.sequence_number
179
- buffer = @stream.get
180
- assert_equal 1, @stream.sequence_number
181
- assert_equal 9, buffer.length
182
- assert_equal "ABCDEFGHI", buffer.to_s
183
- end
184
- end