[Libreoffice-commits] core.git: 3 commits - xmlsecurity/source

Miklos Vajna vmiklos at collabora.co.uk
Mon Feb 8 15:44:51 UTC 2016


 xmlsecurity/source/helper/xsecctl.cxx  |   21 +++++++++++++++++++--
 xmlsecurity/source/helper/xsecctl.hxx  |    2 +-
 xmlsecurity/source/helper/xsecsign.cxx |   33 +++++++++++++++++++++++----------
 3 files changed, 43 insertions(+), 13 deletions(-)

New commits:
commit 1688228bec7f5cc4e7c252dea0ef5002bf26cec9
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Feb 8 16:22:42 2016 +0100

    xmlsecurity: export OOXML <SignatureValue>
    
    Change-Id: I7c5055e3bfaa81cae4c91842e9e3681d41d5c3b6

diff --git a/xmlsecurity/source/helper/xsecctl.cxx b/xmlsecurity/source/helper/xsecctl.cxx
index cffb298..dad4c39 100644
--- a/xmlsecurity/source/helper/xsecctl.cxx
+++ b/xmlsecurity/source/helper/xsecctl.cxx
@@ -1024,13 +1024,17 @@ void XSecController::exportOOXMLSignature(const uno::Reference<xml::sax::XDocume
                 xDocumentHandler->endElement(TAG_DIGESTMETHOD);
             }
             xDocumentHandler->startElement(TAG_DIGESTVALUE, uno::Reference<xml::sax::XAttributeList>(new SvXMLAttributeList()));
-            xDocumentHandler->endElement(TAG_DIGESTVALUE);
             xDocumentHandler->characters(rReference.ouDigestValue);
+            xDocumentHandler->endElement(TAG_DIGESTVALUE);
             xDocumentHandler->endElement(TAG_REFERENCE);
         }
     }
 
     xDocumentHandler->endElement(TAG_SIGNEDINFO);
+
+    xDocumentHandler->startElement(TAG_SIGNATUREVALUE, uno::Reference<xml::sax::XAttributeList>(new SvXMLAttributeList()));
+    xDocumentHandler->characters(rInformation.ouSignatureValue);
+    xDocumentHandler->endElement(TAG_SIGNATUREVALUE);
 }
 
 SignatureInformation XSecController::getSignatureInformation( sal_Int32 nSecurityId ) const
commit dd641965351b2b83e4ffc7ba7a97ace318765dcb
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Feb 8 16:12:58 2016 +0100

    xmlsecurity: fix reference type of OOXML idSignedProperties
    
    Change-Id: I5a2924c3c0af02a4630921bae6117f11655206c2

diff --git a/xmlsecurity/source/helper/xsecctl.cxx b/xmlsecurity/source/helper/xsecctl.cxx
index cd1f7e3..cffb298 100644
--- a/xmlsecurity/source/helper/xsecctl.cxx
+++ b/xmlsecurity/source/helper/xsecctl.cxx
@@ -1000,10 +1000,23 @@ void XSecController::exportOOXMLSignature(const uno::Reference<xml::sax::XDocume
         {
             {
                 std::unique_ptr<SvXMLAttributeList> pAttributeList(new SvXMLAttributeList());
-                pAttributeList->AddAttribute("Type", "http://www.w3.org/2000/09/xmldsig#Object");
+                if (rReference.ouURI != "#idSignedProperties")
+                    pAttributeList->AddAttribute("Type", "http://www.w3.org/2000/09/xmldsig#Object");
+                else
+                    pAttributeList->AddAttribute("Type", "http://uri.etsi.org/01903#SignedProperties");
                 pAttributeList->AddAttribute(ATTR_URI, rReference.ouURI);
                 xDocumentHandler->startElement(TAG_REFERENCE, uno::Reference<xml::sax::XAttributeList>(pAttributeList.release()));
             }
+            if (rReference.ouURI == "#idSignedProperties")
+            {
+                xDocumentHandler->startElement(TAG_TRANSFORMS, uno::Reference<xml::sax::XAttributeList>(new SvXMLAttributeList()));
+                std::unique_ptr<SvXMLAttributeList> pAttributeList(new SvXMLAttributeList());
+                pAttributeList->AddAttribute(ATTR_ALGORITHM, ALGO_C14N);
+                xDocumentHandler->startElement(TAG_TRANSFORM, uno::Reference<xml::sax::XAttributeList>(pAttributeList.release()));
+                xDocumentHandler->endElement(TAG_TRANSFORM);
+                xDocumentHandler->endElement(TAG_TRANSFORMS);
+            }
+
             {
                 std::unique_ptr<SvXMLAttributeList> pAttributeList(new SvXMLAttributeList());
                 pAttributeList->AddAttribute(ATTR_ALGORITHM, ALGO_XMLDSIGSHA256);
commit 349a0ddc316bfab61a0989eb7658fe82972fbd43
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Feb 8 16:05:26 2016 +0100

    xmlsecurity: write correct number of non-manifest OOXML references
    
    Change-Id: I1d8556487608e5a0bee2ae5f7a4b25a60579f4a9

diff --git a/xmlsecurity/source/helper/xsecctl.hxx b/xmlsecurity/source/helper/xsecctl.hxx
index a67dc34..9aad6c6 100644
--- a/xmlsecurity/source/helper/xsecctl.hxx
+++ b/xmlsecurity/source/helper/xsecctl.hxx
@@ -356,7 +356,7 @@ private:
     static OUString createId();
     com::sun::star::uno::Reference<
         com::sun::star::xml::crypto::sax::XReferenceResolvedListener > prepareSignatureToWrite(
-        InternalSignatureInformation& signatureInfo );
+        InternalSignatureInformation& signatureInfo, sal_Int32 nStorageFormat = 0 );
 
     /*
      * For signature verification
diff --git a/xmlsecurity/source/helper/xsecsign.cxx b/xmlsecurity/source/helper/xsecsign.cxx
index 4f1e523..778381e 100644
--- a/xmlsecurity/source/helper/xsecsign.cxx
+++ b/xmlsecurity/source/helper/xsecsign.cxx
@@ -28,6 +28,7 @@
 #include <com/sun/star/xml/crypto/sax/XReferenceCollector.hpp>
 #include <com/sun/star/xml/crypto/sax/XSignatureCreationResultBroadcaster.hpp>
 #include <com/sun/star/io/XActiveDataSource.hpp>
+#include <com/sun/star/embed/StorageFormats.hpp>
 #include <rtl/uuid.h>
 
 #include <stdio.h>
@@ -58,7 +59,7 @@ OUString XSecController::createId()
 }
 
 cssu::Reference< cssxc::sax::XReferenceResolvedListener > XSecController::prepareSignatureToWrite(
-    InternalSignatureInformation& internalSignatureInfor )
+    InternalSignatureInformation& internalSignatureInfor, sal_Int32 nStorageFormat )
 {
     sal_Int32 nSecurityId = internalSignatureInfor.signatureInfor.nSecurityId;
     SignatureReferenceInformations& vReferenceInfors = internalSignatureInfor.signatureInfor.vSignatureReferenceInfors;
@@ -164,16 +165,28 @@ cssu::Reference< cssxc::sax::XReferenceResolvedListener > XSecController::prepar
     cssu::Reference<cssxc::sax::XKeyCollector> keyCollector (xReferenceResolvedListener, cssu::UNO_QUERY);
     keyCollector->setKeyId(0);
 
-    internalSignatureInfor.signatureInfor.ouSignatureId = createId();
-    internalSignatureInfor.signatureInfor.ouPropertyId = createId();
-    internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouPropertyId, -1 );
-    size++;
+    if (nStorageFormat != embed::StorageFormats::OFOPXML)
+    {
+        internalSignatureInfor.signatureInfor.ouSignatureId = createId();
+        internalSignatureInfor.signatureInfor.ouPropertyId = createId();
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouPropertyId, -1 );
+        size++;
 
-    if (!internalSignatureInfor.signatureInfor.ouDescription.isEmpty())
+        if (!internalSignatureInfor.signatureInfor.ouDescription.isEmpty())
+        {
+            // Only mention the hash of the description in the signature if it's non-empty.
+            internalSignatureInfor.signatureInfor.ouDescriptionPropertyId = createId();
+            internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouDescriptionPropertyId, -1);
+            size++;
+        }
+    }
+    else
     {
-        // Only mention the hash of the description in the signature if it's non-empty.
-        internalSignatureInfor.signatureInfor.ouDescriptionPropertyId = createId();
-        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouDescriptionPropertyId, -1);
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, "#idPackageObject", -1);
+        size++;
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, "#idOfficeObject", -1);
+        size++;
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, "#idSignedProperties", -1);
         size++;
     }
 
@@ -381,7 +394,7 @@ bool XSecController::WriteOOXMLSignature(const uno::Reference<xml::sax::XDocumen
                 InternalSignatureInformation& rInformation = m_vInternalSignatureInformations[i];
 
                 // Prepare the signature creator.
-                rInformation.xReferenceResolvedListener = prepareSignatureToWrite(rInformation);
+                rInformation.xReferenceResolvedListener = prepareSignatureToWrite(rInformation, embed::StorageFormats::OFOPXML);
 
                 exportOOXMLSignature(xSEKHandler, rInformation.signatureInfor);
             }


More information about the Libreoffice-commits mailing list