# File digest/lib/digest/hmac.rb, line 50
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, 0x36)
opad = Array.new(block_len, 0x5c)
key.bytes.each_with_index { |c, i|
ipad[i] ^= c
opad[i] ^= c
}
@key = key.freeze
@ipad = ipad.pack('C*').freeze
@opad = opad.pack('C*').freeze
@md.update(@ipad)
end
# File digest/lib/digest/hmac.rb, line 101
def block_length
@md.block_length
end
# File digest/lib/digest/hmac.rb, line 97
def digest_length
@md.digest_length
end
# File digest/lib/digest/hmac.rb, line 73
def initialize_copy(other)
@md = other.instance_eval { @md.clone }
end
# File digest/lib/digest/hmac.rb, line 105
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 83
def reset
@md.reset
@md.update(@ipad)
self
end
# File digest/lib/digest/hmac.rb, line 77
def update(text)
@md.update(text)
self
end