Sha256: ddb488ec62d11b416c0d506a2f39a419ae264e2c4d507e094cd7b81abd9bef87

Contents?: true

Size: 1.29 KB

Versions: 5

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

require 'base64'

require 'chamber/errors/disallowed_class'

module  Chamber
module  EncryptionMethods
class   PublicKey
  def self.encrypt(_settings_key, value, encryption_key)
    value            = YAML.dump(value)
    encrypted_string = encryption_key.public_encrypt(value)

    Base64.strict_encode64(encrypted_string)
  end

  def self.decrypt(_settings_key, value, decryption_key)
    return value if decryption_key.nil?

    decoded_string    = ::Base64.strict_decode64(value)
    unencrypted_value = decryption_key.private_decrypt(decoded_string)

    ::YAML.safe_load(unencrypted_value,
                     aliases:           true,
                     permitted_classes: [
                                          ::Date,
                                          ::Time,
                                          ::Regexp,
                                        ])
  rescue ::Psych::DisallowedClass => error
    raise ::Chamber::Errors::DisallowedClass, <<~HEREDOC
      #{error.message}

      You attempted to load a class instance via your Chamber settings that is not allowed.

      See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#limiting-complex-classes for full details.
    HEREDOC
  rescue ::TypeError
    unencrypted_value
  end
end
end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
chamber-3.1.1 lib/chamber/encryption_methods/public_key.rb
chamber-3.1.0 lib/chamber/encryption_methods/public_key.rb
chamber-3.0.1 lib/chamber/encryption_methods/public_key.rb
chamber-3.0.0 lib/chamber/encryption_methods/public_key.rb
chamber-3.0.0rc2 lib/chamber/encryption_methods/public_key.rb