From e47835851010e83c4a6cd01516f6d28d24938e73 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Fri, 15 May 2020 15:12:23 +0200 Subject: 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 whereas the implementation expects 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 (cherry picked from commit 4f1b0f7d5235140611305b784b58f95fc5b8bd81) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94586 Reviewed-by: Thorsten Behrens --- package/source/manifest/ManifestImport.cxx | 31 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'package/source') diff --git a/package/source/manifest/ManifestImport.cxx b/package/source/manifest/ManifestImport.cxx index 4014bf3d0a4d..58d311c20084 100644 --- a/package/source/manifest/ManifestImport.cxx +++ b/package/source/manifest/ManifestImport.cxx @@ -338,8 +338,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; @@ -354,8 +354,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; @@ -374,16 +378,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; @@ -399,9 +402,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 = ""; @@ -479,11 +479,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 -- cgit