Class: Digest::HMAC

Inherits:
Class show all
Defined in:
lib/digest/hmac.rb

Instance Method Summary collapse

Constructor Details

#initialize(key, digester) ⇒ 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

Instance Method Details

#block_lengthObject


95
96
97
# File 'lib/digest/hmac.rb', line 95

def block_length
  @md.block_length
end

#digest_lengthObject


91
92
93
# File 'lib/digest/hmac.rb', line 91

def digest_length
  @md.digest_length
end

#initialize_copy(other) ⇒ Object


67
68
69
# File 'lib/digest/hmac.rb', line 67

def initialize_copy(other)
  @md = other.instance_eval { @md.clone }
end

#inspectObject


99
100
101
# File 'lib/digest/hmac.rb', line 99

def inspect
  sprintf('#<%s: key=%s, digest=%s>', self.class.name, @key.inspect, @md.inspect.sub(/^\#<(.*)>$/) { $1 });
end

#resetObject


77
78
79
80
81
# File 'lib/digest/hmac.rb', line 77

def reset
  @md.reset
  @md.update(@ipad)
  self
end

#update(text) ⇒ Object Also known as: <<


71
72
73
74
# File 'lib/digest/hmac.rb', line 71

def update(text)
  @md.update(text)
  self
end