summaryrefslogtreecommitdiff
path: root/package/source
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2020-05-15 15:12:23 +0200
committerAndras Timar <andras.timar@collabora.com>2020-05-24 16:30:02 +0200
commite47835851010e83c4a6cd01516f6d28d24938e73 (patch)
tree82cc2b75bb1cdcfdab87a0559b9d736de99583bc /package/source
parent6e3119040c0bed972b01f6067b9924b46aab10ae (diff)
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@cib.de> (cherry picked from commit 4f1b0f7d5235140611305b784b58f95fc5b8bd81) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94586 Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'package/source')
-rw-r--r--package/source/manifest/ManifestImport.cxx31
1 files changed, 18 insertions, 13 deletions
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