Method: Digest::HMAC#initialize

Defined in:
lib/digest/hmac.rb

#initialize(key, digester) ⇒ HMAC

Returns a new instance of HMAC.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/digest/hmac.rb', line 44

def initialize(key, digester)
  @md = digester.new

  block_len = @md.block_length

  if key.bytesize > block_len
    key = @md.digest(key)
  end

  ipad = Array.new(block_len).fill(0x36)
  opad = Array.new(block_len).fill(0x5c)

  key.bytes.each_with_index { |c, i|
    ipad[i] ^= c
    opad[i] ^= c
  }

  @key = key.freeze
  @ipad = ipad.inject('') { |s, c| s << c.chr }.freeze
  @opad = opad.inject('') { |s, c| s << c.chr }.freeze
  @md.update(@ipad)
end