main
 1# frozen_string_literal: true
 2
 3module Xml
 4  module Kit
 5    # @deprecated Use {#Xml::Kit::EncryptedData} class instead of this
 6    class Encryption < EncryptedData
 7      DEFAULT_SYMMETRIC = Crypto::SymmetricCipher::DEFAULT_ALGORITHM
 8      DEFAULT_ASYMMETRIC = Crypto::RsaCipher::ALGORITHM
 9
10      attr_reader :asymmetric_algorithm
11      attr_reader :symmetric_algorithm
12      attr_reader :symmetric_cipher_value
13      attr_reader :key_info
14
15      def initialize(raw_xml, public_key,
16                     symmetric_algorithm: DEFAULT_SYMMETRIC,
17                     asymmetric_algorithm: DEFAULT_ASYMMETRIC, key_info: nil)
18        @symmetric_algorithm = symmetric_algorithm
19        @asymmetric_algorithm = asymmetric_algorithm
20        Xml::Kit.deprecate('Encryption', alternative: 'EncryptedData')
21        super(raw_xml,
22          symmetric_cipher: symmetric(symmetric_algorithm),
23          asymmetric_cipher: asymmetric(asymmetric_algorithm, public_key),
24          key_info: key_info
25        )
26      end
27
28      def template_path
29        Template::TEMPLATES_DIR.join('encrypted_data.builder')
30      end
31
32      private
33
34      def symmetric(algorithm)
35        return algorithm unless algorithm.is_a?(String)
36
37        ::Xml::Kit::Crypto::SymmetricCipher.new(algorithm)
38      end
39
40      def asymmetric(algorithm, public_key)
41        return algorithm unless algorithm.is_a?(String)
42
43        ::Xml::Kit::Crypto.cipher_for(algorithm, public_key)
44      end
45    end
46  end
47end