# File digest/lib/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
# File digest/lib/digest/hmac.rb, line 94
def block_length
@md.block_length
end
# File digest/lib/digest/hmac.rb, line 90
def digest_length
@md.digest_length
end
# File digest/lib/digest/hmac.rb, line 66
def initialize_copy(other)
@md = other.instance_eval { @md.clone }
end
# File digest/lib/digest/hmac.rb, line 98
def inspect
sprintf('#<%s: key=%s, digest=%s>', self.class.name, @key.inspect, @md.inspect.sub(/^\#<(.*)>$/) { $1 });
end
# File digest/lib/digest/hmac.rb, line 76
def reset
@md.reset
@md.update(@ipad)
self
end
# File digest/lib/digest/hmac.rb, line 70
def update(text)
@md.update(text)
self
end