hrr_rb_ssh 0.1.2 → 0.1.3

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 (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