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.st...@cib.de> AuthorDate: Fri May 15 15:12:23 2020 +0200 Commit: Michael Stahl <michael.st...@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.st...@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 _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits