Commit 1b472ae
Changed files (4)
lib
xml
spec
lib/xml/kit/encrypted_data.rb
@@ -13,7 +13,7 @@ module Xml
def initialize(
raw_xml,
- symmetric_cipher:,
+ symmetric_cipher: Xml::Kit::Crypto::SymmetricCipher.new,
asymmetric_cipher:,
key_info: nil
)
lib/xml/kit/encrypted_key.rb
@@ -17,7 +17,7 @@ module Xml
def initialize(
id: Id.generate,
asymmetric_cipher:,
- symmetric_cipher:,
+ symmetric_cipher: Xml::Kit::Crypto::SymmetricCipher.new,
key_info: nil
)
@id = id
spec/xml/kit/encrypted_data_spec.rb
@@ -6,29 +6,36 @@ RSpec.describe Xml::Kit::EncryptedData do
::Xml::Kit::Crypto::RsaCipher::ALGORITHM,
::Xml::Kit::Crypto::OaepCipher::ALGORITHM,
].each do |asymmetric_algorithm|
+ subject do
+ described_class.new(xml, asymmetric_cipher: asymmetric_cipher)
+ end
+
+ let(:symmetric_cipher) { ::Xml::Kit::Crypto::SymmetricCipher.new(symmetric_algorithm) }
+ let(:symmetric_algorithm) { Xml::Kit::Crypto::SymmetricCipher::DEFAULT_ALGORITHM }
+ let(:asymmetric_cipher) { ::Xml::Kit::Crypto.cipher_for(asymmetric_algorithm, key_pair.public_key) }
+ 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(:xml) do
+ xml = ::Builder::XmlMarkup.new
+ xml.HellWorld do
+ xml.Now Time.now.iso8601
+ end
+ xml.target!
+ end
+
+ specify { expect(decryptor.decrypt_xml(subject.to_xml)).to eql(xml) }
+
[
"#{::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
+ context symmetric_algorithm do
subject do
described_class.new(xml, symmetric_cipher: symmetric_cipher, asymmetric_cipher: asymmetric_cipher)
end
- let(:symmetric_cipher) { ::Xml::Kit::Crypto::SymmetricCipher.new(symmetric_algorithm) }
- let(:asymmetric_cipher) { ::Xml::Kit::Crypto.cipher_for(asymmetric_algorithm, key_pair.public_key) }
- 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(:xml) do
- xml = ::Builder::XmlMarkup.new
- xml.HellWorld do
- xml.Now Time.now.iso8601
- end
- xml.target!
- end
-
specify { expect(decryptor.decrypt_xml(subject.to_xml)).to eql(xml) }
end
end
spec/xml/kit/encrypted_key_spec.rb
@@ -2,9 +2,8 @@
RSpec.describe ::Xml::Kit::EncryptedKey do
describe '#to_xml' do
- subject { described_class.new(id: id, asymmetric_cipher: asymmetric_cipher, symmetric_cipher: symmetric_cipher, key_info: key_info) }
+ subject { described_class.new(id: id, asymmetric_cipher: asymmetric_cipher, key_info: key_info) }
- let(:symmetric_cipher) { ::Xml::Kit::Crypto::SymmetricCipher.new }
let(:asymmetric_cipher) { ::Xml::Kit::Crypto.cipher_for(algorithm, private_key.public_key) }
let(:algorithm) { ::Xml::Kit::Crypto::RsaCipher::ALGORITHM }
let(:key_info) { ::Xml::Kit::KeyInfo.new }
@@ -21,8 +20,16 @@ RSpec.describe ::Xml::Kit::EncryptedKey do
specify { expect(result['EncryptedKey']['xmlns']).to eql(::Xml::Kit::Namespaces::XMLENC) }
specify { expect(result['EncryptedKey']['EncryptionMethod']['Algorithm']).to eql(algorithm) }
specify { expect(result['EncryptedKey']['CipherData']['CipherValue']).to be_present }
- specify { expect(private_key.private_decrypt(Base64.decode64(result['EncryptedKey']['CipherData']['CipherValue']))).to eql(symmetric_cipher.key) }
+ specify { expect(private_key.private_decrypt(Base64.decode64(result['EncryptedKey']['CipherData']['CipherValue']))).to eql(subject.symmetric_cipher.key) }
specify { expect(subject.to_xml).to match_xsd('xenc-schema') }
specify { expect(result['EncryptedKey'].key?('KeyInfo')).to be(true) }
+
+ context 'with custom symmetric cipher' do
+ subject { described_class.new(id: id, asymmetric_cipher: asymmetric_cipher, key_info: key_info, symmetric_cipher: symmetric_cipher) }
+
+ let(:symmetric_cipher) { instance_double(Xml::Kit::Crypto::SymmetricCipher, key: 'symmetric_key', encrypt: 'CIPHERTEXT', algorithm: 'symmetric_cipher') }
+
+ specify { expect(private_key.private_decrypt(Base64.decode64(result['EncryptedKey']['CipherData']['CipherValue']))).to eql(symmetric_cipher.key) }
+ end
end
end