Class | Net::SSH::Transport::CipherFactory |
In: |
lib/net/ssh/transport/cipher_factory.rb
lib/net/ssh/transport/cipher_factory.rb |
Parent: | Object |
Implements a factory of OpenSSL cipher algorithms.
SSH_TO_OSSL | = | { "3des-cbc" => "des-ede3-cbc", "blowfish-cbc" => "bf-cbc", "aes256-cbc" => "aes-256-cbc", "aes192-cbc" => "aes-192-cbc", "aes128-cbc" => "aes-128-cbc", "idea-cbc" => "idea-cbc", "cast128-cbc" => "cast-cbc", "rijndael-cbc@lysator.liu.se" => "aes-256-cbc", "none" => "none" | Maps the SSH name of a cipher to it‘s corresponding OpenSSL name | |
SSH_TO_OSSL | = | { "3des-cbc" => "des-ede3-cbc", "blowfish-cbc" => "bf-cbc", "aes256-cbc" => "aes-256-cbc", "aes192-cbc" => "aes-192-cbc", "aes128-cbc" => "aes-128-cbc", "idea-cbc" => "idea-cbc", "cast128-cbc" => "cast-cbc", "rijndael-cbc@lysator.liu.se" => "aes-256-cbc", "none" => "none" | Maps the SSH name of a cipher to it‘s corresponding OpenSSL name |
Retrieves a new instance of the named algorithm. The new instance will be initialized using an iv and key generated from the given iv, key, shared, hash and digester values. Additionally, the cipher will be put into encryption or decryption mode, based on the value of the encrypt parameter.
# File lib/net/ssh/transport/cipher_factory.rb, line 26 26: def self.get(name, options={}) 27: ossl_name = SSH_TO_OSSL[name] or raise NotImplementedError, "unimplemented cipher `#{name}'" 28: return IdentityCipher if ossl_name == "none" 29: 30: cipher = OpenSSL::Cipher::Cipher.new(ossl_name) 31: cipher.send(options[:encrypt] ? :encrypt : :decrypt) 32: 33: cipher.padding = 0 34: cipher.iv = make_key(cipher.iv_len, options[:iv], options) 35: cipher.key = make_key(cipher.key_len, options[:key], options) 36: 37: return cipher 38: end
Retrieves a new instance of the named algorithm. The new instance will be initialized using an iv and key generated from the given iv, key, shared, hash and digester values. Additionally, the cipher will be put into encryption or decryption mode, based on the value of the encrypt parameter.
# File lib/net/ssh/transport/cipher_factory.rb, line 26 26: def self.get(name, options={}) 27: ossl_name = SSH_TO_OSSL[name] or raise NotImplementedError, "unimplemented cipher `#{name}'" 28: return IdentityCipher if ossl_name == "none" 29: 30: cipher = OpenSSL::Cipher::Cipher.new(ossl_name) 31: cipher.send(options[:encrypt] ? :encrypt : :decrypt) 32: 33: cipher.padding = 0 34: cipher.iv = make_key(cipher.iv_len, options[:iv], options) 35: cipher.key = make_key(cipher.key_len, options[:key], options) 36: 37: return cipher 38: end
Returns a two-element array containing the [ key-length, block-size ] for the named cipher algorithm. If the cipher algorithm is unknown, or is "none", 0 is returned for both elements of the tuple.
# File lib/net/ssh/transport/cipher_factory.rb, line 44 44: def self.get_lengths(name) 45: ossl_name = SSH_TO_OSSL[name] 46: return [0, 0] if ossl_name.nil? || ossl_name == "none" 47: 48: cipher = OpenSSL::Cipher::Cipher.new(ossl_name) 49: return [cipher.key_len, cipher.block_size] 50: end
Returns a two-element array containing the [ key-length, block-size ] for the named cipher algorithm. If the cipher algorithm is unknown, or is "none", 0 is returned for both elements of the tuple.
# File lib/net/ssh/transport/cipher_factory.rb, line 44 44: def self.get_lengths(name) 45: ossl_name = SSH_TO_OSSL[name] 46: return [0, 0] if ossl_name.nil? || ossl_name == "none" 47: 48: cipher = OpenSSL::Cipher::Cipher.new(ossl_name) 49: return [cipher.key_len, cipher.block_size] 50: end