module Refcode class Encoder attr_accessor :secret, :salt def initialize yield self if block_given? end def encode val Base64URL.encode(encrypt(YAML.dump(val))) end def decode val YAML.load(decrypt(Base64URL.decode(val))) end def secret= secret secret = secret * 2 until secret.size >= 32 @secret = secret end private def encrypt val Encryptor.encrypt(:value => val, :key => @secret, :salt => @salt, :iv => iv) end def decrypt val Encryptor.decrypt(:value => val, :key => @secret, :salt => @salt, :iv => iv) end def iv [@secret, @salt, 42].join end end end