class Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1

A key-exchange service implementing the “diffie-hellman-group1-sha1” key-exchange algorithm.

Constants

G

The group constant

P_r

The radix in which P_s represents the value of P

P_s

The value of 'P', as a string, in hexadecimal

Attributes

algorithms[R]
connection[R]
data[R]
dh[R]
digester[R]
g[R]
p[R]

Public Class Methods

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

Create a new instance of the DiffieHellmanGroup1SHA1 algorithm. The data is a Hash of symbols representing information required by this algorithm, which was acquired during earlier processing.

# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 42
def initialize(algorithms, connection, data)
  @p = get_p
  @g = get_g

  @digester = OpenSSL::Digest::SHA1
  @algorithms = algorithms
  @connection = connection

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

Public Instance Methods

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/diffie_hellman_group1_sha1.rb, line 66
def exchange_keys
  result = send_kexinit
  verify_server_key(result[:server_key])
  session_id = verify_signature(result)
  confirm_newkeys

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

Private Instance Methods

build_signature_buffer(result) click to toggle source

Build the signature buffer to use when verifying a signature from the server.

# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 100
def build_signature_buffer(result)
  response = Net::SSH::Buffer.new
  response.write_string data[:client_version_string],
                        data[:server_version_string],
                        data[:client_algorithm_packet],
                        data[:server_algorithm_packet],
                        result[:key_blob]
  response.write_bignum dh.pub_key,
                        result[:server_dh_pubkey],
                        result[:shared_secret]
  response
end
generate_key_fingerprint(key) click to toggle source
# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 189
def generate_key_fingerprint(key)
  blob = Net::SSH::Buffer.from(:key, key).to_s
  fingerprint = OpenSSL::Digest::MD5.hexdigest(blob).scan(/../).join(":")

  [blob, fingerprint]
rescue ::Exception => e
  [nil, "(could not generate fingerprint: #{e.message})"]
end
get_g() click to toggle source
# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 84
def get_g
  G
end
get_message_types() click to toggle source

Returns the INIT/REPLY constants used by this algorithm.

# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 94
def get_message_types
  [KEXDH_INIT, KEXDH_REPLY]
end
get_p() click to toggle source
# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 80
def get_p
  OpenSSL::BN.new(P_s, P_r)
end
get_parameters() click to toggle source

Returns the DH key parameters for the current connection.

# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 89
def get_parameters
  [p, g]
end