hrr_rb_ssh 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/demo/server.rb +23 -3
- data/hrr_rb_ssh.gemspec +2 -2
- data/lib/hrr_rb_ssh/authentication/method/method.rb +34 -0
- data/lib/hrr_rb_ssh/authentication/method/none.rb +5 -14
- data/lib/hrr_rb_ssh/authentication/method/password.rb +6 -12
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/algorithm.rb +41 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/codable.rb +33 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_dss.rb +105 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_rsa.rb +85 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm.rb +28 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey.rb +9 -25
- data/lib/hrr_rb_ssh/authentication/method.rb +12 -9
- data/lib/hrr_rb_ssh/connection/channel/channel_type/channel_type.rb +30 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context.rb +46 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context.rb +44 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context.rb +54 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context.rb +41 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context.rb +44 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type.rb +33 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session.rb +30 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type.rb +25 -0
- data/lib/hrr_rb_ssh/connection/channel.rb +2 -12
- data/lib/hrr_rb_ssh/transport/compression_algorithm/compression_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/compression_algorithm/functionable.rb +31 -0
- data/lib/hrr_rb_ssh/transport/compression_algorithm/none.rb +7 -19
- data/lib/hrr_rb_ssh/transport/compression_algorithm/unfunctionable.rb +20 -0
- data/lib/hrr_rb_ssh/transport/compression_algorithm/zlib.rb +7 -24
- data/lib/hrr_rb_ssh/transport/compression_algorithm.rb +11 -9
- data/lib/hrr_rb_ssh/transport/direction.rb +11 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes128_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes128_ctr.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes192_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes192_ctr.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes256_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes256_ctr.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/arcfour.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/blowfish_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/cast128_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/functionable.rb +61 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/none.rb +6 -33
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/three_des_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/unfunctionable.rb +35 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm.rb +20 -9
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman.rb +3 -4
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group14_sha1.rb +4 -8
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group1_sha1.rb +4 -8
- data/lib/hrr_rb_ssh/transport/kex_algorithm/kex_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/kex_algorithm.rb +10 -9
- data/lib/hrr_rb_ssh/transport/mac_algorithm/functionable.rb +32 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_md5.rb +21 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_md5_96.rb +21 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1.rb +5 -29
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1_96.rb +21 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/mac_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/none.rb +6 -22
- data/lib/hrr_rb_ssh/transport/mac_algorithm/unfunctionable.rb +24 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm.rb +14 -9
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/server_host_key_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_dss.rb +106 -0
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb +4 -11
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm.rb +10 -8
- data/lib/hrr_rb_ssh/transport.rb +23 -15
- data/lib/hrr_rb_ssh/version.rb +1 -1
- metadata +51 -17
- data/lib/hrr_rb_ssh/authentication/method/publickey/ssh_rsa.rb +0 -116
- data/lib/hrr_rb_ssh/connection/channel/session/env/context.rb +0 -43
- data/lib/hrr_rb_ssh/connection/channel/session/env.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/exec/context.rb +0 -41
- data/lib/hrr_rb_ssh/connection/channel/session/exec.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/pty_req/context.rb +0 -50
- data/lib/hrr_rb_ssh/connection/channel/session/pty_req.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/shell/context.rb +0 -37
- data/lib/hrr_rb_ssh/connection/channel/session/shell.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/subsystem/context.rb +0 -40
- data/lib/hrr_rb_ssh/connection/channel/session/subsystem.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session.rb +0 -31
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes_128_cbc.rb +0 -73
@@ -1,37 +1,20 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
6
|
-
require 'hrr_rb_ssh/logger'
|
4
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/compression_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/functionable'
|
7
6
|
|
8
7
|
module HrrRbSsh
|
9
8
|
class Transport
|
10
9
|
class CompressionAlgorithm
|
11
|
-
|
12
|
-
'zlib'
|
13
|
-
]
|
14
|
-
|
15
|
-
class Zlib
|
16
|
-
def initialize
|
17
|
-
@logger = HrrRbSsh::Logger.new self.class.name
|
18
|
-
|
19
|
-
@deflator = ::Zlib::Deflate.new
|
20
|
-
@inflator = ::Zlib::Inflate.new
|
21
|
-
end
|
10
|
+
class Zlib < CompressionAlgorithm
|
11
|
+
NAME = 'zlib'
|
22
12
|
|
23
|
-
def
|
24
|
-
|
13
|
+
def initialize direction
|
14
|
+
super
|
25
15
|
end
|
26
16
|
|
27
|
-
|
28
|
-
@inflator.inflate(data)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
@@list ||= Hash.new
|
33
|
-
name_list.each do |name|
|
34
|
-
@@list[name] = Zlib
|
17
|
+
include Functionable
|
35
18
|
end
|
36
19
|
end
|
37
20
|
end
|
@@ -1,22 +1,24 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require 'hrr_rb_ssh/logger'
|
5
|
-
require 'hrr_rb_ssh/transport/compression_algorithm/none'
|
6
|
-
require 'hrr_rb_ssh/transport/compression_algorithm/zlib'
|
7
|
-
|
8
4
|
module HrrRbSsh
|
9
5
|
class Transport
|
10
6
|
class CompressionAlgorithm
|
11
|
-
|
12
|
-
|
13
|
-
def self.[] key
|
14
|
-
@@list[key]
|
7
|
+
def self.list
|
8
|
+
CompressionAlgorithm.list
|
15
9
|
end
|
16
10
|
|
17
11
|
def self.name_list
|
18
|
-
|
12
|
+
CompressionAlgorithm.name_list
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.[] key
|
16
|
+
CompressionAlgorithm[key]
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
21
|
+
|
22
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/compression_algorithm'
|
23
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/none'
|
24
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/zlib'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Aes128Cbc < EncryptionAlgorithm
|
11
|
+
NAME = 'aes128-cbc'
|
12
|
+
CIPHER_NAME = "AES-128-CBC"
|
13
|
+
BLOCK_SIZE = 16
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Aes128Ctr < EncryptionAlgorithm
|
11
|
+
NAME = 'aes128-ctr'
|
12
|
+
CIPHER_NAME = "AES-128-CTR"
|
13
|
+
BLOCK_SIZE = 16
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Aes192Cbc < EncryptionAlgorithm
|
11
|
+
NAME = 'aes192-cbc'
|
12
|
+
CIPHER_NAME = "AES-192-CBC"
|
13
|
+
BLOCK_SIZE = 16
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Aes192Ctr < EncryptionAlgorithm
|
11
|
+
NAME = 'aes192-ctr'
|
12
|
+
CIPHER_NAME = "AES-192-CTR"
|
13
|
+
BLOCK_SIZE = 16
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Aes256Cbc < EncryptionAlgorithm
|
11
|
+
NAME = 'aes256-cbc'
|
12
|
+
CIPHER_NAME = "AES-256-CBC"
|
13
|
+
BLOCK_SIZE = 16
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Aes256Ctr < EncryptionAlgorithm
|
11
|
+
NAME = 'aes256-ctr'
|
12
|
+
CIPHER_NAME = "AES-256-CTR"
|
13
|
+
BLOCK_SIZE = 16
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Arcfour < EncryptionAlgorithm
|
11
|
+
NAME = 'arcfour'
|
12
|
+
CIPHER_NAME = "RC4"
|
13
|
+
BLOCK_SIZE = 8
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class BlowfishCbc < EncryptionAlgorithm
|
11
|
+
NAME = 'blowfish-cbc'
|
12
|
+
CIPHER_NAME = "BF-CBC"
|
13
|
+
BLOCK_SIZE = 8
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class Cast128Cbc < EncryptionAlgorithm
|
11
|
+
NAME = 'cast128-cbc'
|
12
|
+
CIPHER_NAME = "CAST5-CBC"
|
13
|
+
BLOCK_SIZE = 8
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,34 @@
|
|
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
|
@@ -0,0 +1,61 @@
|
|
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
|
+
module Functionable
|
10
|
+
def self.included klass
|
11
|
+
cipher = OpenSSL::Cipher.new(klass::CIPHER_NAME)
|
12
|
+
klass.const_set(:IV_LENGTH, cipher.iv_len)
|
13
|
+
klass.const_set(:KEY_LENGTH, cipher.key_len)
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize direction, iv, key
|
17
|
+
super
|
18
|
+
|
19
|
+
@cipher = OpenSSL::Cipher.new(self.class::CIPHER_NAME)
|
20
|
+
case direction
|
21
|
+
when HrrRbSsh::Transport::Direction::OUTGOING
|
22
|
+
@cipher.encrypt
|
23
|
+
when HrrRbSsh::Transport::Direction::INCOMING
|
24
|
+
@cipher.decrypt
|
25
|
+
end
|
26
|
+
@cipher.padding = 0
|
27
|
+
@cipher.iv = iv
|
28
|
+
@cipher.key = key
|
29
|
+
end
|
30
|
+
|
31
|
+
def block_size
|
32
|
+
self.class::BLOCK_SIZE
|
33
|
+
end
|
34
|
+
|
35
|
+
def iv_length
|
36
|
+
self.class::IV_LENGTH
|
37
|
+
end
|
38
|
+
|
39
|
+
def key_length
|
40
|
+
self.class::KEY_LENGTH
|
41
|
+
end
|
42
|
+
|
43
|
+
def encrypt data
|
44
|
+
if data.empty?
|
45
|
+
data
|
46
|
+
else
|
47
|
+
@cipher.update(data) + @cipher.final
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def decrypt data
|
52
|
+
if data.empty?
|
53
|
+
data
|
54
|
+
else
|
55
|
+
@cipher.update(data) + @cipher.final
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -2,47 +2,20 @@
|
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
4
|
require 'hrr_rb_ssh/logger'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/unfunctionable'
|
5
6
|
|
6
7
|
module HrrRbSsh
|
7
8
|
class Transport
|
8
9
|
class EncryptionAlgorithm
|
9
|
-
|
10
|
-
'none'
|
11
|
-
]
|
12
|
-
|
13
|
-
class None
|
10
|
+
class None < EncryptionAlgorithm
|
11
|
+
NAME = 'none'
|
14
12
|
BLOCK_SIZE = 0
|
15
|
-
IV_LENGTH = 0
|
16
|
-
KEY_LENGTH = 0
|
17
|
-
|
18
|
-
def initialize iv=nil, key=nil
|
19
|
-
@logger = HrrRbSsh::Logger.new self.class.name
|
20
|
-
end
|
21
|
-
|
22
|
-
def block_size
|
23
|
-
BLOCK_SIZE
|
24
|
-
end
|
25
|
-
|
26
|
-
def iv_length
|
27
|
-
IV_LENGTH
|
28
|
-
end
|
29
|
-
|
30
|
-
def key_length
|
31
|
-
KEY_LENGTH
|
32
|
-
end
|
33
13
|
|
34
|
-
def
|
35
|
-
|
14
|
+
def initialize direction=nil, iv=nil, key=nil
|
15
|
+
super
|
36
16
|
end
|
37
17
|
|
38
|
-
|
39
|
-
data
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
@@list ||= Hash.new
|
44
|
-
name_list.each do |name|
|
45
|
-
@@list[name] = None
|
18
|
+
include Unfunctionable
|
46
19
|
end
|
47
20
|
end
|
48
21
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/functionable'
|
6
|
+
|
7
|
+
module HrrRbSsh
|
8
|
+
class Transport
|
9
|
+
class EncryptionAlgorithm
|
10
|
+
class ThreeDesCbc < EncryptionAlgorithm
|
11
|
+
NAME = '3des-cbc'
|
12
|
+
CIPHER_NAME = "DES-EDE3-CBC"
|
13
|
+
BLOCK_SIZE = 8
|
14
|
+
|
15
|
+
include Functionable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
module HrrRbSsh
|
5
|
+
class Transport
|
6
|
+
class EncryptionAlgorithm
|
7
|
+
module Unfunctionable
|
8
|
+
def self.included klass
|
9
|
+
klass.const_set(:IV_LENGTH, 0)
|
10
|
+
klass.const_set(:KEY_LENGTH, 0)
|
11
|
+
end
|
12
|
+
|
13
|
+
def block_size
|
14
|
+
self.class::BLOCK_SIZE
|
15
|
+
end
|
16
|
+
|
17
|
+
def iv_length
|
18
|
+
self.class::IV_LENGTH
|
19
|
+
end
|
20
|
+
|
21
|
+
def key_length
|
22
|
+
self.class::KEY_LENGTH
|
23
|
+
end
|
24
|
+
|
25
|
+
def encrypt data
|
26
|
+
data
|
27
|
+
end
|
28
|
+
|
29
|
+
def decrypt data
|
30
|
+
data
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,22 +1,33 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require 'hrr_rb_ssh/logger'
|
5
|
-
require 'hrr_rb_ssh/transport/encryption_algorithm/none'
|
6
|
-
require 'hrr_rb_ssh/transport/encryption_algorithm/aes_128_cbc'
|
7
|
-
|
8
4
|
module HrrRbSsh
|
9
5
|
class Transport
|
10
6
|
class EncryptionAlgorithm
|
11
|
-
|
12
|
-
|
13
|
-
def self.[] key
|
14
|
-
@@list[key]
|
7
|
+
def self.list
|
8
|
+
EncryptionAlgorithm.list
|
15
9
|
end
|
16
10
|
|
17
11
|
def self.name_list
|
18
|
-
|
12
|
+
EncryptionAlgorithm.name_list
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.[] key
|
16
|
+
EncryptionAlgorithm[key]
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
21
|
+
|
22
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm'
|
23
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/none'
|
24
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/three_des_cbc'
|
25
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/blowfish_cbc'
|
26
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/aes128_cbc'
|
27
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/aes192_cbc'
|
28
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/aes256_cbc'
|
29
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/arcfour'
|
30
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/cast128_cbc'
|
31
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/aes128_ctr'
|
32
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/aes192_ctr'
|
33
|
+
require 'hrr_rb_ssh/transport/encryption_algorithm/aes256_ctr'
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require '
|
4
|
+
require 'openssl'
|
5
5
|
require 'hrr_rb_ssh/transport/data_type'
|
6
6
|
|
7
7
|
module HrrRbSsh
|
8
8
|
class Transport
|
9
9
|
class KexAlgorithm
|
10
|
-
|
10
|
+
module DiffieHellman
|
11
11
|
H0_DEFINITION = [
|
12
12
|
['string', 'V_C'],
|
13
13
|
['string', 'V_S'],
|
@@ -20,7 +20,7 @@ module HrrRbSsh
|
|
20
20
|
]
|
21
21
|
|
22
22
|
def initialize
|
23
|
-
|
23
|
+
super
|
24
24
|
|
25
25
|
@dh = OpenSSL::PKey::DH.new
|
26
26
|
if @dh.respond_to?(:set_pqg)
|
@@ -122,7 +122,6 @@ module HrrRbSsh
|
|
122
122
|
key_length = HrrRbSsh::Transport::MacAlgorithm[mac_algorithm_s_to_c_name]::KEY_LENGTH
|
123
123
|
build_key(shared_secret, hash(transport), 'F'.ord, transport.session_id, key_length)
|
124
124
|
end
|
125
|
-
|
126
125
|
end
|
127
126
|
end
|
128
127
|
end
|
@@ -1,16 +1,15 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
+
require 'hrr_rb_ssh/transport/kex_algorithm/kex_algorithm'
|
4
5
|
require 'hrr_rb_ssh/transport/kex_algorithm/diffie_hellman'
|
5
6
|
|
6
7
|
module HrrRbSsh
|
7
8
|
class Transport
|
8
9
|
class KexAlgorithm
|
9
|
-
|
10
|
-
'diffie-hellman-group14-sha1'
|
11
|
-
]
|
10
|
+
class DiffieHellmanGroup14Sha1 < KexAlgorithm
|
11
|
+
NAME = 'diffie-hellman-group14-sha1'
|
12
12
|
|
13
|
-
class DiffieHellmanGroup14Sha1 < DiffieHellman
|
14
13
|
P = \
|
15
14
|
"FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" \
|
16
15
|
"C4C6628B" "80DC1CD1" "29024E08" "8A67CC74" \
|
@@ -31,11 +30,8 @@ module HrrRbSsh
|
|
31
30
|
G = 2
|
32
31
|
|
33
32
|
DIGEST = 'sha1'
|
34
|
-
end
|
35
33
|
|
36
|
-
|
37
|
-
name_list.each do |name|
|
38
|
-
@@list[name] = DiffieHellmanGroup14Sha1
|
34
|
+
include DiffieHellman
|
39
35
|
end
|
40
36
|
end
|
41
37
|
end
|
@@ -1,16 +1,15 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
+
require 'hrr_rb_ssh/transport/kex_algorithm/kex_algorithm'
|
4
5
|
require 'hrr_rb_ssh/transport/kex_algorithm/diffie_hellman'
|
5
6
|
|
6
7
|
module HrrRbSsh
|
7
8
|
class Transport
|
8
9
|
class KexAlgorithm
|
9
|
-
|
10
|
-
'diffie-hellman-group1-sha1'
|
11
|
-
]
|
10
|
+
class DiffieHellmanGroup1Sha1 < KexAlgorithm
|
11
|
+
NAME = 'diffie-hellman-group1-sha1'
|
12
12
|
|
13
|
-
class DiffieHellmanGroup1Sha1 < DiffieHellman
|
14
13
|
P = \
|
15
14
|
"FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" \
|
16
15
|
"C4C6628B" "80DC1CD1" "29024E08" "8A67CC74" \
|
@@ -23,11 +22,8 @@ module HrrRbSsh
|
|
23
22
|
G = 2
|
24
23
|
|
25
24
|
DIGEST = 'sha1'
|
26
|
-
end
|
27
25
|
|
28
|
-
|
29
|
-
name_list.each do |name|
|
30
|
-
@@list[name] = DiffieHellmanGroup1Sha1
|
26
|
+
include DiffieHellman
|
31
27
|
end
|
32
28
|
end
|
33
29
|
end
|
@@ -0,0 +1,34 @@
|
|
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
|