net-ssh 0.5.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 (179) hide show
  1. data/doc/LICENSE-BSD +27 -0
  2. data/doc/LICENSE-GPL +280 -0
  3. data/doc/LICENSE-RUBY +56 -0
  4. data/doc/README +13 -0
  5. data/doc/manual-html/chapter-1.html +333 -0
  6. data/doc/manual-html/chapter-2.html +455 -0
  7. data/doc/manual-html/chapter-3.html +413 -0
  8. data/doc/manual-html/chapter-4.html +353 -0
  9. data/doc/manual-html/chapter-5.html +393 -0
  10. data/doc/manual-html/chapter-6.html +296 -0
  11. data/doc/manual-html/index.html +217 -0
  12. data/doc/manual-html/manual.css +192 -0
  13. data/doc/manual/chapter.erb +18 -0
  14. data/doc/manual/example.erb +18 -0
  15. data/doc/manual/index.erb +29 -0
  16. data/doc/manual/manual.css +192 -0
  17. data/doc/manual/manual.rb +240 -0
  18. data/doc/manual/manual.yml +67 -0
  19. data/doc/manual/page.erb +87 -0
  20. data/doc/manual/parts/channels_callbacks.txt +32 -0
  21. data/doc/manual/parts/channels_loop.txt +14 -0
  22. data/doc/manual/parts/channels_open.txt +20 -0
  23. data/doc/manual/parts/channels_operations.txt +15 -0
  24. data/doc/manual/parts/channels_types.txt +3 -0
  25. data/doc/manual/parts/channels_what_are.txt +7 -0
  26. data/doc/manual/parts/exec_channels.txt +28 -0
  27. data/doc/manual/parts/exec_open.txt +51 -0
  28. data/doc/manual/parts/exec_popen3.txt +35 -0
  29. data/doc/manual/parts/forward_direct.txt +37 -0
  30. data/doc/manual/parts/forward_handlers.txt +16 -0
  31. data/doc/manual/parts/forward_intro.txt +18 -0
  32. data/doc/manual/parts/forward_local.txt +18 -0
  33. data/doc/manual/parts/forward_remote.txt +14 -0
  34. data/doc/manual/parts/intro_author.txt +1 -0
  35. data/doc/manual/parts/intro_getting.txt +39 -0
  36. data/doc/manual/parts/intro_license.txt +6 -0
  37. data/doc/manual/parts/intro_support.txt +7 -0
  38. data/doc/manual/parts/intro_what_is.txt +7 -0
  39. data/doc/manual/parts/intro_what_is_not.txt +3 -0
  40. data/doc/manual/parts/proxy_http.txt +52 -0
  41. data/doc/manual/parts/proxy_intro.txt +1 -0
  42. data/doc/manual/parts/proxy_socks.txt +23 -0
  43. data/doc/manual/parts/session_key.txt +66 -0
  44. data/doc/manual/parts/session_options.txt +42 -0
  45. data/doc/manual/parts/session_session.txt +14 -0
  46. data/doc/manual/parts/session_start.txt +49 -0
  47. data/doc/manual/tutorial.erb +30 -0
  48. data/examples/channel-demo.rb +81 -0
  49. data/examples/port-forward.rb +51 -0
  50. data/examples/process-demo.rb +91 -0
  51. data/examples/remote-net-port-forward.rb +45 -0
  52. data/examples/remote-port-forward.rb +80 -0
  53. data/examples/tail-demo.rb +49 -0
  54. data/lib/net/ssh.rb +52 -0
  55. data/lib/net/ssh/connection/channel.rb +411 -0
  56. data/lib/net/ssh/connection/constants.rb +47 -0
  57. data/lib/net/ssh/connection/driver.rb +343 -0
  58. data/lib/net/ssh/connection/services.rb +72 -0
  59. data/lib/net/ssh/connection/term.rb +90 -0
  60. data/lib/net/ssh/errors.rb +27 -0
  61. data/lib/net/ssh/proxy/errors.rb +34 -0
  62. data/lib/net/ssh/proxy/http.rb +126 -0
  63. data/lib/net/ssh/proxy/socks4.rb +83 -0
  64. data/lib/net/ssh/proxy/socks5.rb +160 -0
  65. data/lib/net/ssh/service/forward/driver.rb +319 -0
  66. data/lib/net/ssh/service/forward/local-network-handler.rb +74 -0
  67. data/lib/net/ssh/service/forward/remote-network-handler.rb +81 -0
  68. data/lib/net/ssh/service/forward/services.rb +76 -0
  69. data/lib/net/ssh/service/process/driver.rb +153 -0
  70. data/lib/net/ssh/service/process/open.rb +193 -0
  71. data/lib/net/ssh/service/process/popen3.rb +160 -0
  72. data/lib/net/ssh/service/process/services.rb +66 -0
  73. data/lib/net/ssh/service/services.rb +44 -0
  74. data/lib/net/ssh/session.rb +242 -0
  75. data/lib/net/ssh/transport/algorithm-negotiator.rb +267 -0
  76. data/lib/net/ssh/transport/compress/compressor.rb +53 -0
  77. data/lib/net/ssh/transport/compress/decompressor.rb +53 -0
  78. data/lib/net/ssh/transport/compress/none-compressor.rb +39 -0
  79. data/lib/net/ssh/transport/compress/none-decompressor.rb +39 -0
  80. data/lib/net/ssh/transport/compress/services.rb +68 -0
  81. data/lib/net/ssh/transport/compress/zlib-compressor.rb +60 -0
  82. data/lib/net/ssh/transport/compress/zlib-decompressor.rb +52 -0
  83. data/lib/net/ssh/transport/constants.rb +66 -0
  84. data/lib/net/ssh/transport/errors.rb +47 -0
  85. data/lib/net/ssh/transport/identity-cipher.rb +61 -0
  86. data/lib/net/ssh/transport/kex/dh-gex.rb +106 -0
  87. data/lib/net/ssh/transport/kex/dh.rb +231 -0
  88. data/lib/net/ssh/transport/kex/services.rb +60 -0
  89. data/lib/net/ssh/transport/ossl/buffer-factory.rb +52 -0
  90. data/lib/net/ssh/transport/ossl/buffer.rb +87 -0
  91. data/lib/net/ssh/transport/ossl/cipher-factory.rb +98 -0
  92. data/lib/net/ssh/transport/ossl/digest-factory.rb +51 -0
  93. data/lib/net/ssh/transport/ossl/hmac-factory.rb +71 -0
  94. data/lib/net/ssh/transport/ossl/hmac/hmac.rb +62 -0
  95. data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +44 -0
  96. data/lib/net/ssh/transport/ossl/hmac/md5.rb +46 -0
  97. data/lib/net/ssh/transport/ossl/hmac/none.rb +46 -0
  98. data/lib/net/ssh/transport/ossl/hmac/services.rb +68 -0
  99. data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +44 -0
  100. data/lib/net/ssh/transport/ossl/hmac/sha1.rb +45 -0
  101. data/lib/net/ssh/transport/ossl/key-factory.rb +113 -0
  102. data/lib/net/ssh/transport/ossl/services.rb +149 -0
  103. data/lib/net/ssh/transport/packet-stream.rb +210 -0
  104. data/lib/net/ssh/transport/services.rb +146 -0
  105. data/lib/net/ssh/transport/session.rb +296 -0
  106. data/lib/net/ssh/transport/version-negotiator.rb +73 -0
  107. data/lib/net/ssh/userauth/agent.rb +218 -0
  108. data/lib/net/ssh/userauth/constants.rb +35 -0
  109. data/lib/net/ssh/userauth/driver.rb +176 -0
  110. data/lib/net/ssh/userauth/methods/hostbased.rb +119 -0
  111. data/lib/net/ssh/userauth/methods/password.rb +70 -0
  112. data/lib/net/ssh/userauth/methods/publickey.rb +137 -0
  113. data/lib/net/ssh/userauth/methods/services.rb +63 -0
  114. data/lib/net/ssh/userauth/services.rb +126 -0
  115. data/lib/net/ssh/userauth/userkeys.rb +258 -0
  116. data/lib/net/ssh/util/buffer.rb +274 -0
  117. data/lib/net/ssh/util/openssl.rb +146 -0
  118. data/lib/net/ssh/util/prompter.rb +73 -0
  119. data/lib/net/ssh/version.rb +29 -0
  120. data/test/ALL-TESTS.rb +21 -0
  121. data/test/connection/tc_channel.rb +136 -0
  122. data/test/connection/tc_driver.rb +287 -0
  123. data/test/connection/tc_integration.rb +85 -0
  124. data/test/proxy/tc_http.rb +209 -0
  125. data/test/proxy/tc_socks4.rb +148 -0
  126. data/test/proxy/tc_socks5.rb +214 -0
  127. data/test/service/forward/tc_driver.rb +289 -0
  128. data/test/service/forward/tc_local_network_handler.rb +123 -0
  129. data/test/service/forward/tc_remote_network_handler.rb +108 -0
  130. data/test/service/process/tc_driver.rb +79 -0
  131. data/test/service/process/tc_integration.rb +117 -0
  132. data/test/service/process/tc_open.rb +179 -0
  133. data/test/service/process/tc_popen3.rb +164 -0
  134. data/test/tc_integration.rb +79 -0
  135. data/test/transport/compress/tc_none_compress.rb +41 -0
  136. data/test/transport/compress/tc_none_decompress.rb +45 -0
  137. data/test/transport/compress/tc_zlib_compress.rb +61 -0
  138. data/test/transport/compress/tc_zlib_decompress.rb +48 -0
  139. data/test/transport/kex/tc_dh.rb +304 -0
  140. data/test/transport/kex/tc_dh_gex.rb +70 -0
  141. data/test/transport/ossl/fixtures/dsa-encrypted +15 -0
  142. data/test/transport/ossl/fixtures/dsa-encrypted-bad +15 -0
  143. data/test/transport/ossl/fixtures/dsa-unencrypted +12 -0
  144. data/test/transport/ossl/fixtures/dsa-unencrypted-bad +12 -0
  145. data/test/transport/ossl/fixtures/dsa-unencrypted.pub +1 -0
  146. data/test/transport/ossl/fixtures/not-a-private-key +4 -0
  147. data/test/transport/ossl/fixtures/not-supported +2 -0
  148. data/test/transport/ossl/fixtures/rsa-encrypted +18 -0
  149. data/test/transport/ossl/fixtures/rsa-encrypted-bad +18 -0
  150. data/test/transport/ossl/fixtures/rsa-unencrypted +15 -0
  151. data/test/transport/ossl/fixtures/rsa-unencrypted-bad +15 -0
  152. data/test/transport/ossl/fixtures/rsa-unencrypted.pub +1 -0
  153. data/test/transport/ossl/hmac/tc_hmac.rb +58 -0
  154. data/test/transport/ossl/hmac/tc_md5.rb +50 -0
  155. data/test/transport/ossl/hmac/tc_md5_96.rb +50 -0
  156. data/test/transport/ossl/hmac/tc_none.rb +50 -0
  157. data/test/transport/ossl/hmac/tc_sha1.rb +50 -0
  158. data/test/transport/ossl/hmac/tc_sha1_96.rb +50 -0
  159. data/test/transport/ossl/tc_buffer.rb +97 -0
  160. data/test/transport/ossl/tc_buffer_factory.rb +67 -0
  161. data/test/transport/ossl/tc_cipher_factory.rb +84 -0
  162. data/test/transport/ossl/tc_digest_factory.rb +39 -0
  163. data/test/transport/ossl/tc_hmac_factory.rb +72 -0
  164. data/test/transport/ossl/tc_key_factory.rb +199 -0
  165. data/test/transport/tc_algorithm_negotiator.rb +169 -0
  166. data/test/transport/tc_identity_cipher.rb +52 -0
  167. data/test/transport/tc_integration.rb +110 -0
  168. data/test/transport/tc_packet_stream.rb +183 -0
  169. data/test/transport/tc_session.rb +283 -0
  170. data/test/transport/tc_version_negotiator.rb +86 -0
  171. data/test/userauth/methods/tc_hostbased.rb +136 -0
  172. data/test/userauth/methods/tc_password.rb +89 -0
  173. data/test/userauth/methods/tc_publickey.rb +167 -0
  174. data/test/userauth/tc_agent.rb +223 -0
  175. data/test/userauth/tc_driver.rb +190 -0
  176. data/test/userauth/tc_integration.rb +81 -0
  177. data/test/userauth/tc_userkeys.rb +265 -0
  178. data/test/util/tc_buffer.rb +217 -0
  179. metadata +256 -0
@@ -0,0 +1,50 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/hmac/sha1-96'
20
+ require 'test/unit'
21
+
22
+ class TC_HMAC_SHA1_96 < Test::Unit::TestCase
23
+
24
+ def setup
25
+ @hmac = Net::SSH::Transport::OSSL::HMAC::SHA1_96.new.new( "1234567890123456789012345" )
26
+ end
27
+
28
+ def test_key
29
+ assert_equal "12345678901234567890", @hmac.key
30
+ end
31
+
32
+ def test_key_length
33
+ assert_equal 20, @hmac.key_length
34
+ end
35
+
36
+ def test_mac_length
37
+ assert_equal 12, @hmac.mac_length
38
+ end
39
+
40
+ def test_digest_class
41
+ assert_equal OpenSSL::Digest::SHA1, @hmac.digest_class
42
+ end
43
+
44
+ def test_digest
45
+ expect = "\203\266\253\336\242\311zE\360~\325j"
46
+ assert_equal expect,
47
+ @hmac.digest( "To be, or not to be, that is the question" )
48
+ end
49
+
50
+ end
@@ -0,0 +1,97 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/buffer'
20
+ require 'test/unit'
21
+
22
+ class TC_OSSLBuffer < Test::Unit::TestCase
23
+
24
+ def setup
25
+ @buffer = Net::SSH::Transport::OSSL::ReaderBuffer.new( "" )
26
+ end
27
+
28
+ def test_read_bignum
29
+ @buffer.append "\x00\x00\x00\x01\x01" +
30
+ "\x00\x00\x00\x04\x12\x34\x56\x78" +
31
+ "\x00\x00\x00\x07\x00\xAB\xCD\xEF\x12\x34\x56"
32
+ a = @buffer.read_bignum
33
+ b = @buffer.read_bignum
34
+ c = @buffer.read_bignum
35
+ d = @buffer.read_bignum
36
+ assert_equal 0x01, a
37
+ assert_equal 0x12345678, b
38
+ assert_equal 0xABCDEF123456, c
39
+ assert_nil d
40
+ end
41
+
42
+ def test_read_key
43
+ @buffer.append "\x00\x00\x00\x07ssh-dss" +
44
+ "\x00\x00\x00\x01\x01" +
45
+ "\x00\x00\x00\x01\x02" +
46
+ "\x00\x00\x00\x01\x03" +
47
+ "\x00\x00\x00\x01\x04" +
48
+ "\x00\x00\x00\x07ssh-rsa" +
49
+ "\x00\x00\x00\x01\x01" +
50
+ "\x00\x00\x00\x01\x02"
51
+
52
+ k1 = @buffer.read_key
53
+ k2 = @buffer.read_key
54
+ k3 = @buffer.read_key
55
+
56
+ assert_instance_of OpenSSL::PKey::DSA, k1
57
+ assert_instance_of OpenSSL::PKey::RSA, k2
58
+ assert_equal 0x01, k1.p
59
+ assert_equal 0x02, k1.q
60
+ assert_equal 0x03, k1.g
61
+ assert_equal 0x04, k1.pub_key
62
+ assert_equal 0x01, k2.e
63
+ assert_equal 0x02, k2.n
64
+ assert_nil k3
65
+ end
66
+
67
+ def test_read_keyblob
68
+ blob1 = "\x00\x00\x00\x01\x01" +
69
+ "\x00\x00\x00\x01\x02" +
70
+ "\x00\x00\x00\x01\x03" +
71
+ "\x00\x00\x00\x01\x04" +
72
+
73
+ blob2 = "\x00\x00\x00\x01\x01" +
74
+ "\x00\x00\x00\x01\x02"
75
+
76
+ @buffer.append blob1
77
+ @buffer.append blob2
78
+
79
+ k1 = @buffer.read_keyblob( "ssh-dss" )
80
+ k2 = @buffer.read_keyblob( "ssh-rsa" )
81
+
82
+ assert_raises( NotImplementedError ) do
83
+ k3 = @buffer.read_keyblob( "bogus" )
84
+ end
85
+
86
+ assert_instance_of OpenSSL::PKey::DSA, k1
87
+ assert_instance_of OpenSSL::PKey::RSA, k2
88
+ assert_equal 0x01, k1.p
89
+ assert_equal 0x02, k1.q
90
+ assert_equal 0x03, k1.g
91
+ assert_equal 0x04, k1.pub_key
92
+ assert_equal 0x01, k2.e
93
+ assert_equal 0x02, k2.n
94
+ end
95
+
96
+
97
+ end
@@ -0,0 +1,67 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/buffer-factory'
20
+ require 'test/unit'
21
+
22
+ class TC_OSSLBufferFactory < Test::Unit::TestCase
23
+
24
+ def setup
25
+ @factory = Net::SSH::Transport::OSSL::BufferFactory.new
26
+ end
27
+
28
+ def test_reader
29
+ reader = @factory.reader( "test" )
30
+ assert_instance_of Net::SSH::Transport::OSSL::ReaderBuffer, reader
31
+ end
32
+
33
+ def test_reader_interface
34
+ reader = @factory.reader( "test" )
35
+ assert_respond_to reader, :read_key
36
+ assert_respond_to reader, :read_keyblob
37
+ assert_respond_to reader, :read_bignum
38
+ end
39
+
40
+ def test_reader_init
41
+ reader = @factory.reader( "test" )
42
+ assert_equal "test", reader.to_s
43
+ end
44
+
45
+ def test_buffer
46
+ buffer = @factory.buffer
47
+ assert_instance_of Net::SSH::Transport::OSSL::Buffer, buffer
48
+ end
49
+
50
+ def test_buffer_interface
51
+ buffer = @factory.buffer
52
+ assert_respond_to buffer, :read_key
53
+ assert_respond_to buffer, :read_keyblob
54
+ assert_respond_to buffer, :read_bignum
55
+ end
56
+
57
+ def test_buffer_init
58
+ buffer = @factory.reader( "test" )
59
+ assert_equal "test", buffer.to_s
60
+ end
61
+
62
+ def test_writer_buffer
63
+ buffer = @factory.writer
64
+ assert_instance_of Net::SSH::Util::WriterBuffer, buffer
65
+ end
66
+
67
+ end
@@ -0,0 +1,84 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/cipher-factory'
20
+ require 'test/unit'
21
+
22
+ class TC_CipherFactory < Test::Unit::TestCase
23
+
24
+ MockCipher = Object.new
25
+
26
+ def setup
27
+ map = { "bf" => "bf", "none" => "none" }
28
+ @factory = Net::SSH::Transport::OSSL::CipherFactory.new( map )
29
+ @factory.identity_cipher = MockCipher
30
+ end
31
+
32
+ def test_none
33
+ cipher = @factory.get( "none" )
34
+ assert_equal MockCipher, cipher
35
+ end
36
+
37
+ def test_bad_cipher
38
+ assert_raise( Net::SSH::Transport::CipherNotFound ) do
39
+ @factory.get "bogus"
40
+ end
41
+ end
42
+
43
+ def test_cipher_short
44
+ cipher = @factory.get( "bf", "1234", "1234", "IJKL", "MNOP",
45
+ OpenSSL::Digest::MD5, true )
46
+
47
+ text = cipher.update( "12345678" )
48
+ text << cipher.final
49
+
50
+ assert_equal "\335\027\034\242?\243\0054", text
51
+ end
52
+
53
+ def test_cipher_exact
54
+ cipher = @factory.get( "bf", "12345678", "1234567890123456", "IJKL",
55
+ "MNOP", OpenSSL::Digest::MD5, true )
56
+
57
+ text = cipher.update( "12345678" )
58
+ text << cipher.final
59
+
60
+ assert_equal "\030&\317\021\363\200|E", text
61
+ end
62
+
63
+ def test_cipher_long
64
+ cipher = @factory.get( "bf", "1234567890", "123456789012345678", "IJKL",
65
+ "MNOP", OpenSSL::Digest::MD5, true )
66
+
67
+ text = cipher.update( "12345678" )
68
+ text << cipher.final
69
+
70
+ assert_equal "\030&\317\021\363\200|E", text
71
+ end
72
+
73
+ def test_cipher_lengths
74
+ result = @factory.get_lengths( "bogus" )
75
+ assert [0, 0], result
76
+
77
+ result = @factory.get_lengths( "none" )
78
+ assert [0, 0], result
79
+
80
+ result = @factory.get_lengths( "bf" )
81
+ assert [16, 8], result
82
+ end
83
+
84
+ end
@@ -0,0 +1,39 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/digest-factory'
20
+ require 'test/unit'
21
+
22
+ class TC_OSSLDigestFactory < Test::Unit::TestCase
23
+
24
+ def setup
25
+ map = { "test" => "hello" }
26
+ @factory = Net::SSH::Transport::OSSL::DigestFactory.new( map )
27
+ end
28
+
29
+ def test_get_not_found
30
+ assert_raise( Net::SSH::Transport::DigestTypeNotFound ) do
31
+ @factory.get( "bogus" )
32
+ end
33
+ end
34
+
35
+ def test_get_found
36
+ assert_equal "hello", @factory.get( "test" )
37
+ end
38
+
39
+ end
@@ -0,0 +1,72 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/hmac-factory'
20
+ require 'test/unit'
21
+
22
+ class TC_HMACFactory < Test::Unit::TestCase
23
+
24
+ class MockHMAC
25
+ attr_reader :key_length
26
+ attr_reader :key
27
+
28
+ def initialize
29
+ @key_length = 8
30
+ end
31
+
32
+ def new( key )
33
+ @key = key
34
+ self
35
+ end
36
+ end
37
+
38
+ def setup
39
+ map = [ { "test" => MockHMAC.new } ]
40
+ @factory = Net::SSH::Transport::OSSL::HMACFactory.new( map )
41
+ end
42
+
43
+ def test_get_not_found
44
+ assert_raise( Net::SSH::Transport::HMACAlgorithmNotFound ) do
45
+ @factory.get( "bogus" )
46
+ end
47
+ end
48
+
49
+ def test_get_found
50
+ hmac = nil
51
+ assert_nothing_raised do
52
+ hmac = @factory.get( "test", "12345678" )
53
+ end
54
+ assert_equal 8, hmac.key_length
55
+ assert_equal "12345678", hmac.key
56
+ end
57
+
58
+ def test_get_key_length_not_found
59
+ assert_raise( Net::SSH::Transport::HMACAlgorithmNotFound ) do
60
+ @factory.get_key_length( "bogus" )
61
+ end
62
+ end
63
+
64
+ def test_get_key_length_found
65
+ length = nil
66
+ assert_nothing_raised do
67
+ length = @factory.get_key_length( "test" )
68
+ end
69
+ assert_equal 8, length
70
+ end
71
+
72
+ end
@@ -0,0 +1,199 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
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 "../../../lib"
18
+
19
+ require 'net/ssh/transport/ossl/buffer'
20
+ require 'net/ssh/transport/ossl/key-factory'
21
+ require 'test/unit'
22
+
23
+ class TC_OSSLKeyFactory < Test::Unit::TestCase
24
+
25
+ class Prompter
26
+ def initialize( passwd )
27
+ @passwd = passwd
28
+ end
29
+
30
+ def password( prompt )
31
+ if @passwd.is_a? Array
32
+ @passwd.shift
33
+ else
34
+ @passwd
35
+ end
36
+ end
37
+ end
38
+
39
+ class Buffers
40
+ def reader( text )
41
+ Net::SSH::Transport::OSSL::ReaderBuffer.new( text )
42
+ end
43
+ end
44
+
45
+ def fixture( name )
46
+ "#{File.dirname __FILE__}/fixtures/#{name}"
47
+ end
48
+
49
+ def setup
50
+ algos = { "test" => String }
51
+ @factory = Net::SSH::Transport::OSSL::KeyFactory.new( algos )
52
+ @factory.buffers = Buffers.new
53
+ end
54
+
55
+ def test_get_found
56
+ key = nil
57
+ assert_nothing_raised { key = @factory.get( "test" ) }
58
+ assert_equal "", key
59
+ end
60
+
61
+ def test_get_not_found
62
+ assert_raise( Net::SSH::Transport::KeyTypeNotFound ) do
63
+ @factory.get( "bogus" )
64
+ end
65
+ end
66
+
67
+ def test_load_private_key_not_found
68
+ assert_raise( Errno::ENOENT ) do
69
+ @factory.load_private_key "bogus"
70
+ end
71
+ end
72
+
73
+ def test_load_private_key_not_supported
74
+ assert_raise( OpenSSL::PKey::PKeyError ) do
75
+ @factory.load_private_key fixture( "not-supported" )
76
+ end
77
+ end
78
+
79
+ def test_load_private_key_not_private_key
80
+ assert_raise( OpenSSL::PKey::PKeyError ) do
81
+ @factory.load_private_key fixture( "not-a-private-key" )
82
+ end
83
+ end
84
+
85
+ def test_load_private_key_dsa_unencrypted_fail
86
+ assert_raise( OpenSSL::PKey::DSAError ) do
87
+ @factory.load_private_key fixture( "dsa-unencrypted-bad" )
88
+ end
89
+ end
90
+
91
+ def test_load_private_key_dsa_unencrypted_success
92
+ result = nil
93
+ assert_nothing_raised do
94
+ result = @factory.load_private_key fixture( "dsa-unencrypted" )
95
+ end
96
+ assert_instance_of OpenSSL::PKey::DSA, result
97
+ end
98
+
99
+ def test_load_private_key_rsa_unencrypted_fail
100
+ assert_raise( OpenSSL::PKey::RSAError ) do
101
+ @factory.load_private_key fixture( "rsa-unencrypted-bad" )
102
+ end
103
+ end
104
+
105
+ def test_load_private_key_rsa_unencrypted_success
106
+ result = nil
107
+ assert_nothing_raised do
108
+ result = @factory.load_private_key fixture( "rsa-unencrypted" )
109
+ end
110
+ assert_instance_of OpenSSL::PKey::RSA, result
111
+ end
112
+
113
+ def test_load_private_key_dsa_encrypted_fail_bad
114
+ @factory.prompter = Prompter.new( "key-test" )
115
+ assert_raise( OpenSSL::PKey::DSAError ) do
116
+ @factory.load_private_key fixture( "dsa-encrypted-bad" )
117
+ end
118
+ end
119
+
120
+ def test_load_private_key_dsa_encrypted_fail_wrong_password
121
+ @factory.prompter = Prompter.new( "key-test-bad" )
122
+ assert_raise( OpenSSL::PKey::DSAError ) do
123
+ @factory.load_private_key fixture( "dsa-encrypted" )
124
+ end
125
+ end
126
+
127
+ def test_load_private_key_dsa_encrypted_success
128
+ @factory.prompter = Prompter.new( "key-test" )
129
+ result = nil
130
+ assert_nothing_raised do
131
+ result = @factory.load_private_key fixture( "dsa-encrypted" )
132
+ end
133
+ assert_instance_of OpenSSL::PKey::DSA, result
134
+ end
135
+
136
+ def test_load_private_key_rsa_encrypted_fail_bad
137
+ @factory.prompter = Prompter.new( "key-test" )
138
+ assert_raise( OpenSSL::PKey::RSAError ) do
139
+ @factory.load_private_key fixture( "rsa-encrypted-bad" )
140
+ end
141
+ end
142
+
143
+ def test_load_private_key_rsa_encrypted_fail_wrong_password
144
+ @factory.prompter = Prompter.new( "key-test-bad" )
145
+ assert_raise( OpenSSL::PKey::RSAError ) do
146
+ @factory.load_private_key fixture( "rsa-encrypted" )
147
+ end
148
+ end
149
+
150
+ def test_load_private_key_rsa_encrypted_success
151
+ @factory.prompter = Prompter.new( "key-test" )
152
+ result = nil
153
+ assert_nothing_raised do
154
+ result = @factory.load_private_key fixture( "rsa-encrypted" )
155
+ end
156
+ assert_instance_of OpenSSL::PKey::RSA, result
157
+ end
158
+
159
+ def test_load_public_key_not_found
160
+ assert_raise( Errno::ENOENT ) do
161
+ @factory.load_public_key "bogus"
162
+ end
163
+ end
164
+
165
+ def test_load_public_key_success_rsa
166
+ result = nil
167
+ assert_nothing_raised do
168
+ result = @factory.load_public_key fixture( "rsa-unencrypted.pub" )
169
+ end
170
+ assert_instance_of OpenSSL::PKey::RSA, result
171
+ end
172
+
173
+ def test_load_public_key_success_dsa
174
+ result = nil
175
+ assert_nothing_raised do
176
+ result = @factory.load_public_key fixture( "dsa-unencrypted.pub" )
177
+ end
178
+ assert_instance_of OpenSSL::PKey::DSA, result
179
+ end
180
+
181
+ def test_load_private_key_encrypted_bad_passwd_thrice
182
+ passwords = [ "one", "two", "three", "four" ]
183
+ @factory.prompter = Prompter.new( passwords )
184
+ assert_raise( OpenSSL::PKey::DSAError ) do
185
+ @factory.load_private_key fixture( "dsa-encrypted" )
186
+ end
187
+ assert_equal [ "four" ], passwords
188
+ end
189
+
190
+ def test_load_private_key_encrypted_good_passwd_eventually
191
+ passwords = [ "one", "two", "key-test" ]
192
+ @factory.prompter = Prompter.new( passwords )
193
+ assert_nothing_raised do
194
+ @factory.load_private_key fixture( "dsa-encrypted" )
195
+ end
196
+ assert passwords.empty?
197
+ end
198
+
199
+ end