Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
An experimental implementation of HMAC keyed-hashing algorithm
CAUTION: Use of this library is discouraged, because this implementation was meant to be experimental but somehow got into the 1.9 series without being noticed. Please use OpenSSL::HMAC in the “openssl” library instead.
require 'digest/hmac' # one-liner example puts Digest::HMAC.hexdigest("data", "hash key", Digest::SHA1) # rather longer one hmac = Digest::HMAC.new("foo", Digest::RMD160) buf = "" while stream.read(16384, buf) hmac.update(buf) end puts hmac.bubblebabble
Creates a Digest::HMAC instance.
# 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
Returns the block length in bytes of the hmac.
# File digest/lib/digest/hmac.rb, line 118
def block_length
@md.block_length
end
Returns the length in bytes of the hash value of the digest.
# File digest/lib/digest/hmac.rb, line 110
def digest_length
@md.digest_length
end
Creates a printable version of the hmac object.
# File digest/lib/digest/hmac.rb, line 126
def inspect
sprintf('#<%s: key=%s, digest=%s>', self.class.name, @key.inspect, @md.inspect.sub(/^\#<(.*)>$/) { $1 });
end
Resets the hmac to the initial state and returns self.
# File digest/lib/digest/hmac.rb, line 92
def reset
@md.reset
@md.update(@ipad)
self
end
Updates the hmac using a given string and returns self.
# File digest/lib/digest/hmac.rb, line 82
def update(text)
@md.update(text)
self
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.