class Net::SSH::Transport::CipherFactory

def self.get_lengths(name, options = {})

if :iv_len option is supplied the third return value will be ivlen
of the tuple.
algorithm is unknown, or is "none", 0 is returned for both elements
block-size ] for the named cipher algorithm. If the cipher
Returns a two-element array containing the [ key-length,
def self.get_lengths(name, options = {})
  klass = SSH_TO_CLASS[name]
  return [klass.key_length, klass.block_size] unless klass.nil?
  ossl_name = SSH_TO_OSSL[name]
  if ossl_name.nil? || ossl_name == "none"
    result = [0, 0]
    result << 0 if options[:iv_len]
  else
    cipher = OpenSSL::Cipher.new(ossl_name)
    key_len = cipher.key_len
    cipher.key_len = key_len
    block_size =
      case ossl_name
      when /\-ctr/
        Net::SSH::Transport::OpenSSLAESCTR.block_size
      else
        cipher.block_size
      end
    result = [key_len, block_size]
    result << cipher.iv_len if options[:iv_len]
  end
  result
end