main
1# frozen_string_literal: true
2
3module Xml
4 module Kit
5 # An implementation of the EncryptedKey element.
6 # https://www.w3.org/TR/xmlenc-core1/#sec-EncryptedData
7 #
8 # @since 0.3.0
9 class EncryptedData
10 attr_reader :id
11 attr_reader :key_info
12 attr_reader :symmetric_cipher
13 attr_reader :symmetric_cipher_value
14
15 def initialize(raw_xml,
16 id: Id.generate,
17 symmetric_cipher: nil,
18 asymmetric_cipher: nil,
19 key_info: nil)
20 @id = id
21 @symmetric_cipher = symmetric_cipher ||
22 key_info.try(:symmetric_cipher) ||
23 Xml::Kit::Crypto::SymmetricCipher.new
24 @symmetric_cipher_value = Base64.strict_encode64(
25 @symmetric_cipher.encrypt(raw_xml)
26 )
27 @key_info = key_info ||
28 create_key_info_for(@symmetric_cipher, asymmetric_cipher)
29 end
30
31 def to_xml(xml: ::Builder::XmlMarkup.new)
32 ::Xml::Kit::Template.new(self).to_xml(xml: xml)
33 end
34
35 def render(model, options)
36 ::Xml::Kit::Template.new(model).to_xml(options)
37 end
38
39 private
40
41 def create_key_info_for(symmetric_cipher, asymmetric_cipher)
42 KeyInfo.new do |x|
43 x.encrypted_key = EncryptedKey.new(
44 asymmetric_cipher: asymmetric_cipher,
45 symmetric_cipher: symmetric_cipher
46 )
47 end
48 end
49 end
50 end
51end