hrr_rb_ssh 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/demo/server.rb +13 -1
  3. data/lib/hrr_rb_ssh/authentication/method/none/context.rb +1 -1
  4. data/lib/hrr_rb_ssh/authentication/method/none.rb +4 -4
  5. data/lib/hrr_rb_ssh/authentication/method/password/context.rb +1 -1
  6. data/lib/hrr_rb_ssh/authentication/method/password.rb +4 -4
  7. data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/codable.rb +5 -5
  8. data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_dss.rb +29 -18
  9. data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_rsa.rb +27 -16
  10. data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm.rb +7 -13
  11. data/lib/hrr_rb_ssh/authentication/method/publickey/context.rb +1 -1
  12. data/lib/hrr_rb_ssh/authentication/method/publickey.rb +5 -5
  13. data/lib/hrr_rb_ssh/authentication/method.rb +6 -12
  14. data/lib/hrr_rb_ssh/authentication.rb +1 -1
  15. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context.rb +2 -2
  16. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env.rb +2 -3
  17. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context.rb +2 -2
  18. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec.rb +2 -3
  19. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context.rb +2 -2
  20. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req.rb +2 -3
  21. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context.rb +2 -2
  22. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell.rb +2 -3
  23. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context.rb +2 -2
  24. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem.rb +2 -3
  25. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type.rb +16 -11
  26. data/lib/hrr_rb_ssh/connection/channel/channel_type/session.rb +1 -15
  27. data/lib/hrr_rb_ssh/connection/channel/channel_type.rb +15 -10
  28. data/lib/hrr_rb_ssh/connection/channel.rb +1 -1
  29. data/lib/hrr_rb_ssh/data_type.rb +153 -0
  30. data/lib/hrr_rb_ssh/message/001_ssh_msg_disconnect.rb +6 -6
  31. data/lib/hrr_rb_ssh/message/002_ssh_msg_ignore.rb +4 -4
  32. data/lib/hrr_rb_ssh/message/003_ssh_msg_unimplemented.rb +4 -4
  33. data/lib/hrr_rb_ssh/message/004_ssh_msg_debug.rb +6 -6
  34. data/lib/hrr_rb_ssh/message/005_ssh_msg_service_request.rb +4 -4
  35. data/lib/hrr_rb_ssh/message/006_ssh_msg_service_accept.rb +4 -4
  36. data/lib/hrr_rb_ssh/message/020_ssh_msg_kexinit.rb +31 -31
  37. data/lib/hrr_rb_ssh/message/021_ssh_msg_newkeys.rb +3 -3
  38. data/lib/hrr_rb_ssh/message/030_ssh_msg_kexdh_init.rb +4 -4
  39. data/lib/hrr_rb_ssh/message/031_ssh_msg_kexdh_reply.rb +6 -6
  40. data/lib/hrr_rb_ssh/message/050_ssh_msg_userauth_request.rb +18 -18
  41. data/lib/hrr_rb_ssh/message/051_ssh_msg_userauth_failure.rb +5 -5
  42. data/lib/hrr_rb_ssh/message/052_ssh_msg_userauth_success.rb +3 -3
  43. data/lib/hrr_rb_ssh/message/060_ssh_msg_userauth_pk_ok.rb +5 -5
  44. data/lib/hrr_rb_ssh/message/080_ssh_msg_global_request.rb +13 -13
  45. data/lib/hrr_rb_ssh/message/081_ssh_msg_request_success.rb +6 -6
  46. data/lib/hrr_rb_ssh/message/082_ssh_msg_request_failure.rb +3 -3
  47. data/lib/hrr_rb_ssh/message/090_ssh_msg_channel_open.rb +25 -25
  48. data/lib/hrr_rb_ssh/message/091_ssh_msg_channel_open_confirmation.rb +25 -25
  49. data/lib/hrr_rb_ssh/message/092_ssh_msg_channel_open_failure.rb +7 -7
  50. data/lib/hrr_rb_ssh/message/093_ssh_msg_channel_window_adjust.rb +5 -5
  51. data/lib/hrr_rb_ssh/message/094_ssh_msg_channel_data.rb +5 -5
  52. data/lib/hrr_rb_ssh/message/095_ssh_msg_channel_extended_data.rb +6 -6
  53. data/lib/hrr_rb_ssh/message/096_ssh_msg_channel_eof.rb +4 -4
  54. data/lib/hrr_rb_ssh/message/097_ssh_msg_channel_close.rb +4 -4
  55. data/lib/hrr_rb_ssh/message/098_ssh_msg_channel_request.rb +53 -53
  56. data/lib/hrr_rb_ssh/message/099_ssh_msg_channel_success.rb +4 -4
  57. data/lib/hrr_rb_ssh/message/100_ssh_msg_channel_failure.rb +4 -4
  58. data/lib/hrr_rb_ssh/message/codable.rb +2 -3
  59. data/lib/hrr_rb_ssh/subclass_with_preference_listable.rb +29 -0
  60. data/lib/hrr_rb_ssh/transport/compression_algorithm/functionable.rb +4 -4
  61. data/lib/hrr_rb_ssh/transport/compression_algorithm/none.rb +1 -6
  62. data/lib/hrr_rb_ssh/transport/compression_algorithm/unfunctionable.rb +4 -0
  63. data/lib/hrr_rb_ssh/transport/compression_algorithm/zlib.rb +1 -6
  64. data/lib/hrr_rb_ssh/transport/compression_algorithm.rb +5 -11
  65. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes128_cbc.rb +1 -2
  66. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes128_ctr.rb +1 -2
  67. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes192_cbc.rb +1 -2
  68. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes192_ctr.rb +1 -2
  69. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes256_cbc.rb +1 -2
  70. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes256_ctr.rb +1 -2
  71. data/lib/hrr_rb_ssh/transport/encryption_algorithm/arcfour.rb +1 -2
  72. data/lib/hrr_rb_ssh/transport/encryption_algorithm/blowfish_cbc.rb +1 -2
  73. data/lib/hrr_rb_ssh/transport/encryption_algorithm/cast128_cbc.rb +1 -2
  74. data/lib/hrr_rb_ssh/transport/encryption_algorithm/functionable.rb +1 -2
  75. data/lib/hrr_rb_ssh/transport/encryption_algorithm/none.rb +1 -6
  76. data/lib/hrr_rb_ssh/transport/encryption_algorithm/three_des_cbc.rb +1 -2
  77. data/lib/hrr_rb_ssh/transport/encryption_algorithm/unfunctionable.rb +6 -0
  78. data/lib/hrr_rb_ssh/transport/encryption_algorithm.rb +5 -11
  79. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman.rb +14 -14
  80. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group14_sha1.rb +2 -5
  81. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group1_sha1.rb +2 -5
  82. data/lib/hrr_rb_ssh/transport/kex_algorithm.rb +5 -10
  83. data/lib/hrr_rb_ssh/transport/mac_algorithm/functionable.rb +2 -3
  84. data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_md5.rb +3 -5
  85. data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_md5_96.rb +3 -5
  86. data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1.rb +3 -5
  87. data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1_96.rb +3 -5
  88. data/lib/hrr_rb_ssh/transport/mac_algorithm/none.rb +2 -8
  89. data/lib/hrr_rb_ssh/transport/mac_algorithm/unfunctionable.rb +4 -0
  90. data/lib/hrr_rb_ssh/transport/mac_algorithm.rb +5 -11
  91. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_dss.rb +14 -13
  92. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb +12 -11
  93. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm.rb +5 -10
  94. data/lib/hrr_rb_ssh/transport.rb +147 -108
  95. data/lib/hrr_rb_ssh/version.rb +1 -1
  96. metadata +4 -12
  97. data/lib/hrr_rb_ssh/authentication/method/method.rb +0 -34
  98. data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/algorithm.rb +0 -41
  99. data/lib/hrr_rb_ssh/connection/channel/channel_type/channel_type.rb +0 -30
  100. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type.rb +0 -34
  101. data/lib/hrr_rb_ssh/transport/compression_algorithm/compression_algorithm.rb +0 -34
  102. data/lib/hrr_rb_ssh/transport/data_type.rb +0 -163
  103. data/lib/hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm.rb +0 -34
  104. data/lib/hrr_rb_ssh/transport/kex_algorithm/kex_algorithm.rb +0 -34
  105. data/lib/hrr_rb_ssh/transport/mac_algorithm/mac_algorithm.rb +0 -34
  106. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/server_host_key_algorithm.rb +0 -34
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
-
6
- module HrrRbSsh
7
- class Authentication
8
- module Method
9
- class Method
10
- @@list = Array.new
11
-
12
- def self.inherited klass
13
- @@list.push klass
14
- end
15
-
16
- def self.list
17
- @@list
18
- end
19
-
20
- def self.name_list
21
- @@list.map{ |klass| klass::NAME }
22
- end
23
-
24
- def self.[] key
25
- @@list.find{ |klass| key == klass::NAME }
26
- end
27
-
28
- def initialize options
29
- @logger = HrrRbSsh::Logger.new self.class.name
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,41 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
- require 'hrr_rb_ssh/authentication/method/publickey/algorithm/codable'
6
-
7
- module HrrRbSsh
8
- class Authentication
9
- module Method
10
- class Publickey
11
- module Algorithm
12
- class Algorithm
13
- @@list = Array.new
14
-
15
- def self.inherited klass
16
- @@list.push klass
17
- end
18
-
19
- def self.list
20
- @@list
21
- end
22
-
23
- def self.name_list
24
- @@list.map{ |klass| klass::NAME }
25
- end
26
-
27
- def self.[] key
28
- @@list.find{ |klass| key == klass::NAME }
29
- end
30
-
31
- def initialize
32
- @logger = HrrRbSsh::Logger.new self.class.name
33
- end
34
-
35
- include Codable
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,30 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- module HrrRbSsh
5
- class Connection
6
- class Channel
7
- module ChannelType
8
- class ChannelType
9
- @@list = Array.new
10
-
11
- def self.inherited klass
12
- @@list.push klass
13
- end
14
-
15
- def self.list
16
- @@list
17
- end
18
-
19
- def self.name_list
20
- @@list.map{ |klass| klass::NAME }
21
- end
22
-
23
- def self.[] key
24
- @@list.find{ |klass| key == klass::NAME }
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- module HrrRbSsh
5
- class Connection
6
- class Channel
7
- module ChannelType
8
- class Session
9
- module RequestType
10
- class RequestType
11
- @@list = Array.new
12
-
13
- def self.inherited klass
14
- @@list.push klass
15
- end
16
-
17
- def self.list
18
- @@list
19
- end
20
-
21
- def self.name_list
22
- @@list.map{ |klass| klass::NAME }
23
- end
24
-
25
- def self.[] key
26
- @@list.find{ |klass| key == klass::NAME }
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
-
6
- module HrrRbSsh
7
- class Transport
8
- class CompressionAlgorithm
9
- class CompressionAlgorithm
10
- @@list = Array.new
11
-
12
- def self.inherited klass
13
- @@list.push klass
14
- end
15
-
16
- def self.list
17
- @@list
18
- end
19
-
20
- def self.name_list
21
- @@list.map{ |klass| klass::NAME }
22
- end
23
-
24
- def self.[] key
25
- @@list.find{ |klass| key == klass::NAME }
26
- end
27
-
28
- def initialize direction
29
- @logger = HrrRbSsh::Logger.new self.class.name
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,163 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'openssl'
5
-
6
- require 'hrr_rb_ssh/logger'
7
-
8
- module HrrRbSsh
9
- class Transport
10
- module DataType
11
- def self.[] key
12
- case key
13
- when 'byte'
14
- Byte
15
- when 'boolean'
16
- Boolean
17
- when 'uint32'
18
- Uint32
19
- when 'uint64'
20
- Uint64
21
- when 'string'
22
- String
23
- when 'mpint'
24
- Mpint
25
- when 'name-list'
26
- NameList
27
- end
28
- end
29
-
30
- class Byte
31
- def self.encode arg
32
- case arg
33
- when 0x00..0xff
34
- [arg].pack("C")
35
- else
36
- raise
37
- end
38
- end
39
-
40
- def self.decode io
41
- io.read(1).unpack("C")[0]
42
- end
43
- end
44
-
45
- class Boolean
46
- def self.encode arg
47
- case arg
48
- when false
49
- [0].pack("C")
50
- when true
51
- [1].pack("C")
52
- else
53
- raise
54
- end
55
- end
56
-
57
- def self.decode io
58
- if 0 == io.read(1).unpack("C")[0]
59
- false
60
- else
61
- true
62
- end
63
- end
64
- end
65
-
66
- class Uint32
67
- def self.encode arg
68
- case arg
69
- when 0x0000_0000..0xffff_ffff
70
- [arg].pack("N")
71
- else
72
- raise
73
- end
74
- end
75
-
76
- def self.decode io
77
- io.read(4).unpack("N")[0]
78
- end
79
- end
80
-
81
- class Uint64
82
- def self.encode arg
83
- case arg
84
- when 0x0000_0000_0000_0000..0xffff_ffff_ffff_ffff
85
- [arg >> 32].pack("N") + [arg & 0x0000_0000_ffff_ffff].pack("N")
86
- else
87
- raise
88
- end
89
- end
90
-
91
- def self.decode io
92
- (io.read(4).unpack("N")[0] << 32) + (io.read(4).unpack("N")[0])
93
- end
94
- end
95
-
96
- class String
97
- def self.encode arg
98
- raise unless arg.kind_of? ::String
99
- raise if arg.length > 0xffff_ffff
100
- [arg.length, arg].pack("Na*")
101
- end
102
-
103
- def self.decode io
104
- length = io.read(4).unpack("N")[0]
105
- io.read(length).unpack("a*")[0]
106
- end
107
- end
108
-
109
- class Mpint
110
- def self.encode arg
111
- raise unless arg.kind_of? ::Integer
112
- raise if arg.size > 0xffff_ffff
113
- bn = ::OpenSSL::BN.new(arg)
114
-
115
- if bn < 0
116
- # get 2's complement
117
- tc = bn.to_i & ((1 << (bn.num_bytes * 8)) - 1)
118
- # get hex representation
119
- hex_str = "%x" % tc
120
-
121
- if tc[(bn.num_bytes * 8) - 1] == 1
122
- [bn.num_bytes, hex_str].pack("NH*")
123
- else
124
- [bn.num_bytes + 1, "ff" + hex_str].pack("NH*")
125
- end
126
- else
127
- bn.to_s(0)
128
- end
129
- end
130
-
131
- def self.decode io
132
- length = io.read(4).unpack("N")[0]
133
- hex_str = io.read(length).unpack("H*")[0]
134
- # get temporal integer value
135
- value = hex_str.hex
136
-
137
- if length == 0
138
- 0
139
- elsif value[(length * 8) - 1] == 0
140
- value
141
- else
142
- num_bytes = if hex_str.start_with?("ff") then length - 1 else length end
143
- - (((~ value) & ((1 << (num_bytes * 8)) - 1)) + 1)
144
- end
145
- end
146
- end
147
-
148
- class NameList
149
- def self.encode arg
150
- raise unless arg.kind_of? Array
151
- raise unless (arg.map(&:class) - [::String]).empty?
152
- raise if arg.join(',').length > 0xffff_ffff
153
- [arg.join(',').length, arg.join(',')].pack("Na*")
154
- end
155
-
156
- def self.decode io
157
- length = io.read(4).unpack("N")[0]
158
- io.read(length).unpack("a*")[0].split(',')
159
- end
160
- end
161
- end
162
- end
163
- end
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
-
6
- module HrrRbSsh
7
- class Transport
8
- class EncryptionAlgorithm
9
- class EncryptionAlgorithm
10
- @@list = Array.new
11
-
12
- def self.inherited klass
13
- @@list.push klass
14
- end
15
-
16
- def self.list
17
- @@list
18
- end
19
-
20
- def self.name_list
21
- @@list.map{ |klass| klass::NAME }
22
- end
23
-
24
- def self.[] key
25
- @@list.find{ |klass| key == klass::NAME }
26
- end
27
-
28
- def initialize direction, iv, key
29
- @logger = HrrRbSsh::Logger.new self.class.name
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
-
6
- module HrrRbSsh
7
- class Transport
8
- class KexAlgorithm
9
- class KexAlgorithm
10
- @@list = Array.new
11
-
12
- def self.inherited klass
13
- @@list.push klass
14
- end
15
-
16
- def self.list
17
- @@list
18
- end
19
-
20
- def self.name_list
21
- @@list.map{ |klass| klass::NAME }
22
- end
23
-
24
- def self.[] key
25
- @@list.find{ |klass| key == klass::NAME }
26
- end
27
-
28
- def initialize
29
- @logger = HrrRbSsh::Logger.new self.class.name
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
-
6
- module HrrRbSsh
7
- class Transport
8
- class MacAlgorithm
9
- class MacAlgorithm
10
- @@list = Array.new
11
-
12
- def self.inherited klass
13
- @@list.push klass
14
- end
15
-
16
- def self.list
17
- @@list
18
- end
19
-
20
- def self.name_list
21
- @@list.map{ |klass| klass::NAME }
22
- end
23
-
24
- def self.[] key
25
- @@list.find{ |klass| key == klass::NAME }
26
- end
27
-
28
- def initialize key
29
- @logger = HrrRbSsh::Logger.new self.class.name
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- # vim: et ts=2 sw=2
3
-
4
- require 'hrr_rb_ssh/logger'
5
-
6
- module HrrRbSsh
7
- class Transport
8
- class ServerHostKeyAlgorithm
9
- class ServerHostKeyAlgorithm
10
- @@list = Array.new
11
-
12
- def self.inherited klass
13
- @@list.push klass
14
- end
15
-
16
- def self.list
17
- @@list
18
- end
19
-
20
- def self.name_list
21
- @@list.map{ |klass| klass::NAME }
22
- end
23
-
24
- def self.[] key
25
- @@list.find{ |klass| key == klass::NAME }
26
- end
27
-
28
- def initialize
29
- @logger = HrrRbSsh::Logger.new self.class.name
30
- end
31
- end
32
- end
33
- end
34
- end