Sha256: 2fd67108473163b94bde3affdde866218dbdc65f90d970847d8731d2edb24d6f
Contents?: true
Size: 1.34 KB
Versions: 2
Compression:
Stored size: 1.34 KB
Contents
require 'base64' require 'multi_json' require 'openssl' require 'date' module Fernet::Legacy class Generator attr_accessor :data, :payload def initialize(secret, encrypt) @secret = Secret.new(secret, encrypt) @encrypt = encrypt @payload = '' @data = {} end def generate yield self if block_given? data.merge!(:issued_at => DateTime.now) if encrypt? iv = encrypt_data! @payload = "#{base64(data)}|#{base64(iv)}" else @payload = base64(MultiJson.dump(data)) end mac = OpenSSL::HMAC.hexdigest('sha256', payload, signing_key) "#{payload}|#{mac}" end def inspect "#<Fernet::Legacy::Generator @secret=[masked] @data=#{@data.inspect}>" end alias to_s inspect def data @data ||= {} end private attr_reader :secret def encrypt_data! cipher = OpenSSL::Cipher.new('AES-128-CBC') cipher.encrypt iv = cipher.random_iv cipher.iv = iv cipher.key = encryption_key @data = cipher.update(MultiJson.dump(data)) + cipher.final iv end def base64(chars) Base64.urlsafe_encode64(chars) end def encryption_key @secret.encryption_key end def signing_key @secret.signing_key end def encrypt? @encrypt end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
legacy-fernet-1.6.3 | lib/fernet/legacy/generator.rb |
legacy-fernet-1.6.2 | lib/fernet/generator.rb |