Sha256: da785374f17829336849a4a544d71a41d61ba48ba4a8e43fdfce0051c22f8832

Contents?: true

Size: 1.3 KB

Versions: 18

Compression:

Stored size: 1.3 KB

Contents

require 'base64'

module AttrVault
  # borrowed wholesale from Fernet

  # Internal: Encapsulates a secret key, a 32-byte sequence consisting
  #   of an encryption and a signing key.
  class Secret
    # Internal - Initialize a Secret
    #
    # secret - the secret, optionally encoded with either standard or
    #          URL safe variants of Base64 encoding
    #
    # Raises AttrVault::Secret::InvalidSecret if it cannot be decoded or is
    #   not of the expected length
    def initialize(secret)
      if secret.bytesize == 32
        @secret = secret
      else
        begin
          @secret = Base64.urlsafe_decode64(secret)
        rescue ArgumentError
          @secret = Base64.decode64(secret)
        end
        unless @secret.bytesize == 32
          raise InvalidSecret,
            "Secret must be 32 bytes, instead got #{@secret.bytesize}"
        end
      end
    end

    # Internal: Returns the portion of the secret token used for encryption
    def encryption_key
      @secret.slice(16, 16)
    end

    # Internal: Returns the portion of the secret token used for signing
    def signing_key
      @secret.slice(0, 16)
    end

    # Public: String representation of this secret, masks to avoid leaks.
    def to_s
      "<AttrVault::Secret [masked]>"
    end
    alias to_s inspect
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
attr_vault-2.1.2 lib/attr_vault/secret.rb
attr_vault-2.1.1 lib/attr_vault/secret.rb
attr_vault-2.1.0 lib/attr_vault/secret.rb
attr_vault-2.0.0 lib/attr_vault/secret.rb
attr_vault-1.0.1 lib/attr_vault/secret.rb
attr_vault-1.0.0 lib/attr_vault/secret.rb
attr_vault-0.2.1 lib/attr_vault/secret.rb
attr_vault-0.2.0 lib/attr_vault/secret.rb
attr_vault-0.1.2 lib/attr_vault/secret.rb
attr_vault-0.1.1 lib/attr_vault/secret.rb
attr_vault-0.0.9 lib/attr_vault/secret.rb
attr_vault-0.0.8 lib/attr_vault/secret.rb
attr_vault-0.0.7 lib/attr_vault/secret.rb
attr_vault-0.0.6 lib/attr_vault/secret.rb
attr_vault-0.0.4 lib/attr_vault/secret.rb
attr_vault-0.0.3 lib/attr_vault/secret.rb
attr_vault-0.0.2 lib/attr_vault/secret.rb
attr_vault-0.0.1 lib/attr_vault/secret.rb