hrr_rb_ssh 0.1.1 → 0.1.2
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.
- 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
|