class Crumbl

Constants

DEFAULT_ITERATIONS
VERSION

Attributes

options[RW]

Public Class Methods

new() { |options| ... } click to toggle source
# File lib/crumbl/base.rb, line 11
def initialize
  @options = {}
  yield @options if block_given?
  options[:iterations]                   ||= DEFAULT_ITERATIONS
  options[:encrypted_cookie_salt]        ||= DEFAULT_ENCRYPTED_COOKIE_SALT
  options[:encrypted_signed_cookie_salt] ||= DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
end

Public Instance Methods

decode(cookie) click to toggle source
# File lib/crumbl/base.rb, line 19
def decode cookie
  Marshal.load(Base64.decode64(cookie))
end
decrypt(cookie, secret_key_base) click to toggle source
# File lib/crumbl/base.rb, line 28
def decrypt cookie, secret_key_base
  encryptor = build_message_encryptor(secret_key_base)
  encryptor.decrypt_and_verify(cookie)
end
encode(data, key) click to toggle source
# File lib/crumbl/base.rb, line 23
def encode data, key
  cookie_verifier = ActiveSupport::MessageVerifier.new(key)
  cookie_verifier.generate data
end
encrypt(data, secret_key_base) click to toggle source
# File lib/crumbl/base.rb, line 33
def encrypt data, secret_key_base
  encryptor = build_message_encryptor(secret_key_base)
  encryptor.encrypt_and_sign(data.to_s)
end

Private Instance Methods

build_message_encryptor(secret_key_base) click to toggle source
# File lib/crumbl/base.rb, line 40
def build_message_encryptor secret_key_base
  key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: options[:iterations])
  secret        = key_generator.generate_key(options[:encrypted_cookie_salt])
  sign_secret   = key_generator.generate_key(options[:encrypted_signed_cookie_salt])
  ActiveSupport::MessageEncryptor.new(secret, sign_secret, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
end