Sha256: e39bfc547fdfb2e548581a45c8f10cd9d56c978c45da1c6709f715c338dbf2d6

Contents?: true

Size: 1.61 KB

Versions: 43

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

require "securerandom"

module ActiveRecord
  module Encryption
    # Utility for generating and deriving random keys.
    class KeyGenerator
      # Returns a random key. The key will have a size in bytes of +:length+ (configured +Cipher+'s length by default)
      def generate_random_key(length: key_length)
        SecureRandom.random_bytes(length)
      end

      # Returns a random key in hexadecimal format. The key will have a size in bytes of +:length+ (configured +Cipher+'s
      # length by default)
      #
      # Hexadecimal format is handy for representing keys as printable text. To maximize the space of characters used, it is
      # good practice including not printable characters. Hexadecimal format ensures that generated keys are representable with
      # plain text
      #
      # To convert back to the original string with the desired length:
      #
      #   [ value ].pack("H*")
      def generate_random_hex_key(length: key_length)
        generate_random_key(length: length).unpack("H*")[0]
      end

      # Derives a key from the given password. The key will have a size in bytes of +:length+ (configured +Cipher+'s length
      # by default)
      #
      # The generated key will be salted with the value of +ActiveRecord::Encryption.key_derivation_salt+
      def derive_key_from(password, length: key_length)
        ActiveSupport::KeyGenerator.new(password).generate_key(ActiveRecord::Encryption.config.key_derivation_salt, length)
      end

      private
        def key_length
          @key_length ||= ActiveRecord::Encryption.cipher.key_length
        end
    end
  end
end

Version data entries

43 entries across 41 versions & 6 rubygems

Version Path
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/activerecord-7.0.8.7/lib/active_record/encryption/key_generator.rb
activerecord-7.0.8.7 lib/active_record/encryption/key_generator.rb
activerecord-7.0.8.6 lib/active_record/encryption/key_generator.rb
activerecord-7.0.8.5 lib/active_record/encryption/key_generator.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8.4/lib/active_record/encryption/key_generator.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/activerecord-7.0.5.1/lib/active_record/encryption/key_generator.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/activerecord-7.0.5.1/lib/active_record/encryption/key_generator.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/activerecord-7.0.5.1/lib/active_record/encryption/key_generator.rb
activerecord-7.0.8.4 lib/active_record/encryption/key_generator.rb
activerecord-7.0.8.1 lib/active_record/encryption/key_generator.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activerecord-7.0.2.3/lib/active_record/encryption/key_generator.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/encryption/key_generator.rb
activerecord-7.0.8 lib/active_record/encryption/key_generator.rb
activerecord-7.0.7.2 lib/active_record/encryption/key_generator.rb
activerecord-7.0.7.1 lib/active_record/encryption/key_generator.rb
activerecord-7.0.7 lib/active_record/encryption/key_generator.rb
activerecord-7.0.6 lib/active_record/encryption/key_generator.rb
activerecord-7.0.5.1 lib/active_record/encryption/key_generator.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/activerecord-7.0.2.3/lib/active_record/encryption/key_generator.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/encryption/key_generator.rb