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

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Fri May 15 15:52:07 UTC 2020


 package/source/manifest/ManifestImport.cxx              |   31 +++++++++-------
 xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt |binary
 2 files changed, 18 insertions(+), 13 deletions(-)

New commits:
commit 4f1b0f7d5235140611305b784b58f95fc5b8bd81
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Fri May 15 15:12:23 2020 +0200
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Fri May 15 17:51:16 2020 +0200

    package: OFFICE-3940 ODF 1.3 import of OpenPGP encryption
    
    This was supposed to be implemented by commit
    a7bf6488ebb544e1efaed0a1e53073df9cc2064d
    "ODF1.3: import new OpenPGP encryption markup"
    but it turns out that the ODF 1.3 cs01 schema differs from the
    implementation:
    
    in ODF 1.3 cs01 we have
    
     <manifest:encrypted-key>
      <manifest:encryption-method .../>
      <manifest:keyinfo>
        <manifest:PGPData>
        </manifest:PGPData>
      </manifest:keyinfo>
      <manifest:CipherData>
      </manifest:CipherData>
     </manifest:encrypted-key>
    
    whereas the implementation expects
    
     <manifest:keyinfo>
      <manifest:encrypted-key>
       <manifest:encryption-method .../>
        <manifest:PGPData>
        </manifest:PGPData>
       <manifest:CipherData>
       </manifest:CipherData>
      </manifest:encrypted-key>
     </manifest:keyinfo>
    
    Ideally the inner manifest:keyinfo should be manifest:KeyInfo but
    not sure if that really matters.
    
    Change-Id: I407321c857e7b3ed9f4d04568ca2ea116764b3da
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94309
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/package/source/manifest/ManifestImport.cxx b/package/source/manifest/ManifestImport.cxx
index 952309ca82ec..cc7558f3b87f 100644
--- a/package/source/manifest/ManifestImport.cxx
+++ b/package/source/manifest/ManifestImport.cxx
@@ -341,8 +341,8 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re
             doFileEntry(aConvertedAttribs);
         else if (aConvertedName == gsManifestKeyInfoElement) //loext:keyinfo
             ;
-        else if (aConvertedName == gsManifestKeyInfoElement13) //manifest:keyinfo
-            ;
+        else if (aConvertedName == gsEncryptedKeyElement13)   //manifest:encrypted-key
+            doEncryptedKey(aConvertedAttribs);
         else
             aStack.back().m_bValid = false;
         break;
@@ -357,8 +357,12 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re
             doEncryptionData(aConvertedAttribs);
         else if (aConvertedName == gsEncryptedKeyElement)   //loext:encrypted-key
             doEncryptedKey(aConvertedAttribs);
-        else if (aConvertedName == gsEncryptedKeyElement13)   //manifest:encrypted-key
-            doEncryptedKey(aConvertedAttribs);
+        else if (aConvertedName == gsEncryptionMethodElement13)   //manifest:encryption-method
+            doEncryptionMethod(aConvertedAttribs, gsAlgorithmAttribute13);
+        else if (aConvertedName == gsManifestKeyInfoElement13) //manifest:keyinfo
+            ;
+        else if (aConvertedName == gsCipherDataElement13)            //manifest:CipherData
+            ;
         else
             aStack.back().m_bValid = false;
         break;
@@ -377,16 +381,15 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re
             doStartKeyAlg(aConvertedAttribs);
         else if (aConvertedName == gsEncryptionMethodElement)   //loext:encryption-method
             doEncryptionMethod(aConvertedAttribs, gsAlgorithmAttribute);
-        else if (aConvertedName == gsEncryptionMethodElement13)   //manifest:encryption-method
-            doEncryptionMethod(aConvertedAttribs, gsAlgorithmAttribute13);
         else if (aConvertedName == gsKeyInfoElement)            //loext:KeyInfo
             ;
         else if (aConvertedName == gsCipherDataElement)            //loext:CipherData
             ;
-        else if (aConvertedName == gsCipherDataElement13)            //manifest:CipherData
-            ;
         else if (aConvertedName == gsPgpDataElement13)   //manifest:PGPData
             ;
+        else if (aConvertedName == gsCipherValueElement13) //manifest:CipherValue
+            // ciphervalue action happens on endElement
+            aCurrentCharacters = "";
         else
             aStack.back().m_bValid = false;
         break;
@@ -402,9 +405,6 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re
         else if (aConvertedName == gsCipherValueElement) //loext:CipherValue
             // ciphervalue action happens on endElement
             aCurrentCharacters = "";
-        else if (aConvertedName == gsCipherValueElement13) //manifest:CipherValue
-            // ciphervalue action happens on endElement
-            aCurrentCharacters = "";
         else if (aConvertedName == gsPgpKeyIDElement13)   //manifest:PGPKeyID
             // ciphervalue action happens on endElement
             aCurrentCharacters = "";
@@ -482,11 +482,16 @@ void SAL_CALL ManifestImport::endElement( const OUString& aName )
 
     // end element handling for elements with cdata
     switch (nLevel) {
+        case 4: {
+            if (aConvertedName == gsCipherValueElement13) //manifest:CipherValue
+                doEncryptedCipherValue();
+            else
+                aStack.back().m_bValid = false;
+            break;
+        }
         case 5: {
             if (aConvertedName == gsCipherValueElement) //loext:CipherValue
                 doEncryptedCipherValue();
-            else if (aConvertedName == gsCipherValueElement13) //manifest:CipherValue
-                doEncryptedCipherValue();
             else if (aConvertedName == gsPgpKeyIDElement13)   //manifest:PGPKeyID
                 doEncryptedKeyId();
             else if (aConvertedName == gsPGPKeyPacketElement13) //manifest:PGPKeyPacket
diff --git a/xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt b/xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt
index 6bcc43503267..e738c2f6df89 100644
Binary files a/xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt and b/xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt differ


More information about the Libreoffice-commits mailing list