Module: Net::SSH::Transport::KeyExpander

Defined in:
lib/net/ssh/transport/key_expander.rb

Class Method Summary collapse

Class Method Details

.expand_key(bytes, start, options = {}) ⇒ Object

Generate a key value in accordance with the SSH2 specification. (RFC4253 7.2. “Output from Key Exchange”)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/net/ssh/transport/key_expander.rb', line 8

def self.expand_key(bytes, start, options={})
  if bytes == 0
    return ""
  end
      
  k = start[0, bytes]
  return k if k.length >= bytes
      
  digester = options[:digester] or raise 'No digester supplied'
  shared   = options[:shared] or raise 'No shared secret supplied'
  hash     = options[:hash] or raise 'No hash supplied'
      
  while k.length < bytes
    step = digester.digest(shared + hash + k)
    bytes_needed = bytes - k.length
    k << step[0, bytes_needed]
  end
      
  return k
end