class DecryptedHash

Encapsulates encrypting and decrypting a hash of data. Does not store the key that is passed in.

Constants

Lockbox

Public Class Methods

new(decrypted_hash = nil) click to toggle source
Calls superclass method
# File lib/heroku/bouncer/decrypted_hash.rb, line 9
def initialize(decrypted_hash = nil)
  super
  replace(decrypted_hash) if decrypted_hash
end
unlock(data, key) click to toggle source
# File lib/heroku/bouncer/decrypted_hash.rb, line 14
def self.unlock(data, key)
  if data && data = Lockbox.new(key).unlock(data)
    data, digest = data.split("--")
    if digest == Lockbox.generate_hmac(data, key)
      data = data.unpack('m*').first
      data = Marshal.load(data)
      new(data)
    else
      new
    end
  else
    new
  end
end

Public Instance Methods

lock(key) click to toggle source
# File lib/heroku/bouncer/decrypted_hash.rb, line 29
def lock(key)
  # marshal a Hash, not a DecryptedHash
  data = {}.replace(self)
  data = Marshal.dump(data)
  data = [data].pack('m*')
  data = "#{data}--#{Lockbox.generate_hmac(data, key)}"
  Lockbox.new(key).lock(data)
end