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.