Module: Noise::Functions::Hash
  
  
  
  
  
  
  
  
  
  
  
  
    - Defined in:
- lib/noise/functions/hash.rb,
 lib/noise/functions/hash/sha256.rb,
 lib/noise/functions/hash/sha512.rb,
 lib/noise/functions/hash/blake2b.rb,
 lib/noise/functions/hash/blake2s.rb
 
Defined Under Namespace
  
    
  
    
      Classes: Blake2b, Blake2bHMAC, Blake2s, Blake2sDigester, Blake2sHMAC, Sha256, Sha512
    
  
  
    
      Class Method Summary
      collapse
    
    
  
  
    Class Method Details
    
      
  
  
    .create_hkdf_fn(digest)  ⇒ Object 
  
  
  
  
    | 
21
22
23
24
25 | # File 'lib/noise/functions/hash.rb', line 21
def self.create_hkdf_fn(digest)
  lambda do |chaining_key, input_key_material, num_output|
    hkdf(chaining_key, input_key_material, num_output, digest)
  end
end
 | 
 
    
      
  
  
    .hkdf(chaining_key, input_key_material, num_outputs, digest)  ⇒ Object 
  
  
  
  
    | 
27
28
29
30
31
32
33
34 | # File 'lib/noise/functions/hash.rb', line 27
def self.hkdf(chaining_key, input_key_material, num_outputs, digest)
  temp_key = hmac_hash(chaining_key, input_key_material, digest)
  output1 = hmac_hash(temp_key, "\x01", digest)
  output2 = hmac_hash(temp_key, output1 + "\x02", digest)
  return [output1, output2] if num_outputs == 2
  output3 = hmac_hash(temp_key, output2 + "\x03", digest)
  [output1, output2, output3]
end
 | 
 
    
      
  
  
    .hmac_hash(key, data, digest)  ⇒ Object 
  
  
  
  
    | 
11
12
13
14
15
16
17
18
19 | # File 'lib/noise/functions/hash.rb', line 11
def self.hmac_hash(key, data, digest)
  if digest.include?('SHA')
    OpenSSL::HMAC.digest(OpenSSL::Digest.new(digest), key, data)
  elsif digest.include?('BLAKE2b')
    Noise::Functions::Hash::Blake2bHMAC.new(key).update(data).digest
  elsif digest.include?('BLAKE2s')
    Noise::Functions::Hash::Blake2sHMAC.new(key).update(data).digest
  end
end
 |