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,46 +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
- require 'net/ssh/transport/ossl/hmac/hmac'
18
-
19
- module Net
20
- module SSH
21
- module Transport
22
- module OSSL
23
-
24
- module HMAC
25
-
26
- # The "none" algorithm. This has a key and mac length of 0.
27
- class None < Abstract
28
-
29
- # Create a new instance of the None HMAC algorithm.
30
- def initialize
31
- @key_length = @mac_length = 0
32
- end
33
-
34
- # Always returns the empty string.
35
- def digest( data )
36
- ""
37
- end
38
-
39
- end
40
-
41
- end
42
-
43
- end
44
- end
45
- end
46
- end
@@ -1,68 +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
- module Net
18
- module SSH
19
- module Transport
20
- module OSSL
21
- module HMAC
22
-
23
- # Register all services that implement the various support
24
- # HMAC algorithms.
25
- def register_services( container )
26
- container.namespace_define :hmac do |space|
27
-
28
- # Register each supported HMAC algorithm.
29
- %w{sha1 sha1-96 md5 md5-96}.each do |name|
30
- space.__send__( name.sub(/-/, "_").intern ) do
31
- require "net/ssh/transport/ossl/hmac/#{name}"
32
- const_get( name.upcase.sub(/-/, "_").intern ).new
33
- end
34
- end
35
-
36
- # The :none service is trivial--simply doing as much of nothing
37
- # as possible. This is for consistency in how HMAC's are handled,
38
- # since it is possible to not have an HMAC for part of the
39
- # communication cycle.
40
- space.none do
41
- require "net/ssh/transport/ossl/hmac/none"
42
- None.new
43
- end
44
-
45
- # Add the implementations to a hash, naming them according to the
46
- # SSH2 specification.
47
- space.collection do |c,|
48
- Hash[ "hmac-sha1" => c.sha1,
49
- "hmac-sha1-96" => c.sha1_96,
50
- "hmac-md5" => c.md5,
51
- "hmac-md5-96" => c.md5_96,
52
- "none" => c.none ]
53
- end
54
-
55
- # Add the collection of algorithms to the list of known HMAC
56
- # algorithm sources.
57
- if space.knows_key?( :hmac_algorithm_sources )
58
- space.hmac_algorithm_sources << space.collection
59
- end
60
- end
61
- end
62
- module_function :register_services
63
-
64
- end
65
- end
66
- end
67
- end
68
- end
@@ -1,44 +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
- require 'net/ssh/transport/ossl/hmac/sha1'
18
- require 'openssl'
19
-
20
- module Net
21
- module SSH
22
- module Transport
23
- module OSSL
24
-
25
- module HMAC
26
-
27
- # The SHA1-96 HMAC algorithm. This returns only the first 12 bytes of
28
- # the digest.
29
- class SHA1_96 < SHA1
30
-
31
- # Create a new instance of the SHA1-96 algorithm.
32
- def initialize
33
- super
34
- @mac_length = 12
35
- end
36
-
37
- end
38
-
39
- end
40
-
41
- end
42
- end
43
- end
44
- end
@@ -1,45 +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
- require 'net/ssh/transport/ossl/hmac/hmac'
18
- require 'openssl'
19
-
20
- module Net
21
- module SSH
22
- module Transport
23
- module OSSL
24
-
25
- module HMAC
26
-
27
- # The SHA1 HMAC algorithm. This has a mac and key length of 20, and
28
- # uses the SHA1 digest algorithm.
29
- class SHA1 < Abstract
30
-
31
- # Create a new instance of the SHA1 HMAC algorithm.
32
- def initialize
33
- @mac_length = 20
34
- @digest_class = OpenSSL::Digest::SHA1
35
- @key_length = 20
36
- end
37
-
38
- end
39
-
40
- end
41
-
42
- end
43
- end
44
- end
45
- end
@@ -1,116 +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
- require 'base64'
18
- require 'net/ssh/transport/errors'
19
- require 'net/ssh/util/openssl'
20
-
21
- module Net
22
- module SSH
23
- module Transport
24
-
25
- module OSSL
26
-
27
- # A factory class for returning new Key algorithm factories (actually
28
- # classes).
29
- class KeyFactory
30
-
31
- # The setter for the buffer factory to use.
32
- attr_writer :buffers
33
-
34
- # The setter for describing which prompter service to use when
35
- # prompting the user for a key passphrase.
36
- attr_writer :prompter
37
-
38
- # Create a new instance of the KeyFactory that uses the given
39
- # Hash-like to map SSH2 key algorithm names to names of
40
- # factories (classes) that can instantiate those algorithms.
41
- def initialize( algorithms )
42
- @factories = algorithms
43
- end
44
-
45
- # Return a new instance of the key factory for the given name.
46
- # If no such algorithm exists, a KeyTypeNotFound error will be raised.
47
- def get( name )
48
- klass_name = @factories.fetch( name ) do
49
- raise KeyTypeNotFound, name
50
- end
51
-
52
- return klass_name.new
53
- end
54
-
55
- # Loads a private key from a file. It will correctly determine
56
- # whether the file describes an RSA or DSA key, and will load it
57
- # appropriately. The new key is returned. If the key itself is
58
- # encrypted (requiring a passphrase to use), the user will be
59
- # prompted to enter their password.
60
- def load_private_key( filename )
61
- file = File.read( filename )
62
-
63
- if file.match( /-----BEGIN DSA PRIVATE KEY-----/ )
64
- key_type = OpenSSL::PKey::DSA
65
- elsif file.match( /-----BEGIN RSA PRIVATE KEY-----/ )
66
- key_type = OpenSSL::PKey::RSA
67
- elsif file.match( /-----BEGIN (.*) PRIVATE KEY-----/ )
68
- raise OpenSSL::PKey::PKeyError, "not a supported key type '#{$1}'"
69
- else
70
- raise OpenSSL::PKey::PKeyError, "not a private key (#{filename})"
71
- end
72
-
73
- encrypted_key = file.match( /ENCRYPTED/ )
74
- password = encrypted_key ? 'nil' : nil
75
- tries = 0
76
-
77
- begin
78
- return key_type.new( file, password )
79
- rescue OpenSSL::PKey::RSAError, OpenSSL::PKey::DSAError => e
80
- if encrypted_key && @prompter
81
- tries += 1
82
- if tries <= 3
83
- password = @prompter.password(
84
- "Enter password for #{filename}: " )
85
- retry
86
- else
87
- raise
88
- end
89
- else
90
- raise
91
- end
92
- end
93
- end
94
-
95
- # Loads a public key from a file. It will correctly determine whether
96
- # the file describes an RSA or DSA key, and will load it
97
- # appropriately. The new public key is returned.
98
- def load_public_key( filename )
99
- data = File.open( filename ) { |file| file.read }
100
- type, blob = data.split( / / )
101
-
102
- blob = Base64.decode64( blob )
103
- reader = @buffers.reader( blob )
104
- key = reader.read_key or
105
- raise OpenSSL::PKey::PKeyError,
106
- "not a public key #{filename.inspect}"
107
- return key
108
- end
109
-
110
- end
111
-
112
- end
113
-
114
- end
115
- end
116
- end
@@ -1,149 +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
- require 'openssl'
18
-
19
- module Net
20
- module SSH
21
- module Transport
22
- module OSSL
23
-
24
- # Register all OpenSSL-related services.
25
- def register_services( container )
26
- # make sure the user has a valid Ruby and OpenSSL installed.
27
- version_check
28
-
29
- # Register all OpenSSL services in the :ossl namespace.
30
- container.namespace_define :ossl do |b|
31
-
32
- # The list of known sources of HMAC algorithm implementations.
33
- b.hmac_algorithm_sources { Array.new }
34
- b.require 'net/ssh/transport/ossl/hmac/services', "#{self}::HMAC"
35
-
36
- # The hash mapping SSH2 cipher names to OpenSSL cipher names.
37
- b.cipher_names do
38
- Hash[ "3des-cbc" => "des-ede3-cbc",
39
- "blowfish-cbc" => "bf-cbc",
40
- "aes256-cbc" => "aes-256-cbc",
41
- "aes192-cbc" => "aes-192-cbc",
42
- "aes128-cbc" => "aes-128-cbc",
43
- "idea-cbc" => "idea-cbc",
44
- "none" => "none" ]
45
- end
46
-
47
- # The hash mapping key names to OpenSSL key implementations.
48
- b.key_names do
49
- Hash[ "dh" => OpenSSL::PKey::DH,
50
- "rsa" => OpenSSL::PKey::RSA,
51
- "dsa" => OpenSSL::PKey::DSA ]
52
- end
53
-
54
- # The hash mapping digest names to OpenSSL digest implementations.
55
- b.digest_names do
56
- Hash[ "sha1" => OpenSSL::Digest::SHA1,
57
- "md5" => OpenSSL::Digest::MD5 ]
58
- end
59
-
60
- # The factory for converting cipher names to cipher implementations.
61
- b.cipher_factory( :model => :singleton_deferred ) do |c,p|
62
- require 'net/ssh/transport/ossl/cipher-factory'
63
- svc = CipherFactory.new( c.cipher_names )
64
- svc.identity_cipher = c.identity_cipher
65
- svc
66
- end
67
-
68
- # The factory for converting HMAC names to HMAC implementations.
69
- b.hmac_factory( :model => :singleton_deferred ) do |c,p|
70
- require 'net/ssh/transport/ossl/hmac-factory'
71
- HMACFactory.new( c.hmac_algorithm_sources )
72
- end
73
-
74
- # The factory for obtaining OpenSSL-specific buffer implementations.
75
- b.buffer_factory do
76
- require 'net/ssh/transport/ossl/buffer-factory'
77
- BufferFactory.new
78
- end
79
-
80
- # The factory for converting key names to key implementations.
81
- b.key_factory( :model => :singleton_deferred ) do |c,p|
82
- require 'net/ssh/transport/ossl/key-factory'
83
- svc = KeyFactory.new( c.key_names )
84
- svc.buffers = c.buffer_factory
85
- svc.prompter = c.prompter if c.knows_key?( :prompter )
86
- svc
87
- end
88
-
89
- # The factory for creating OpenSSL::BN (big number) instances.
90
- b.bn_factory { OpenSSL::BN }
91
-
92
- # The factory for converting digest names to digest implementations.
93
- b.digest_factory do |c,p|
94
- require 'net/ssh/transport/ossl/digest-factory'
95
- DigestFactory.new( c.digest_names )
96
- end
97
-
98
- end
99
-
100
- # Register each of the factories defined above in the corresponding
101
- # factory map, under the :ossl key.
102
- container.define do |b|
103
- b.cipher_factories[:ossl] = b.ossl.cipher_factory
104
- b.hmac_factories[:ossl] = b.ossl.hmac_factory
105
- b.key_factories[:ossl] = b.ossl.key_factory
106
- b.buffer_factories[:ossl] = b.ossl.buffer_factory
107
- b.bn_factories[:ossl] = b.ossl.bn_factory
108
- b.digest_factories[:ossl] = b.ossl.digest_factory
109
- end
110
- end
111
- module_function :register_services
112
-
113
- # Tries to make sure that the correct minimum versions of libraries are
114
- # installed.
115
- def version_check
116
- if RUBY_VERSION < "1.8.2"
117
- unless OpenSSL::PKey::DH.instance_methods.include? "p"
118
- warn "Your OpenSSL module (the Ruby module, not the library)\n" +
119
- "is too old. Please go to the Net::SSH downloads page\n" +
120
- "and install the most recent snapshot of the OpenSSL\n" +
121
- "module.\n\n" +
122
- " http://rubyforge.org/projects/net-ssh"
123
- abort
124
- end
125
- end
126
-
127
- # make sure that the OpenSSL library itself is at least version 0.9.7
128
- match = OpenSSL::OPENSSL_VERSION.match(
129
- /OpenSSL (\d+)\.(\d+)\.(\d+)(.*?) / )
130
- major = match[1].to_i
131
- minor = match[2].to_i
132
- tiny = match[3].to_i
133
- patch = match[4]
134
-
135
- if major < 1 && ( minor < 9 || minor == 9 && tiny < 7 )
136
- ver = "#{major}.#{minor}.#{tiny}#{patch}"
137
- warn "Your OpenSSL library (the library itself, not the Ruby\n" +
138
- "module) is version #{ver}, too old to use with Net::SSH.\n" +
139
- "Please upgrade to at least version 0.9.7 and then rebuild\n" +
140
- "your Ruby OpenSSL module."
141
- abort
142
- end
143
- end
144
- module_function :version_check
145
-
146
- end
147
- end
148
- end
149
- end