Commit a64fcb8
Changed files (4)
lib
xml
kit
templates
spec
xml
kit
lib/xml/kit/templates/key_info.builder
@@ -0,0 +1,8 @@
+xml.KeyInfo xmlns: ::Xml::Kit::Namespaces::XMLDSIG do
+ xml.EncryptedKey xmlns: ::Xml::Kit::Namespaces::XMLENC do
+ xml.EncryptionMethod Algorithm: algorithm
+ xml.CipherData do
+ xml.CipherValue cipher_value
+ end
+ end
+end
lib/xml/kit/key_info.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module Xml
+ module Kit
+ class KeyInfo
+ attr_reader :algorithm, :cipher_value
+
+ def initialize(algorithm:, cipher_value:)
+ @algorithm = algorithm
+ @cipher_value = cipher_value
+ end
+
+ def to_xml(xml: ::Builder::XmlMarkup.new)
+ ::Xml::Kit::Template.new(self).to_xml(xml: xml)
+ end
+ end
+ end
+end
lib/xml/kit.rb
@@ -22,6 +22,7 @@ require 'xml/kit/document'
require 'xml/kit/encryption'
require 'xml/kit/fingerprint'
require 'xml/kit/id'
+require 'xml/kit/key_info'
require 'xml/kit/key_pair'
require 'xml/kit/self_signed_certificate'
require 'xml/kit/signature'
spec/xml/kit/key_info_spec.rb
@@ -0,0 +1,12 @@
+RSpec.describe Xml::Kit::KeyInfo do
+ describe "#to_xml" do
+ subject { described_class.new(algorithm: algorithm, cipher_value: cipher_value) }
+ let(:algorithm) { 'asymmetric_cipher' }
+ let(:cipher_value) { Base64.strict_encode64('asymmetric CIPHERTEXT') }
+ let(:result) { Hash.from_xml(subject.to_xml) }
+
+ specify { expect(result['KeyInfo']).to be_present }
+ specify { expect(result['KeyInfo']['EncryptedKey']['EncryptionMethod']['Algorithm']).to eql(algorithm) }
+ specify { expect(result['KeyInfo']['EncryptedKey']['CipherData']['CipherValue']).to eql(cipher_value) }
+ end
+end