Sha256: bdd382bc5ccadf575d081471e7082fe7db5178933428f7af508b85ad513ee3b7

Contents?: true

Size: 1.62 KB

Versions: 1018

Compression:

Stored size: 1.62 KB

Contents

require 'base64'

module Aws
  module S3
    module Encryption
      # @api private
      class DefaultCipherProvider

        def initialize(options = {})
          @key_provider = options[:key_provider]
        end

        # @return [Array<Hash,Cipher>] Creates an returns a new encryption
        #   envelope and encryption cipher.
        def encryption_cipher
          cipher = Utils.aes_encryption_cipher(:CBC)
          envelope = {
            'x-amz-key' => encode64(encrypt(envelope_key(cipher))),
            'x-amz-iv' => encode64(envelope_iv(cipher)),
            'x-amz-matdesc' => materials_description,
          }
          [envelope, cipher]
        end

        # @return [Cipher] Given an encryption envelope, returns a
        #   decryption cipher.
        def decryption_cipher(envelope)
          master_key = @key_provider.key_for(envelope['x-amz-matdesc'])
          key = Utils.decrypt(master_key, decode64(envelope['x-amz-key']))
          iv = decode64(envelope['x-amz-iv'])
          Utils.aes_decryption_cipher(:CBC, key, iv)
        end

        private

        def envelope_key(cipher)
          cipher.key = cipher.random_key
        end

        def envelope_iv(cipher)
          cipher.iv = cipher.random_iv
        end

        def encrypt(data)
          Utils.encrypt(@key_provider.encryption_materials.key, data)
        end

        def materials_description
          @key_provider.encryption_materials.description
        end

        def encode64(str)
          Base64.encode64(str).split("\n") * ""
        end

        def decode64(str)
          Base64.decode64(str)
        end

      end
    end
  end
end

Version data entries

1,018 entries across 1,018 versions & 3 rubygems

Version Path
aws-sdk-resources-2.11.561 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.560 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.559 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.558 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.557 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.556 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.555 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.554 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.553 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.552 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.551 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.550 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.549 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.548 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.547 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.546 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.545 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.544 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.543 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb
aws-sdk-resources-2.11.542 lib/aws-sdk-resources/services/s3/encryption/default_cipher_provider.rb