Commit 9e25437

mokha <mo@mokhan.ca>
2018-11-21 01:27:42
add padding for rsa oaep algorithm.
1 parent 4aa46c5
Changed files (4)
lib/xml/kit/crypto/oaep_cipher.rb
@@ -4,8 +4,9 @@ module Xml
   module Kit
     module Crypto
       class OaepCipher
+        ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}rsa-oaep-mgf1p"
         ALGORITHMS = {
-          'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p' => true,
+          ALGORITHM => true
         }.freeze
         def initialize(_algorithm, key)
           @key = key
lib/xml/kit/encryption.rb
@@ -18,7 +18,8 @@ module Xml
         @symmetric_cipher_value = Base64.encode64(symmetric_cipher.encrypt(raw_xml)).delete("\n")
 
         @asymmetric_algorithm = asymmetric_algorithm
-        @asymmetric_cipher_value = Base64.encode64(public_key.public_encrypt(symmetric_cipher.key)).delete("\n")
+        cipher = Crypto.cipher_for(asymmetric_algorithm, public_key)
+        @asymmetric_cipher_value = Base64.encode64(cipher.encrypt(symmetric_cipher.key)).delete("\n")
       end
 
       def to_xml(xml: ::Builder::XmlMarkup.new)
lib/xml/kit/version.rb
@@ -2,6 +2,6 @@
 
 module Xml
   module Kit
-    VERSION = '0.1.13'.freeze
+    VERSION = '0.1.14'.freeze
   end
 end
spec/xml/kit/encryption_spec.rb
@@ -3,29 +3,32 @@
 RSpec.describe Xml::Kit::Encryption do
   describe '#to_xml' do
     [
-      "#{::Xml::Kit::Namespaces::XMLENC}tripledes-cbc",
-      "#{::Xml::Kit::Namespaces::XMLENC}aes128-cbc",
-      "#{::Xml::Kit::Namespaces::XMLENC}aes192-cbc",
-      "#{::Xml::Kit::Namespaces::XMLENC}aes256-cbc",
-    ].each do |symmetric_algorithm|
-      describe symmetric_algorithm do
-        subject do
-          described_class.new(xml, public_key, symmetric_algorithm: symmetric_algorithm)
-        end
+      ::Xml::Kit::Crypto::RsaCipher::ALGORITHM,
+      ::Xml::Kit::Crypto::OaepCipher::ALGORITHM,
+    ].each do |asymmetric_algorithm|
+      [
+        "#{::Xml::Kit::Namespaces::XMLENC}tripledes-cbc",
+        "#{::Xml::Kit::Namespaces::XMLENC}aes128-cbc",
+        "#{::Xml::Kit::Namespaces::XMLENC}aes192-cbc",
+        "#{::Xml::Kit::Namespaces::XMLENC}aes256-cbc",
+      ].each do |symmetric_algorithm|
+        describe symmetric_algorithm do
+          subject do
+            described_class.new(xml, public_key, symmetric_algorithm: symmetric_algorithm, asymmetric_algorithm: asymmetric_algorithm)
+          end
 
-        let(:key_pair) { Xml::Kit::KeyPair.generate(use: :encryption, algorithm: symmetric_algorithm) }
-        let(:decryptor) { Xml::Kit::Decryption.new(private_keys: [key_pair.private_key]) }
-        let(:public_key) { key_pair.public_key }
-        let(:xml) do
-          xml = ::Builder::XmlMarkup.new
-          xml.HellWorld do
-            xml.Now Time.now.iso8601
+          let(:key_pair) { Xml::Kit::KeyPair.generate(use: :encryption, algorithm: symmetric_algorithm) }
+          let(:decryptor) { Xml::Kit::Decryption.new(private_keys: [key_pair.private_key]) }
+          let(:public_key) { key_pair.public_key }
+          let(:xml) do
+            xml = ::Builder::XmlMarkup.new
+            xml.HellWorld do
+              xml.Now Time.now.iso8601
+            end
+            xml.target!
           end
-          xml.target!
-        end
 
-        it 'generates an encrypted xml' do
-          expect(decryptor.decrypt_xml(subject.to_xml)).to eql(xml)
+          specify { expect(decryptor.decrypt_xml(subject.to_xml)).to eql(xml) }
         end
       end
     end