main
1# frozen_string_literal: true
2
3RSpec.describe Soap do
4 describe '#to_xml' do
5 subject { described_class.new(key_pair.certificate) }
6
7 let(:key_pair) { ::Xml::Kit::KeyPair.generate(use: :encryption) }
8 let(:result) { Hash.from_xml(subject.to_xml) }
9
10 specify { expect(result['Envelope']).to be_present }
11 specify { expect(result['Envelope']['Header']).to be_present }
12
13 specify do
14 cipher_value = result['Envelope']['Header']['Security']['EncryptedKey']['CipherData']['CipherValue']
15 symmetric_key = key_pair.private_key.private_decrypt(Base64.decode64(cipher_value))
16 expect(symmetric_key).to eql(subject.symmetric_cipher.key)
17
18 algorithm = result['Envelope']['Body']['EncryptedData']['EncryptionMethod']['Algorithm']
19 cipher_value = result['Envelope']['Body']['EncryptedData']['CipherData']['CipherValue']
20 result = ::Xml::Kit::Crypto::SymmetricCipher.new(algorithm, symmetric_key).decrypt(Base64.decode64(cipher_value))
21 hash = Hash.from_xml(result)
22 expect(hash['EncryptMe']['Secret']).to eql('secret')
23 end
24
25 specify { expect(result['Envelope']['Body']).to be_present }
26 end
27end