Commit adc3ef9

mo <mo.khan@gmail.com>
2019-04-21 17:54:10
allow encrypt_key_for to accept a key_info
1 parent 4a01651
Changed files (4)
lib/xml/kit/key_info.rb
@@ -23,7 +23,14 @@ module Xml
 
       def asymmetric_cipher(algorithm: Crypto::RsaCipher::ALGORITHM)
         return encrypted_key.asymmetric_cipher if encrypted_key
-        return Crypto.cipher_for(derive_algorithm_from(x509_data.public_key), x509_data.public_key) if x509_data
+
+        if x509_data
+          return Crypto.cipher_for(
+            derive_algorithm_from(x509_data.public_key),
+            x509_data.public_key
+          )
+        end
+
         super
       end
 
lib/xml/kit/templatable.rb
@@ -28,13 +28,13 @@ module Xml
       # @since 0.3.0
       # @param xml [Builder::XmlMarkup] the xml builder instance
       # @param id [String] the id of EncryptedKey element
-      def encrypt_key_for(xml:, id:)
+      def encrypt_key_for(xml:, id:, key_info: nil)
         ::Xml::Kit::EncryptedKey.new(
           id: id,
           asymmetric_cipher: asymmetric_cipher,
-          symmetric_cipher: symmetric_cipher
+          symmetric_cipher: symmetric_cipher,
+          key_info: key_info
         ).to_xml(xml: xml)
-        yield xml if block_given?
       end
 
       # @deprecated Use {#encrypt_data_for} instead of this
spec/fixtures/soap.builder
@@ -3,21 +3,12 @@ xml.instruct!
 xml.Envelope do
   xml.Header do
     xml.Security do
-      encrypt_key_for(xml: xml, id: key_id) do |xml|
-        xml.KeyInfo do
-          xml.x509Data do
-            xml.X509IssuerSerial do
-              xml.X509IssuerName "blah"
-              xml.X509IssuerNumber 1
-            end
-          end
-        end
-      end
+      encrypt_key_for(xml: xml, id: key_id, key_info: header_key_info)
       xml.BinarySecurityToken ''
     end
   end
   xml.Body Id: id  do
-    encrypt_data_for xml: xml, key_info: key_info do |xml|
+    encrypt_data_for xml: xml, key_info: data_key_info do |xml|
       xml.EncryptMe do
         xml.Secret "secret"
       end
spec/support/soap.rb
@@ -16,7 +16,13 @@ class Soap
     'EK-E2C32E59F27A1320A215468956686717'
   end
 
-  def key_info
+  def header_key_info
+    ::Xml::Kit::KeyInfo.new do |x|
+      x.x509_data = encryption_certificate.x509
+    end
+  end
+
+  def data_key_info
     ::Xml::Kit::KeyInfo.new do |x|
       x.retrieval_method.uri = key_id
     end