class PHash

Attributes

digest[R]
hash_function[R]
key_length[R]
secret[R]
seed[R]

Public Class Methods

new(hash_function, secret, seed, key_length = 32) click to toggle source
# File lib/p_hash.rb, line 7
def initialize(hash_function, secret, seed, key_length = 32)
  @hash_function = hash_function
  @secret = secret
  @seed = seed
  @key_length = key_length
  calculate_digest
end

Public Instance Methods

base64digest() click to toggle source
# File lib/p_hash.rb, line 19
def base64digest
  @base64digest ||= Base64.strict_encode64(digest)
end
hexdigest() click to toggle source
# File lib/p_hash.rb, line 15
def hexdigest
  @hexdigest ||= digest.unpack('H*').first
end

Private Instance Methods

calculate_digest() click to toggle source
# File lib/p_hash.rb, line 25
def calculate_digest
  digest = ''
  while digest.length < key_length
    digest = digest + OpenSSL::HMAC.digest(
      hash_function,
      secret,
      next_a_value + seed
    )
  end
  @digest = digest[0...key_length]
end
next_a_value() click to toggle source
# File lib/p_hash.rb, line 37
def next_a_value
  @a_value = OpenSSL::HMAC.digest(
    hash_function,
    secret,
    @a_value || seed
  )
end