main
1# frozen_string_literal: true
2
3require 'xml/kit/templatable'
4
5module Xml
6 module Kit
7 # An implementation of the EncryptedKey element.
8 # https://www.w3.org/TR/xmlenc-core1/#sec-EncryptedKey
9 #
10 # @since 0.3.0
11 class EncryptedKey
12 include ::Xml::Kit::Templatable
13 attr_reader :id
14 attr_reader :asymmetric_cipher, :symmetric_cipher
15 attr_accessor :key_info
16
17 def initialize(id: Id.generate,
18 asymmetric_cipher: nil,
19 symmetric_cipher: nil,
20 key_info: nil)
21 @id = id
22 @asymmetric_cipher = asymmetric_cipher ||
23 key_info.try(:asymmetric_cipher)
24 @symmetric_cipher = symmetric_cipher ||
25 key_info.try(:symmetric_cipher) ||
26 Xml::Kit::Crypto::SymmetricCipher.new
27 @key_info = key_info
28 end
29
30 def cipher_value
31 Base64.strict_encode64(asymmetric_cipher.encrypt(symmetric_cipher.key))
32 end
33 end
34 end
35end