class 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.hexdigest

Public Class Methods

new(key, digester) click to toggle source

Creates a Digest::HMAC instance.

# File ext/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)
Alias for: update
block_length → Integer click to toggle source

Returns the block length in bytes of the hmac.

# File ext/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 ext/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 ext/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 ext/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 ext/digest/lib/digest/hmac.rb, line 82
def update(text)
  @md.update(text)
  self
end
Also aliased as: <<