Sha256: 2f20e63533d41b9b518dca1713cc8cebbe9ebe6a0c185f9126e59b878337826f

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

module Xmlenc
  class EncryptedKey
    ALGORITHMS = {
        'http://www.w3.org/2001/04/xmlenc#rsa-1_5'        => Algorithms::Rsa15,
        'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p' => Algorithms::RsaOaepMgf1p
    }

    def initialize(node)
      @node = node
    end

    def document
      @node.document
    end

    def encryption_method
      at_xpath('./xenc:EncryptionMethod')
    end

    def encrypted_data
      EncryptedData.new(referenced_node)
    end

    def cipher_value
      at_xpath('./xenc:CipherData/xenc:CipherValue').content.gsub(/[\n\s]/, '')
    end

    def decrypt(key)
      decryptor = algorithm.new(key)
      decryptor.decrypt(Base64.decode64(cipher_value), node: encryption_method)
    end

    private

    def referenced_node
      document.at_xpath("//xenc:EncryptedData[@Id='#{reference_uri}']", NAMESPACES)
    end

    def reference_uri
      at_xpath('./xenc:ReferenceList/xenc:DataReference')['URI'][1..-1]
    end

    def at_xpath(xpath)
      @node.at_xpath(xpath, NAMESPACES)
    end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xmlenc-0.0.1 lib/xmlenc/encrypted_key.rb