Sha256: d92d42b0bda198f5729df4f8fd1e40964a56cd7d05cf49c43c35d1fd2046e6ba

Contents?: true

Size: 1.41 KB

Versions: 5

Compression:

Stored size: 1.41 KB

Contents

module Xmlenc
  module Builder
    class EncryptedData
      include Xmlenc::Builder::ComplexTypes::EncryptedType

      ALGORITHMS = {
          'http://www.w3.org/2001/04/xmlenc#tripledes-cbc' => Algorithms::DES3CBC,
          'http://www.w3.org/2001/04/xmlenc#aes128-cbc'    => Algorithms::AESCBC[128],
          'http://www.w3.org/2001/04/xmlenc#aes256-cbc'    => Algorithms::AESCBC[256]
      }
      TYPES = {
          'http://www.w3.org/2001/04/xmlenc#Element' => :element,
          'http://www.w3.org/2001/04/xmlenc#Content' => :content,
      }

      tag "EncryptedData"
      namespace "xenc"

      attribute :id, String, :tag => "Id"
      attribute :type, String, :tag => "Type"

      def type
        'http://www.w3.org/2001/04/xmlenc#Element'
      end

      def initialize(attributes = {})
        super
        self.id = SecureRandom.hex(5)
      end

      def encrypt(data)
        encryptor = algorithm.setup
        encrypted = encryptor.encrypt(data, :node => encryption_method)
        cipher_data.cipher_value = Base64.encode64(encrypted)

        encrypted_key = EncryptedKey.new(:data => encryptor.key)
        encrypted_key.add_data_reference(id)
        encrypted_key
      end

      private

      def algorithm
        algorithm = encryption_method.algorithm
        ALGORITHMS[algorithm] ||
            raise(UnsupportedError.new("Unsupported encryption method #{algorithm}"))
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
xmlenc-0.3.0 lib/xmlenc/builder/encrypted_data.rb
xmlenc-0.2.1 lib/xmlenc/builder/encrypted_data.rb
xmlenc-0.2.0 lib/xmlenc/builder/encrypted_data.rb
xmlenc-0.1.7 lib/xmlenc/builder/encrypted_data.rb
xmlenc-0.1.6 lib/xmlenc/builder/encrypted_data.rb