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
Public Class Methods
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
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 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
# 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
# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 84 def get_g G end
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
# File lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb, line 80 def get_p OpenSSL::BN.new(P_s, P_r) end
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