diff --git a/lib/xmldsig.rb b/lib/xmldsig.rb index 26c8967..b255f2c 100644 --- a/lib/xmldsig.rb +++ b/lib/xmldsig.rb @@ -26,6 +26,7 @@ class SchemaError < Error require "xmldsig/transforms/canonicalize" require "xmldsig/transforms/enveloped_signature" require "xmldsig/transforms/xpath" +require "xmldsig/transforms/attachment_content_signature" require "xmldsig/transforms" require "xmldsig/reference" require "xmldsig/signature" diff --git a/lib/xmldsig/transforms.rb b/lib/xmldsig/transforms.rb index 9d93265..66b5e46 100644 --- a/lib/xmldsig/transforms.rb +++ b/lib/xmldsig/transforms.rb @@ -23,6 +23,8 @@ def get_transform(node, transform_node) Transforms::Canonicalize.new(node, transform_node, true) when "http://www.w3.org/TR/1999/REC-xpath-19991116" Transforms::XPath.new(node, transform_node) + when "http://docs.oasis-open.org/wss/oasis-wss-SwAProfile-1.1#Attachment-Content-Signature-Transform" + Transforms::AttachmentContentSignature.new(node, transform_node) end end diff --git a/lib/xmldsig/transforms/attachment_content_signature.rb b/lib/xmldsig/transforms/attachment_content_signature.rb new file mode 100644 index 0000000..9304bed --- /dev/null +++ b/lib/xmldsig/transforms/attachment_content_signature.rb @@ -0,0 +1,9 @@ +module Xmldsig + class Transforms < Array + class AttachmentContentSignature < Transform + def transform + node + end + end + end +end diff --git a/spec/fixtures/unsigned_attachment_content_signature.xml b/spec/fixtures/unsigned_attachment_content_signature.xml new file mode 100644 index 0000000..1bbbf29 --- /dev/null +++ b/spec/fixtures/unsigned_attachment_content_signature.xml @@ -0,0 +1,154 @@ + + + + + + MIICgjCCAeugAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJCRTENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDAeFw0xMzAxMTMxNTMzNDNaFw0xNDAxMTMxNTMzNDNaMDoxCzAJBgNVBAYTAkJFMQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARUZXN0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC37C0mhTmdr8iVfQPQuOKtzG/fhwG4ILuUX1Vk5uN9oSZJxhb5Kn8aBppny1BSekgk12wn4AE/6i7Jfix3SZWoqdaxpdDalvQSdNeyn6GmV2oP4lzp6XjXmtRxvOywgTYuhf/DBlpiq7B/vTF7kMwYgs0ahM3mRJG2V7LARTXUfwIDAQABo4GXMIGUMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFBRkMx3ZwHO3Zog0pWdYNB38NRmWMGIGA1UdIwRbMFmAFBRkMx3ZwHO3Zog0pWdYNB38NRmWoT6kPDA6MQswCQYDVQQGEwJCRTENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdIIBADANBgkqhkiG9w0BAQUFAAOBgQBs8voSBDgN7HL1i5EP+G/ymWUVenpGvRZCnfkR9Wo4ORzj1Y7ohXHooOzDJ2oi0yDwatXnPpe3hauqQDid6d4i7F1Wpgdo2MibqXP8/DPzhuBARvPSzip+yS6ITjqKN/YN4K+kpja2Sh7DdxWND3opvVHZTXywjZpdF1OsmNhOCg== + + + + + + + + + + + + + + 0qRAwgKOj3u4RmdwXaJ3mYppqt6GeWDmnyzb0P+XPc4ixoXoiNKLJopxVqknNBWnBqyLXWRkb+k2W9lKPi6cV5WeeK3UMfYoc8V/QhnGeQELDNe+Inq05SWMKVRvIRQWg+FEriEjRGMqzqWcS4i2aC4azp4KBE43xCXbdYmVjvU0YiTlD5SODUepK6Q5jyiF/sU6Tvc5Si6WVFzYb3ZnZzsopmF9ICmuk7K5PWeaT63StwyL27f8STl0+AgMsbCGK4bK4aJRLrJwo5A9Bm2FnNSJwQgDUPePote2DVG4B+Z6rrP3MYBxtvaeIJhEUpZlaeM6G3u3ImIMQwCVNiYGwA== + + + + + + + + + + + + + + + + + + + + + + MIICgjCCAeugAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJCRTENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDAeFw0xMzAxMTExNTI4MzdaFw0xNDAxMTExNTI4MzdaMDoxCzAJBgNVBAYTAkJFMQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARUZXN0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQnLpvMvXoPGcAsdk2j2AeLLPysVtFc1f6CSGAfiIR2dzs8h/MN5R0bFBASDUGUGdYyr0QGcKNtqW/cd3Sr1rS2fh5Bopnq9YS6od6J6P3AGIKwmJuIBwwfsvnX3eKGDYeOqmrIo5mdPRAob2D1+FhXbMxeYbRhGMmItC0dle7LQIDAQABo4GXMIGUMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM7pPtefOj5Og5wLqI0Lt5UUmw0uMGIGA1UdIwRbMFmAFM7pPtefOj5Og5wLqI0Lt5UUmw0uoT6kPDA6MQswCQYDVQQGEwJCRTENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdIIBADANBgkqhkiG9w0BAQUFAAOBgQBTIt/4/sraPO4gmmY2oSGG19I2Fs24pV/bX8xqI10iexpGsxnpCQIeiDTUHamo12vyXDPx8zANdVThFSAWHEESBMLrS8pybbAL7sU4ij4JmfxygGk6OEsc3jKY00NYom+Mg3JObIgtjOIKYfrH7uvpm+AIXsef5vrst4MI6GhEAA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2025-09-01T10:31:52Z + 808213df-12b8-4220-9232-8a3559716619@test.com + + + + POP002348 + http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/initiator + + + PGD000005 + http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/responder + + + + urn:fdc:peppol.eu:2017:agreements:tia:ap_provider + urn:peppol:france:billing:regulated + + urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1 + Test@Conv-26db4588-a8af-4518-a562-ebaffb9b9ed9 + + + 0002:TEST + 9922:NGTBCNTRLP1001 + + + + + application/xml + application/gzip + + + + + + + + diff --git a/spec/lib/xmldsig/transforms/attachment_content_signature_spec.rb b/spec/lib/xmldsig/transforms/attachment_content_signature_spec.rb new file mode 100644 index 0000000..9deea79 --- /dev/null +++ b/spec/lib/xmldsig/transforms/attachment_content_signature_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' +require 'byebug' + +describe Xmldsig::Transforms::AttachmentContentSignature do + let(:unsigned_xml) { File.read('spec/fixtures/unsigned_attachment_content_signature.xml') } + let(:unsigned_document) { Xmldsig::SignedDocument.new(unsigned_xml) } + + let(:transform_node) { unsigned_document.signatures.first.references[2].transforms[0] } + subject(:attachment_content_transform) { described_class.new(unsigned_document.document, transform_node) } + + it 'returns the node' do + expect(attachment_content_transform.transform).to eq(unsigned_document.document) + end +end