Class: Digest::HMAC

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

Instance Method Summary collapse

Methods inherited from Class

file

Constructor Details

#initialize(key, digester) ⇒ HMAC

Returns a new instance of HMAC.



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

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



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

def block_length
  @md.block_length
end

#digest_lengthObject



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

def digest_length
  @md.digest_length
end

#initialize_copy(other) ⇒ Object



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

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

#inspectObject



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

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

#resetObject



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

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

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



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

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