Commit a54dc1a
Changed files (5)
spec
xml
kit
lib/xml/kit/encryption.rb
@@ -20,15 +20,8 @@ module Xml
symmetric_cipher = symmetric(symmetric_algorithm)
@symmetric_cipher_value = Base64.strict_encode64(symmetric_cipher.encrypt(raw_xml))
- if key_info
- @key_info = key_info
- else
- @key_info = KeyInfo.new
- @key_info.encrypted_key = EncryptedKey.new(public_key: public_key, key: symmetric_cipher.key, algorithm: asymmetric_algorithm)
-
- @asymmetric_algorithm = asymmetric_algorithm
- @asymmetric_cipher_value = @key_info.encrypted_key.cipher_value
- end
+ @asymmetric_algorithm = asymmetric_algorithm
+ @key_info = key_info || create_key_info_for(public_key, symmetric_cipher, asymmetric_algorithm)
end
def to_xml(xml: ::Builder::XmlMarkup.new)
@@ -46,6 +39,13 @@ module Xml
::Xml::Kit::Crypto::SymmetricCipher.new(algorithm)
end
+
+ def create_key_info_for(public_key, symmetric_cipher, asymmetric_algorithm)
+ key_info = KeyInfo.new
+ key_info.encrypted_key = EncryptedKey.new(public_key: public_key, key: symmetric_cipher.key, algorithm: asymmetric_algorithm)
+ @asymmetric_cipher_value = key_info.encrypted_key.cipher_value
+ key_info
+ end
end
end
end
lib/xml/kit/key_info.rb
@@ -33,10 +33,10 @@ module Xml
end
def subject_key_identifier
- ski = x509_data.extensions.find { |x| x.oid == "subjectKeyIdentifier" }&.value
+ ski = x509_data.extensions.find { |x| x.oid == 'subjectKeyIdentifier' }
return if ski.nil?
- Base64.strict_encode64(ski)
+ Base64.strict_encode64(ski.value)
end
end
end
lib/xml/kit/self_signed_certificate.rb
@@ -30,13 +30,15 @@ module Xml
certificate.public_key = public_key
certificate.serial = 0x0
certificate.version = 2
+ apply_ski_extension_to(certificate)
+ certificate
+ end
+ def apply_ski_extension_to(certificate)
extension_factory = OpenSSL::X509::ExtensionFactory.new
extension_factory.subject_certificate = certificate
extension_factory.issuer_certificate = certificate
certificate.add_extension(extension_factory.create_extension('subjectKeyIdentifier', 'hash', false))
-
- certificate
end
end
end
lib/xml/kit/templatable.rb
@@ -33,17 +33,15 @@ module Xml
end
def encrypt_data_for(xml:, key_info: nil)
- if encrypt?
- temp = ::Builder::XmlMarkup.new
- yield temp
- ::Xml::Kit::Encryption.new(
- signatures.complete(temp.target!),
- encryption_certificate.public_key,
- key_info: key_info
- ).to_xml(xml: xml)
- else
- yield xml
- end
+ return yield xml unless encrypt?
+
+ temp = ::Builder::XmlMarkup.new
+ yield temp
+ ::Xml::Kit::Encryption.new(
+ signatures.complete(temp.target!),
+ encryption_certificate.public_key,
+ key_info: key_info
+ ).to_xml(xml: xml)
end
def render(model, options)
spec/xml/kit/soap_spec.rb
@@ -1,6 +1,6 @@
-RSpec.describe 'Soap Example' do
+RSpec.describe Soap do
describe '#to_xml' do
- subject { Soap.new }
+ subject { described_class.new }
let(:result) { Hash.from_xml(subject.to_xml) }