Commit a64fcb8

mokha <mo@mokhan.ca>
2019-01-21 18:37:40
start to define the key_info class
1 parent 747f6df
Changed files (4)
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