package/source/manifest/ManifestExport.cxx |   57 +++++++++++++++++++----------
 xmlsecurity/qa/unit/signing/signing.cxx    |   17 ++++++++
 2 files changed, 55 insertions(+), 19 deletions(-)

New commits:
commit 5eda583443cd0ec323e925395ea734c20fdbcf13
Author:     Michael Stahl <michael.st...@cib.de>
AuthorDate: Tue Apr 28 13:58:30 2020 +0200
Commit:     Michael Stahl <michael.st...@cib.de>
CommitDate: Fri May 15 17:51:43 2020 +0200

    package: OFFICE-3940 ODF 1.3 export of OpenPGP encryption
    
    Import was implemented with a7bf6488ebb544e1efaed0a1e53073df9cc2064d
    but it doesn't correspond to the schema so see previous commit.
    
    Change-Id: Ic19db07da20e88d6533509217a70983938e61beb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93088
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@cib.de>

diff --git a/package/source/manifest/ManifestExport.cxx 
b/package/source/manifest/ManifestExport.cxx
index f30b1604f20e..fefb1aa7c1e9 100644
--- a/package/source/manifest/ManifestExport.cxx
+++ b/package/source/manifest/ManifestExport.cxx
@@ -79,6 +79,15 @@ ManifestExport::ManifestExport( uno::Reference< 
xml::sax::XDocumentHandler > con
     const OUString sAlgorithmAttribute          ( ATTRIBUTE_ALGORITHM );
     const OUString sCipherDataElement           ( ELEMENT_CIPHERDATA );
     const OUString sCipherValueElement          ( ELEMENT_CIPHERVALUE );
+    const OUString sManifestKeyInfoElement13    ( ELEMENT_MANIFEST13_KEYINFO );
+    const OUString sEncryptedKeyElement13       ( ELEMENT_ENCRYPTEDKEY13 );
+    const OUString sEncryptionMethodElement13   ( ELEMENT_ENCRYPTIONMETHOD13 );
+    const OUString sPgpDataElement13            ( ELEMENT_PGPDATA13 );
+    const OUString sPgpKeyIDElement13           ( ELEMENT_PGPKEYID13 );
+    const OUString sPGPKeyPacketElement13       ( ELEMENT_PGPKEYPACKET13 );
+    const OUString sAlgorithmAttribute13        ( ATTRIBUTE_ALGORITHM13 );
+    const OUString sCipherDataElement13         ( ELEMENT_CIPHERDATA13 );
+    const OUString sCipherValueElement13        ( ELEMENT_CIPHERVALUE13 );
     const OUString sKeyInfo                     ( "KeyInfo" );
     const OUString sPgpKeyIDProperty            ( "KeyId" );
     const OUString sPgpKeyPacketProperty        ( "KeyPacket" );
@@ -232,7 +241,11 @@ ManifestExport::ManifestExport( uno::Reference< 
xml::sax::XDocumentHandler > con
             xHandler->ignorableWhitespace ( sWhiteSpace );
 
             // ==== manifest:keyinfo & children
-            xHandler->startElement( sManifestKeyInfoElement, nullptr );
+            bool const isODF13(aDocVersion.compareTo(ODFVER_013_TEXT) >= 0);
+            if (!isODF13)
+            {
+                xHandler->startElement(sManifestKeyInfoElement, nullptr);
+            }
             xHandler->ignorableWhitespace ( sWhiteSpace );
 
             uno::Sequence< uno::Sequence < beans::NamedValue > > 
aKeyInfoSequence;
@@ -255,64 +268,70 @@ ManifestExport::ManifestExport( uno::Reference< 
xml::sax::XDocumentHandler > con
                 if (aPgpKeyID.hasElements() && aCipherValue.hasElements() )
                 {
                     // ==== manifest:encrypted-key & children - one for each 
recipient
-                    xHandler->startElement( sEncryptedKeyElement, nullptr );
+                    xHandler->startElement(isODF13 ? sEncryptedKeyElement13 : 
sEncryptedKeyElement, nullptr);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
                     ::comphelper::AttributeList * pNewAttrList = new 
::comphelper::AttributeList;
                     uno::Reference < xml::sax::XAttributeList > xNewAttrList 
(pNewAttrList);
                     // TODO: the algorithm should rather be configurable
-                    pNewAttrList->AddAttribute ( sAlgorithmAttribute, 
sCdataAttribute,
+                    pNewAttrList->AddAttribute(
+                        isODF13 ? sAlgorithmAttribute13 : sAlgorithmAttribute,
+                        sCdataAttribute,
                                                  
"http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"; );
-                    xHandler->startElement( sEncryptionMethodElement, 
xNewAttrList );
-                    xHandler->endElement( sEncryptionMethodElement );
+                    xHandler->startElement(isODF13 ? 
sEncryptionMethodElement13 : sEncryptionMethodElement, xNewAttrList);
+                    xHandler->endElement(isODF13 ? sEncryptionMethodElement13 
:  sEncryptionMethodElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->startElement( sKeyInfoElement, nullptr );
+                    // note: the mismatch here corresponds to ODF 1.3 cs01 
schema
+                    xHandler->startElement(isODF13 ? sManifestKeyInfoElement13 
: sKeyInfoElement, nullptr);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->startElement( sPgpDataElement, nullptr );
+                    xHandler->startElement(isODF13 ? sPgpDataElement13 : 
sPgpDataElement, nullptr);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->startElement( sPgpKeyIDElement, nullptr );
+                    xHandler->startElement(isODF13 ? sPgpKeyIDElement13 : 
sPgpKeyIDElement, nullptr);
                     ::comphelper::Base64::encode(aBuffer, aPgpKeyID);
                     xHandler->characters( aBuffer.makeStringAndClear() );
-                    xHandler->endElement( sPgpKeyIDElement );
+                    xHandler->endElement(isODF13 ? sPgpKeyIDElement13 : 
sPgpKeyIDElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
                     // key packet is optional
                     if (aPgpKeyPacket.hasElements())
                     {
-                        xHandler->startElement( sPGPKeyPacketElement, nullptr 
);
+                        xHandler->startElement(isODF13 ? 
sPGPKeyPacketElement13 : sPGPKeyPacketElement, nullptr);
                         ::comphelper::Base64::encode(aBuffer, aPgpKeyPacket);
                         xHandler->characters( aBuffer.makeStringAndClear() );
-                        xHandler->endElement( sPGPKeyPacketElement );
+                        xHandler->endElement(isODF13 ? sPGPKeyPacketElement13 
:  sPGPKeyPacketElement);
                         xHandler->ignorableWhitespace ( sWhiteSpace );
                     }
 
-                    xHandler->endElement( sPgpDataElement );
+                    xHandler->endElement(isODF13 ? sPgpDataElement13 : 
sPgpDataElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->endElement( sKeyInfoElement );
+                    xHandler->endElement(isODF13 ? sManifestKeyInfoElement13 : 
sKeyInfoElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->startElement( sCipherDataElement, nullptr );
+                    xHandler->startElement(isODF13 ? sCipherDataElement13 : 
sCipherDataElement, nullptr);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->startElement( sCipherValueElement, nullptr );
+                    xHandler->startElement(isODF13 ? sCipherValueElement13 : 
sCipherValueElement, nullptr);
                     ::comphelper::Base64::encode(aBuffer, aCipherValue);
                     xHandler->characters( aBuffer.makeStringAndClear() );
-                    xHandler->endElement( sCipherValueElement );
+                    xHandler->endElement(isODF13 ? sCipherValueElement13 : 
sCipherValueElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->endElement( sCipherDataElement );
+                    xHandler->endElement(isODF13 ? sCipherDataElement13 : 
sCipherDataElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
 
-                    xHandler->endElement( sEncryptedKeyElement );
+                    xHandler->endElement(isODF13 ? sEncryptedKeyElement13 : 
sEncryptedKeyElement);
                     xHandler->ignorableWhitespace ( sWhiteSpace );
                 }
             }
 
-            xHandler->endElement( sManifestKeyInfoElement );
+            if (!isODF13)
+            {
+                xHandler->endElement(sManifestKeyInfoElement);
+            }
             xHandler->ignorableWhitespace ( sWhiteSpace );
         }
     }
diff --git a/xmlsecurity/qa/unit/signing/signing.cxx 
b/xmlsecurity/qa/unit/signing/signing.cxx
index eaecd6b7a9e5..4720ee340f7e 100644
--- a/xmlsecurity/qa/unit/signing/signing.cxx
+++ b/xmlsecurity/qa/unit/signing/signing.cxx
@@ -959,6 +959,23 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFEncryptedGPG)
     CPPUNIT_ASSERT(pBaseModel);
     pObjectShell = pBaseModel->GetObjectShell();
     CPPUNIT_ASSERT(pObjectShell);
+
+    // export and import again
+    utl::TempFile aTempFile;
+    {
+        uno::Sequence<beans::PropertyValue> props(
+            comphelper::InitPropertySequence({ { "FilterName", 
uno::Any(OUString("writer8")) } }));
+        uno::Reference<frame::XStorable> xDocStorable(mxComponent, 
uno::UNO_QUERY);
+        xDocStorable->storeToURL(aTempFile.GetURL(), props);
+    }
+
+    createDoc(aTempFile.GetURL());
+    pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get());
+    CPPUNIT_ASSERT(pBaseModel);
+    pObjectShell = pBaseModel->GetObjectShell();
+    CPPUNIT_ASSERT(pObjectShell);
+
+    aTempFile.EnableKillingFile();
 }
 
 #endif
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to