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.
- data/CHANGELOG.rdoc +37 -0
- data/Manifest +101 -0
- data/README.rdoc +110 -0
- data/Rakefile +26 -0
- data/{THANKS → THANKS.rdoc} +2 -5
- data/lib/net/ssh.rb +189 -57
- data/lib/net/ssh/authentication/agent.rb +175 -0
- data/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/net/ssh/authentication/key_manager.rb +166 -0
- data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/net/ssh/authentication/pageant.rb +176 -0
- data/lib/net/ssh/authentication/session.rb +116 -0
- data/lib/net/ssh/buffer.rb +339 -0
- data/lib/net/ssh/buffered_io.rb +149 -0
- data/lib/net/ssh/config.rb +173 -0
- data/lib/net/ssh/connection/channel.rb +575 -454
- data/lib/net/ssh/connection/constants.rb +31 -45
- data/lib/net/ssh/connection/session.rb +569 -0
- data/lib/net/ssh/connection/term.rb +176 -88
- data/lib/net/ssh/errors.rb +83 -61
- data/lib/net/ssh/key_factory.rb +85 -0
- data/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/net/ssh/loggable.rb +61 -0
- data/lib/net/ssh/packet.rb +102 -0
- data/lib/net/ssh/prompt.rb +93 -0
- data/lib/net/ssh/proxy/errors.rb +8 -28
- data/lib/net/ssh/proxy/http.rb +75 -107
- data/lib/net/ssh/proxy/socks4.rb +35 -48
- data/lib/net/ssh/proxy/socks5.rb +76 -108
- data/lib/net/ssh/service/forward.rb +267 -0
- data/lib/net/ssh/test.rb +89 -0
- data/lib/net/ssh/test/channel.rb +129 -0
- data/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/net/ssh/test/kex.rb +44 -0
- data/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/net/ssh/test/packet.rb +81 -0
- data/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/net/ssh/test/script.rb +157 -0
- data/lib/net/ssh/test/socket.rb +59 -0
- data/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/net/ssh/transport/cipher_factory.rb +72 -0
- data/lib/net/ssh/transport/constants.rb +22 -58
- data/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
- data/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/net/ssh/transport/identity_cipher.rb +40 -0
- data/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
- data/lib/net/ssh/transport/packet_stream.rb +230 -0
- data/lib/net/ssh/transport/server_version.rb +61 -0
- data/lib/net/ssh/transport/session.rb +225 -303
- data/lib/net/ssh/transport/state.rb +170 -0
- data/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/net/ssh/version.rb +57 -26
- data/net-ssh.gemspec +54 -0
- data/setup.rb +1585 -0
- data/test/authentication/methods/common.rb +28 -0
- data/test/authentication/methods/test_abstract.rb +51 -0
- data/test/authentication/methods/test_hostbased.rb +108 -0
- data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
- data/test/authentication/methods/test_password.rb +50 -0
- data/test/authentication/methods/test_publickey.rb +123 -0
- data/test/authentication/test_agent.rb +205 -0
- data/test/authentication/test_key_manager.rb +100 -0
- data/test/authentication/test_session.rb +93 -0
- data/test/common.rb +106 -0
- data/test/configs/exact_match +8 -0
- data/test/configs/wild_cards +14 -0
- data/test/connection/test_channel.rb +452 -0
- data/test/connection/test_session.rb +483 -0
- data/test/test_all.rb +6 -0
- data/test/test_buffer.rb +336 -0
- data/test/test_buffered_io.rb +63 -0
- data/test/test_config.rb +78 -0
- data/test/test_key_factory.rb +67 -0
- data/test/transport/hmac/test_md5.rb +34 -0
- data/test/transport/hmac/test_md5_96.rb +25 -0
- data/test/transport/hmac/test_none.rb +34 -0
- data/test/transport/hmac/test_sha1.rb +34 -0
- data/test/transport/hmac/test_sha1_96.rb +25 -0
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
- data/test/transport/test_algorithms.rb +302 -0
- data/test/transport/test_cipher_factory.rb +163 -0
- data/test/transport/test_hmac.rb +34 -0
- data/test/transport/test_identity_cipher.rb +40 -0
- data/test/transport/test_packet_stream.rb +433 -0
- data/test/transport/test_server_version.rb +55 -0
- data/test/transport/test_session.rb +312 -0
- data/test/transport/test_state.rb +173 -0
- metadata +102 -253
- data/ChangeLog +0 -560
- data/LICENSE +0 -7
- data/NEWS +0 -152
- data/README +0 -14
- data/bin/rb-keygen +0 -210
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/manual-html/chapter-1.html +0 -388
- data/doc/manual-html/chapter-2.html +0 -552
- data/doc/manual-html/chapter-3.html +0 -470
- data/doc/manual-html/chapter-4.html +0 -413
- data/doc/manual-html/chapter-5.html +0 -525
- data/doc/manual-html/chapter-6.html +0 -456
- data/doc/manual-html/chapter-7.html +0 -343
- data/doc/manual-html/index.html +0 -235
- data/doc/manual-html/stylesheets/manual.css +0 -270
- data/doc/manual-html/stylesheets/ruby.css +0 -17
- data/doc/manual/chapter.erb +0 -38
- data/doc/manual/example.erb +0 -18
- data/doc/manual/index.erb +0 -29
- data/doc/manual/manual.rb +0 -311
- data/doc/manual/manual.yml +0 -73
- data/doc/manual/page.erb +0 -87
- data/doc/manual/parts/0000.txt +0 -5
- data/doc/manual/parts/0001.txt +0 -3
- data/doc/manual/parts/0002.txt +0 -40
- data/doc/manual/parts/0003.txt +0 -6
- data/doc/manual/parts/0004.txt +0 -7
- data/doc/manual/parts/0005.txt +0 -1
- data/doc/manual/parts/0006.txt +0 -49
- data/doc/manual/parts/0007.txt +0 -67
- data/doc/manual/parts/0008.txt +0 -43
- data/doc/manual/parts/0009.txt +0 -14
- data/doc/manual/parts/0010.txt +0 -7
- data/doc/manual/parts/0011.txt +0 -14
- data/doc/manual/parts/0012.txt +0 -3
- data/doc/manual/parts/0013.txt +0 -20
- data/doc/manual/parts/0014.txt +0 -32
- data/doc/manual/parts/0015.txt +0 -14
- data/doc/manual/parts/0016.txt +0 -28
- data/doc/manual/parts/0017.txt +0 -50
- data/doc/manual/parts/0018.txt +0 -35
- data/doc/manual/parts/0019.txt +0 -7
- data/doc/manual/parts/0020.txt +0 -72
- data/doc/manual/parts/0021.txt +0 -50
- data/doc/manual/parts/0022.txt +0 -42
- data/doc/manual/parts/0023.txt +0 -51
- data/doc/manual/parts/0024.txt +0 -18
- data/doc/manual/parts/0025.txt +0 -18
- data/doc/manual/parts/0026.txt +0 -15
- data/doc/manual/parts/0027.txt +0 -37
- data/doc/manual/parts/0028.txt +0 -16
- data/doc/manual/parts/0029.txt +0 -1
- data/doc/manual/parts/0030.txt +0 -52
- data/doc/manual/parts/0031.txt +0 -25
- data/doc/manual/stylesheets/manual.css +0 -270
- data/doc/manual/stylesheets/ruby.css +0 -17
- data/doc/manual/tutorial.erb +0 -30
- data/examples/auth-forward.rb +0 -41
- data/examples/channel-demo.rb +0 -81
- data/examples/port-forward.rb +0 -51
- data/examples/process-demo.rb +0 -91
- data/examples/remote-net-port-forward.rb +0 -45
- data/examples/remote-port-forward.rb +0 -80
- data/examples/shell-demo.rb +0 -46
- data/examples/ssh-client.rb +0 -67
- data/examples/sync-shell-demo.rb +0 -69
- data/examples/tail-demo.rb +0 -49
- data/lib/net/ssh/connection/driver.rb +0 -446
- data/lib/net/ssh/connection/services.rb +0 -72
- data/lib/net/ssh/host-key-verifier.rb +0 -52
- data/lib/net/ssh/known-hosts.rb +0 -96
- data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
- data/lib/net/ssh/null-host-key-verifier.rb +0 -14
- data/lib/net/ssh/service/agentforward/driver.rb +0 -78
- data/lib/net/ssh/service/agentforward/services.rb +0 -41
- data/lib/net/ssh/service/forward/driver.rb +0 -319
- data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
- data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
- data/lib/net/ssh/service/forward/services.rb +0 -76
- data/lib/net/ssh/service/process/driver.rb +0 -153
- data/lib/net/ssh/service/process/open.rb +0 -193
- data/lib/net/ssh/service/process/popen3.rb +0 -178
- data/lib/net/ssh/service/process/services.rb +0 -66
- data/lib/net/ssh/service/services.rb +0 -60
- data/lib/net/ssh/service/shell/driver.rb +0 -86
- data/lib/net/ssh/service/shell/services.rb +0 -54
- data/lib/net/ssh/service/shell/shell.rb +0 -222
- data/lib/net/ssh/service/shell/sync.rb +0 -114
- data/lib/net/ssh/session.rb +0 -305
- data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
- data/lib/net/ssh/transport/compress/compressor.rb +0 -53
- data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
- data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
- data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
- data/lib/net/ssh/transport/compress/services.rb +0 -68
- data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
- data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
- data/lib/net/ssh/transport/errors.rb +0 -47
- data/lib/net/ssh/transport/identity-cipher.rb +0 -61
- data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
- data/lib/net/ssh/transport/kex/dh.rb +0 -249
- data/lib/net/ssh/transport/kex/services.rb +0 -62
- data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
- data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
- data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
- data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
- data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
- data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
- data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
- data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
- data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
- data/lib/net/ssh/transport/ossl/services.rb +0 -149
- data/lib/net/ssh/transport/packet-stream.rb +0 -236
- data/lib/net/ssh/transport/services.rb +0 -146
- data/lib/net/ssh/transport/version-negotiator.rb +0 -73
- data/lib/net/ssh/userauth/agent.rb +0 -222
- data/lib/net/ssh/userauth/constants.rb +0 -35
- data/lib/net/ssh/userauth/driver.rb +0 -183
- data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
- data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
- data/lib/net/ssh/userauth/methods/password.rb +0 -70
- data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
- data/lib/net/ssh/userauth/methods/services.rb +0 -90
- data/lib/net/ssh/userauth/pageant.rb +0 -197
- data/lib/net/ssh/userauth/services.rb +0 -141
- data/lib/net/ssh/userauth/userkeys.rb +0 -258
- data/lib/net/ssh/util/buffer.rb +0 -274
- data/lib/net/ssh/util/prompter.rb +0 -73
- data/test/ALL-TESTS.rb +0 -18
- data/test/connection/tc_channel.rb +0 -136
- data/test/connection/tc_driver.rb +0 -287
- data/test/connection/tc_integration.rb +0 -87
- data/test/proxy/tc_http.rb +0 -209
- data/test/proxy/tc_socks4.rb +0 -148
- data/test/proxy/tc_socks5.rb +0 -214
- data/test/service/agentforward/tc_driver.rb +0 -138
- data/test/service/forward/tc_driver.rb +0 -289
- data/test/service/forward/tc_local_network_handler.rb +0 -123
- data/test/service/forward/tc_remote_network_handler.rb +0 -111
- data/test/service/process/tc_driver.rb +0 -79
- data/test/service/process/tc_integration.rb +0 -119
- data/test/service/process/tc_open.rb +0 -179
- data/test/service/process/tc_popen3.rb +0 -164
- data/test/tc_integration.rb +0 -80
- data/test/transport/compress/tc_none_compress.rb +0 -41
- data/test/transport/compress/tc_none_decompress.rb +0 -45
- data/test/transport/compress/tc_zlib_compress.rb +0 -61
- data/test/transport/compress/tc_zlib_decompress.rb +0 -48
- data/test/transport/kex/tc_dh.rb +0 -312
- data/test/transport/kex/tc_dh_gex.rb +0 -71
- data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
- data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
- data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
- data/test/transport/ossl/fixtures/not-a-private-key +0 -4
- data/test/transport/ossl/fixtures/not-supported +0 -2
- data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
- data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
- data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
- data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
- data/test/transport/ossl/hmac/tc_md5.rb +0 -50
- data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
- data/test/transport/ossl/hmac/tc_none.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
- data/test/transport/ossl/tc_buffer.rb +0 -97
- data/test/transport/ossl/tc_buffer_factory.rb +0 -67
- data/test/transport/ossl/tc_cipher_factory.rb +0 -84
- data/test/transport/ossl/tc_digest_factory.rb +0 -39
- data/test/transport/ossl/tc_hmac_factory.rb +0 -72
- data/test/transport/ossl/tc_key_factory.rb +0 -199
- data/test/transport/tc_algorithm_negotiator.rb +0 -170
- data/test/transport/tc_identity_cipher.rb +0 -52
- data/test/transport/tc_integration.rb +0 -115
- data/test/transport/tc_packet_stream.rb +0 -184
- data/test/transport/tc_session.rb +0 -296
- data/test/transport/tc_version_negotiator.rb +0 -86
- data/test/userauth/methods/tc_hostbased.rb +0 -136
- data/test/userauth/methods/tc_password.rb +0 -89
- data/test/userauth/methods/tc_publickey.rb +0 -167
- data/test/userauth/tc_agent.rb +0 -223
- data/test/userauth/tc_driver.rb +0 -190
- data/test/userauth/tc_integration.rb +0 -97
- data/test/userauth/tc_userkeys.rb +0 -265
- data/test/util/tc_buffer.rb +0 -217
@@ -1,164 +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 'test/unit'
|
20
|
-
require 'net/ssh/service/process/popen3'
|
21
|
-
|
22
|
-
class TC_Process_POpen3 < Test::Unit::TestCase
|
23
|
-
|
24
|
-
class MockObject
|
25
|
-
attr_reader :events
|
26
|
-
|
27
|
-
def initialize
|
28
|
-
@events = []
|
29
|
-
end
|
30
|
-
|
31
|
-
def method_missing( sym, *args, &block )
|
32
|
-
token = [ sym, *args ]
|
33
|
-
token << :with_block if block
|
34
|
-
@events << token
|
35
|
-
end
|
36
|
-
|
37
|
-
undef_method :loop
|
38
|
-
end
|
39
|
-
|
40
|
-
class Channel < MockObject
|
41
|
-
attr_reader :connection
|
42
|
-
|
43
|
-
def connection
|
44
|
-
@connection ||= MockObject.new
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class TC_SSHStdinPipe < Test::Unit::TestCase
|
49
|
-
def setup
|
50
|
-
@channel = Channel.new
|
51
|
-
@pipe = Net::SSH::Service::Process::POpen3Manager::SSHStdinPipe.new(
|
52
|
-
@channel )
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_write
|
56
|
-
@pipe.write "foo"
|
57
|
-
assert_equal [ [ :send_data, "foo" ] ], @channel.events
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_puts_nonl
|
61
|
-
@pipe.puts "foo"
|
62
|
-
assert_equal [ [ :send_data, "foo\n" ] ], @channel.events
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_puts_nl
|
66
|
-
@pipe.puts "foo\n"
|
67
|
-
assert_equal [ [ :send_data, "foo\n" ] ], @channel.events
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
class TC_SSHStdoutPipe < Test::Unit::TestCase
|
72
|
-
def setup
|
73
|
-
@channel = Channel.new
|
74
|
-
@pipe = Net::SSH::Service::Process::POpen3Manager::SSHStdoutPipe.new(
|
75
|
-
@channel )
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_read_empty
|
79
|
-
klass = class << @channel.connection; self; end
|
80
|
-
pipe = @pipe
|
81
|
-
klass.send(:define_method,:process) { pipe.instance_variable_set( :@data, "foo" ) }
|
82
|
-
s = @pipe.read
|
83
|
-
assert_equal "foo", s
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_read_full
|
87
|
-
@pipe.do_data @channel, "foo"
|
88
|
-
s = @pipe.read
|
89
|
-
assert_equal "foo", s
|
90
|
-
assert_equal [], @channel.connection.events
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
class TC_SSHStderrPipe < Test::Unit::TestCase
|
95
|
-
def setup
|
96
|
-
@channel = Channel.new
|
97
|
-
@pipe = Net::SSH::Service::Process::POpen3Manager::SSHStderrPipe.new(
|
98
|
-
@channel )
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_read_empty
|
102
|
-
klass = class << @channel.connection; self; end
|
103
|
-
pipe = @pipe
|
104
|
-
klass.send(:define_method,:process) do
|
105
|
-
data = pipe.instance_variable_get( :@data )
|
106
|
-
pipe.instance_variable_set( :@data, (data||"") + "foo" )
|
107
|
-
end
|
108
|
-
s = @pipe.read
|
109
|
-
assert_equal "foo", s
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_read_stderr
|
113
|
-
@pipe.do_data @channel, 1, "foo"
|
114
|
-
s = @pipe.read
|
115
|
-
assert_equal "foo", s
|
116
|
-
assert_equal [], @channel.connection.events
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
class Connection < MockObject
|
121
|
-
class Channel < MockObject
|
122
|
-
attr_reader :success
|
123
|
-
attr_reader :failure
|
124
|
-
|
125
|
-
def on_success( &block )
|
126
|
-
super
|
127
|
-
@success = block
|
128
|
-
end
|
129
|
-
|
130
|
-
def on_failure( &block )
|
131
|
-
super
|
132
|
-
@failure = block
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
attr_reader :channel
|
137
|
-
def open_channel( type )
|
138
|
-
super
|
139
|
-
yield @channel = Channel.new
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_popen3
|
144
|
-
conn = Connection.new
|
145
|
-
mgr = Net::SSH::Service::Process::POpen3Manager.new( conn, nil )
|
146
|
-
mgr.popen3( "foo" ) do |a,b,c|
|
147
|
-
assert_instance_of(
|
148
|
-
Net::SSH::Service::Process::POpen3Manager::SSHStdinPipe, a )
|
149
|
-
assert_instance_of(
|
150
|
-
Net::SSH::Service::Process::POpen3Manager::SSHStdoutPipe, b )
|
151
|
-
assert_instance_of(
|
152
|
-
Net::SSH::Service::Process::POpen3Manager::SSHStderrPipe, c )
|
153
|
-
end
|
154
|
-
|
155
|
-
assert_equal [ [ :open_channel, "session", :with_block ],
|
156
|
-
[ :loop ] ], conn.events
|
157
|
-
chan = conn.channel
|
158
|
-
assert_equal [ [ :on_success, :with_block ],
|
159
|
-
[ :on_failure, :with_block ], [ :exec, "foo", true ] ], chan.events
|
160
|
-
|
161
|
-
chan.success.call( chan )
|
162
|
-
end
|
163
|
-
|
164
|
-
end
|
data/test/tc_integration.rb
DELETED
@@ -1,80 +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 'net/ssh/session'
|
22
|
-
require 'test/unit'
|
23
|
-
|
24
|
-
class TC_Integration < Test::Unit::TestCase
|
25
|
-
|
26
|
-
HOST = "test.host"
|
27
|
-
USER = "test"
|
28
|
-
PASSWORD = "test/unit"
|
29
|
-
SESS_OPTS = {
|
30
|
-
:registry_options => {
|
31
|
-
:logs => {
|
32
|
-
:device => STDOUT,
|
33
|
-
:default_level => :warn
|
34
|
-
}
|
35
|
-
},
|
36
|
-
:paranoid => false
|
37
|
-
}
|
38
|
-
|
39
|
-
def setup
|
40
|
-
@session = Net::SSH::Session.new( HOST, USER, PASSWORD, SESS_OPTS )
|
41
|
-
end
|
42
|
-
|
43
|
-
def teardown
|
44
|
-
@session.close
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_no_auth
|
48
|
-
assert_raise( Net::SSH::AuthenticationFailed ) do
|
49
|
-
Net::SSH::Session.new( HOST, USER, PASSWORD+"K", SESS_OPTS )
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_exec
|
54
|
-
exec_data = ""
|
55
|
-
@session.open_channel do |chan|
|
56
|
-
chan.on_data { |ch,data| exec_data << data }
|
57
|
-
chan.exec "echo hello"
|
58
|
-
end
|
59
|
-
@session.loop
|
60
|
-
assert_equal "hello\n", exec_data
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_dialog
|
64
|
-
dialog = [ "2+2", "5*10+1", "quit" ]
|
65
|
-
results = []
|
66
|
-
@session.open_channel "session" do |chan|
|
67
|
-
chan.on_data do |ch,data|
|
68
|
-
results << data
|
69
|
-
chan.send_data dialog.shift + "\n"
|
70
|
-
end
|
71
|
-
chan.exec "bc"
|
72
|
-
chan.send_data dialog.shift + "\n"
|
73
|
-
end
|
74
|
-
@session.loop
|
75
|
-
assert_equal [ "4\n", "51\n" ], results
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
@@ -1,41 +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/compress/none-compressor'
|
20
|
-
require 'test/unit'
|
21
|
-
|
22
|
-
class TC_NoneCompressor < Test::Unit::TestCase
|
23
|
-
|
24
|
-
def setup
|
25
|
-
@compressor = Net::SSH::Transport::Compress::NoneCompressor.new
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_new
|
29
|
-
assert_instance_of Net::SSH::Transport::Compress::NoneCompressor,
|
30
|
-
@compressor.new
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_compress
|
34
|
-
expect = "To be, or not to be, that is the question"
|
35
|
-
assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
|
36
|
-
|
37
|
-
expect = "But soft! What light through yonder window breaks?"
|
38
|
-
assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
|
39
|
-
end
|
40
|
-
|
41
|
-
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
|
-
$:.unshift "#{File.dirname(__FILE__)}/../../../lib"
|
18
|
-
|
19
|
-
require 'net/ssh/transport/compress/none-decompressor'
|
20
|
-
require 'test/unit'
|
21
|
-
|
22
|
-
class TC_NoneDecompressor < Test::Unit::TestCase
|
23
|
-
|
24
|
-
def setup
|
25
|
-
@decompressor = Net::SSH::Transport::Compress::NoneDecompressor.new
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_new
|
29
|
-
assert_instance_of Net::SSH::Transport::Compress::NoneDecompressor,
|
30
|
-
@decompressor.new
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_decompress
|
34
|
-
expect = "To be, or not to be, that is the question"
|
35
|
-
|
36
|
-
assert_equal expect, @decompressor.decompress(
|
37
|
-
"To be, or not to be, that is the question" )
|
38
|
-
|
39
|
-
expect = "But soft! What light through yonder window breaks?"
|
40
|
-
|
41
|
-
assert_equal expect, @decompressor.decompress(
|
42
|
-
"But soft! What light through yonder window breaks?" )
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
@@ -1,61 +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/compress/zlib-compressor'
|
20
|
-
require 'test/unit'
|
21
|
-
|
22
|
-
class TC_ZLibCompressor < Test::Unit::TestCase
|
23
|
-
|
24
|
-
def setup
|
25
|
-
@compressor = Net::SSH::Transport::Compress::ZLibCompressor.new
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_new
|
29
|
-
assert_instance_of Net::SSH::Transport::Compress::ZLibCompressor,
|
30
|
-
@compressor.new
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_compress
|
34
|
-
expect = "x\234\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K" +
|
35
|
-
"\0242\213\201t\252BaijqIf~\036\000\000\000\377\377"
|
36
|
-
|
37
|
-
assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
|
38
|
-
|
39
|
-
expect = "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
|
40
|
-
"\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
|
41
|
-
"\003\000\000\000\377\377"
|
42
|
-
|
43
|
-
assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_compress_options
|
47
|
-
@compressor.configure :level => 1
|
48
|
-
|
49
|
-
expect = "x\001\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K\0242\213" +
|
50
|
-
"\025J2R\025\nKS\213K2\363\363\000\000\000\000\377\377"
|
51
|
-
|
52
|
-
assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
|
53
|
-
|
54
|
-
expect = "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
|
55
|
-
"\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
|
56
|
-
"\003\000\000\000\377\377"
|
57
|
-
|
58
|
-
assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
@@ -1,48 +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/compress/zlib-decompressor'
|
20
|
-
require 'test/unit'
|
21
|
-
|
22
|
-
class TC_ZLibDecompressor < Test::Unit::TestCase
|
23
|
-
|
24
|
-
def setup
|
25
|
-
@decompressor = Net::SSH::Transport::Compress::ZLibDecompressor.new
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_new
|
29
|
-
assert_instance_of Net::SSH::Transport::Compress::ZLibDecompressor,
|
30
|
-
@decompressor.new
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_decompress
|
34
|
-
expect = "To be, or not to be, that is the question"
|
35
|
-
|
36
|
-
assert_equal expect, @decompressor.decompress(
|
37
|
-
"x\234\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K" +
|
38
|
-
"\0242\213\201t\252BaijqIf~\036\000\000\000\377\377" )
|
39
|
-
|
40
|
-
expect = "But soft! What light through yonder window breaks?"
|
41
|
-
|
42
|
-
assert_equal expect, @decompressor.decompress(
|
43
|
-
"r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
|
44
|
-
"\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
|
45
|
-
"\003\000\000\000\377\377" )
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
data/test/transport/kex/tc_dh.rb
DELETED
@@ -1,312 +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/errors'
|
20
|
-
require 'net/ssh/null-host-key-verifier'
|
21
|
-
require 'net/ssh/transport/kex/dh'
|
22
|
-
require 'net/ssh/util/buffer'
|
23
|
-
require 'test/unit'
|
24
|
-
require 'ostruct'
|
25
|
-
|
26
|
-
class TC_KEX_DH < Test::Unit::TestCase
|
27
|
-
|
28
|
-
class MockDH < Struct.new( :valid, :p, :g, :priv_key, :pub_key )
|
29
|
-
def valid?
|
30
|
-
valid
|
31
|
-
end
|
32
|
-
|
33
|
-
def compute_key( num )
|
34
|
-
num
|
35
|
-
end
|
36
|
-
|
37
|
-
def generate_key!
|
38
|
-
self.pub_key = MockBN.new( priv_key )
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class MockServerKey
|
43
|
-
attr_reader :result
|
44
|
-
|
45
|
-
def initialize( result )
|
46
|
-
@result = result
|
47
|
-
end
|
48
|
-
|
49
|
-
def ssh_do_verify( sig, hash )
|
50
|
-
@result
|
51
|
-
end
|
52
|
-
|
53
|
-
def ssh_type
|
54
|
-
"ssh-test"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class MockKeys
|
59
|
-
def get( type )
|
60
|
-
raise "not DH" unless type == "dh"
|
61
|
-
return MockDH.new( true )
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
class MockBN
|
66
|
-
attr_reader :value
|
67
|
-
|
68
|
-
def initialize( value )
|
69
|
-
@value = value
|
70
|
-
end
|
71
|
-
|
72
|
-
def to_i( *args )
|
73
|
-
@value.to_i( *args )
|
74
|
-
end
|
75
|
-
|
76
|
-
def to_ssh
|
77
|
-
"[#{@value}]"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
class MockBNs
|
82
|
-
def new( value, base )
|
83
|
-
return value if value.is_a?( Numeric )
|
84
|
-
MockBN.new( value.to_i( base ) )
|
85
|
-
end
|
86
|
-
|
87
|
-
def rand( bits )
|
88
|
-
bits
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
class MockDigest
|
93
|
-
def self.digest( text )
|
94
|
-
text
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
class MockReaderBuffer < Net::SSH::Util::ReaderBuffer
|
99
|
-
def read_key
|
100
|
-
MockServerKey.new( read )
|
101
|
-
end
|
102
|
-
|
103
|
-
def read_bignum
|
104
|
-
MockBN.new( read_string )
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
class MockBuffers
|
109
|
-
def writer( text="" ); Net::SSH::Util::WriterBuffer.new( text ); end
|
110
|
-
def reader( text ); MockReaderBuffer.new( text ); end
|
111
|
-
end
|
112
|
-
|
113
|
-
class MockDigests
|
114
|
-
def get( type )
|
115
|
-
raise "not SHA1" unless type == "sha1"
|
116
|
-
return MockDigest
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
class MockSession
|
121
|
-
attr_reader :sent_buffer
|
122
|
-
|
123
|
-
def initialize( *script )
|
124
|
-
@script = script
|
125
|
-
end
|
126
|
-
|
127
|
-
def send_message( buffer )
|
128
|
-
@sent_buffer = buffer
|
129
|
-
end
|
130
|
-
|
131
|
-
def wait_for_message
|
132
|
-
[ @script.shift, @script.shift ]
|
133
|
-
end
|
134
|
-
|
135
|
-
def peer
|
136
|
-
{}
|
137
|
-
end
|
138
|
-
|
139
|
-
def algorithms
|
140
|
-
OpenStruct.new( :host_key => "ssh-test" )
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
def setup
|
145
|
-
@kex = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1.new(
|
146
|
-
MockBNs.new, MockDigests.new )
|
147
|
-
@kex.keys = MockKeys.new
|
148
|
-
@kex.buffers = MockBuffers.new
|
149
|
-
@kex.host_key_verifier = Net::SSH::NullHostKeyVerifier.new
|
150
|
-
|
151
|
-
@init = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1::KEXDH_INIT
|
152
|
-
@reply = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1::KEXDH_REPLY
|
153
|
-
@session_id = "\0\0\0\1A\0\0\0\1B\0\0\0\1C\0\0\0\1D\0\0\0\1E[10][20][30]"
|
154
|
-
|
155
|
-
@exchange_keys_script = [
|
156
|
-
31,
|
157
|
-
MockReaderBuffer.new( "\0\0\0\10key blob\0\0\0\0041001\0\0\0\27\0\0\0\10ssh-test\0\0\0\11signature" ),
|
158
|
-
21,
|
159
|
-
nil
|
160
|
-
]
|
161
|
-
|
162
|
-
@exchange_keys_session_id = "\0\0\0\1A\0\0\0\1B\0\0\0\1C\0\0\0\1D\0\0\0\10key blob[80][1001][9]"
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_generate_key
|
166
|
-
dh = nil
|
167
|
-
assert_nothing_raised do
|
168
|
-
dh = @kex.generate_key( nil, { :need_bytes=>10 } )
|
169
|
-
end
|
170
|
-
|
171
|
-
expected_p =
|
172
|
-
0xFFFFFFFF_FFFFFFFF_C90FDAA2_2168C234_C4C6628B_80DC1CD1_29024E08_8A67CC74_020BBEA6_3B139B22_514A0879_8E3404DD_EF9519B3_CD3A431B_302B0A6D_F25F1437_4FE1356D_6D51C245_E485B576_625E7EC6_F44C42E9_A637ED6B_0BFF5CB6_F406B7ED_EE386BFB_5A899FA5_AE9F2411_7C4B1FE6_49286651_ECE65381_FFFFFFFF_FFFFFFFF
|
173
|
-
|
174
|
-
assert_equal expected_p, dh.p.to_i
|
175
|
-
assert_equal 2, dh.g
|
176
|
-
assert_equal 80, dh.priv_key
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_verify_server_key
|
180
|
-
key = OpenStruct.new( :ssh_type => "test" )
|
181
|
-
session = OpenStruct.new( :algorithms => OpenStruct.new( :host_key => "test" ) )
|
182
|
-
assert_nothing_raised { @kex.verify_server_key( key, session ) }
|
183
|
-
|
184
|
-
session = OpenStruct.new( :algorithms => OpenStruct.new( :host_key => "bogus" ) )
|
185
|
-
assert_raise( Net::SSH::Exception ) {
|
186
|
-
@kex.verify_server_key( key, session ) }
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_send_kexinit
|
190
|
-
dh = MockDH.new
|
191
|
-
dh.pub_key = MockBN.new( 80 )
|
192
|
-
session = MockSession.new( @reply, :worked )
|
193
|
-
|
194
|
-
result = nil
|
195
|
-
assert_nothing_raised do
|
196
|
-
result = @kex.send_kexinit( dh, session )
|
197
|
-
end
|
198
|
-
|
199
|
-
assert_equal :worked, result
|
200
|
-
assert_equal "#{@init.chr}[80]", session.sent_buffer.to_s
|
201
|
-
|
202
|
-
session = MockSession.new( @reply+1, :worked )
|
203
|
-
|
204
|
-
assert_raise( Net::SSH::Exception ) do
|
205
|
-
@kex.send_kexinit( dh, session )
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_parse_kex_reply
|
210
|
-
dh = MockDH.new
|
211
|
-
|
212
|
-
buffer = Net::SSH::Util::WriterBuffer.new
|
213
|
-
buffer.write_string "key blob"
|
214
|
-
buffer.write_string "1001"
|
215
|
-
|
216
|
-
sigbuf = Net::SSH::Util::WriterBuffer.new
|
217
|
-
sigbuf.write_string "ssh-test"
|
218
|
-
sigbuf.write_string "signature"
|
219
|
-
buffer.write_string sigbuf
|
220
|
-
|
221
|
-
buffer = MockReaderBuffer.new( buffer.content )
|
222
|
-
|
223
|
-
result = nil
|
224
|
-
assert_nothing_raised do
|
225
|
-
result = @kex.parse_kex_reply( dh, buffer, MockSession.new )
|
226
|
-
end
|
227
|
-
|
228
|
-
assert_equal "key blob", result[:key_blob]
|
229
|
-
assert_equal "key blob", result[:server_key].result
|
230
|
-
assert_equal "1001", result[:server_dh_pubkey].value
|
231
|
-
assert_equal 9, result[:shared_secret].to_i
|
232
|
-
assert_equal "signature", result[:server_sig]
|
233
|
-
|
234
|
-
buffer = Net::SSH::Util::WriterBuffer.new
|
235
|
-
buffer.write_string "key blob"
|
236
|
-
buffer.write_string "1001"
|
237
|
-
|
238
|
-
sigbuf = Net::SSH::Util::WriterBuffer.new
|
239
|
-
sigbuf.write_string "ssh-bogus"
|
240
|
-
sigbuf.write_string "signature"
|
241
|
-
buffer.write_string sigbuf
|
242
|
-
|
243
|
-
buffer = MockReaderBuffer.new( buffer.content )
|
244
|
-
assert_raise( Net::SSH::Exception ) do
|
245
|
-
@kex.parse_kex_reply( dh, buffer, MockSession.new )
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_verify_signature
|
250
|
-
dh = MockDH.new
|
251
|
-
dh.p = MockBN.new( 2 )
|
252
|
-
dh.g = MockBN.new( 6 )
|
253
|
-
dh.pub_key = MockBN.new( 10 )
|
254
|
-
|
255
|
-
data = { :client_version_string => "A",
|
256
|
-
:server_version_string => "B",
|
257
|
-
:client_algorithm_packet => "C",
|
258
|
-
:need_bits => 0,
|
259
|
-
:server_algorithm_packet => "D" }
|
260
|
-
result = { :key_blob => "E",
|
261
|
-
:server_dh_pubkey => MockBN.new( 20 ),
|
262
|
-
:shared_secret => MockBN.new( 30 ),
|
263
|
-
:server_key => MockServerKey.new( true ) }
|
264
|
-
|
265
|
-
session_id = nil
|
266
|
-
assert_nothing_raised do
|
267
|
-
session_id = @kex.verify_signature( dh, data, result )
|
268
|
-
end
|
269
|
-
|
270
|
-
assert_equal @session_id, session_id
|
271
|
-
|
272
|
-
result[:server_key] = MockServerKey.new( false )
|
273
|
-
assert_raise( Net::SSH::Exception ) do
|
274
|
-
@kex.verify_signature( dh, data, result )
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
def test_confirm_newkeys
|
279
|
-
session = MockSession.new( 21, :worked )
|
280
|
-
|
281
|
-
assert_nothing_raised do
|
282
|
-
@kex.confirm_newkeys( session )
|
283
|
-
end
|
284
|
-
|
285
|
-
assert_equal 21.chr, session.sent_buffer.to_s
|
286
|
-
|
287
|
-
session = MockSession.new( 22, :worked )
|
288
|
-
assert_raise( Net::SSH::Exception ) do
|
289
|
-
@kex.confirm_newkeys( session )
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
def test_exchange_keys
|
294
|
-
session = MockSession.new( *@exchange_keys_script )
|
295
|
-
data = { :need_bytes => 10,
|
296
|
-
:client_version_string => "A",
|
297
|
-
:server_version_string => "B",
|
298
|
-
:client_algorithm_packet => "C",
|
299
|
-
:server_algorithm_packet => "D" }
|
300
|
-
|
301
|
-
result = nil
|
302
|
-
assert_nothing_raised do
|
303
|
-
result = @kex.exchange_keys( session, data )
|
304
|
-
end
|
305
|
-
|
306
|
-
assert_equal MockDigest, result.hashing_algorithm
|
307
|
-
assert_equal @exchange_keys_session_id, result.session_id
|
308
|
-
assert_equal "key blob", result.server_key.result
|
309
|
-
assert_equal 9, result.shared_secret.to_i
|
310
|
-
end
|
311
|
-
|
312
|
-
end
|