In Files

  • digest/lib/digest/hmac.rb

Class/Module Index [+]

Quicksearch

Digest::HMAC

digest/hmac.rb

An experimental implementation of HMAC keyed-hashing algorithm

Overview

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.

Examples

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

Public Class Methods

new(key, digester) click to toggle source

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
            

Public Instance Methods

<<(text) click to toggle source
Alias for: update
block_length → Integer click to toggle source

Returns the block length in bytes of the hmac.

 
               # File digest/lib/digest/hmac.rb, line 118
def block_length
  @md.block_length
end
            
digest_length → Integer click to toggle source

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
            
inspect → string click to toggle source

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
            
reset → hmac click to toggle source

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
            
update(string) → hmac click to toggle source
hmac << string → hmac

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
            
Also aliased as: <<