class Net::SSH::Transport::Kex::Abstract

Abstract class that implement Diffie-Hellman Key Exchange See tools.ietf.org/html/rfc4253#page-21

Attributes

algorithms[R]
connection[R]
data[R]
dh[R]

Public Class Methods

new(algorithms, connection, data) click to toggle source

Create a new instance of the Diffie-Hellman Key Exchange algorithm. The Diffie-Hellman (DH) key exchange provides a shared secret that cannot be determined by either party alone. The key exchange is combined with a signature with the host key to provide host authentication.

# File lib/net/ssh/transport/kex/abstract.rb, line 27
def initialize(algorithms, connection, data)
  @algorithms = algorithms
  @connection = connection

  @data = data.dup
  @dh = generate_key
  @logger = @data.delete(:logger)
end

Public Instance Methods

digester() click to toggle source
# File lib/net/ssh/transport/kex/abstract.rb, line 61
def digester
  raise NotImplementedError, 'abstract class: digester not implemented'
end
exchange_keys() click to toggle source

Perform the key-exchange for the given session, with the given data. This method will return a hash consisting of the following keys:

  • :session_id

  • :server_key

  • :shared_secret

  • :hashing_algorithm

The caller is expected to be able to understand how to use these deliverables.

# File lib/net/ssh/transport/kex/abstract.rb, line 47
def exchange_keys
  result = send_kexinit
  verify_server_key(result[:server_key])
  session_id = verify_signature(result)
  confirm_newkeys

  {
    session_id: session_id,
    server_key: result[:server_key],
    shared_secret: result[:shared_secret],
    hashing_algorithm: digester
  }
end