diff options
author | Michael Stahl <Michael.Stahl@cib.de> | 2020-05-15 15:12:23 +0200 |
---|---|---|
committer | Michael Stahl <michael.stahl@cib.de> | 2020-05-15 17:51:16 +0200 |
commit | 4f1b0f7d5235140611305b784b58f95fc5b8bd81 (patch) | |
tree | afe4852224ef1ca2f8436d818a7747b7c70edc2b /package/source | |
parent | 1a60d388b566754d5fe6cee12adf7252a3206167 (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>
Diffstat (limited to 'package/source')
-rw-r--r-- | package/source/manifest/ManifestImport.cxx | 31 |
1 files changed, 18 insertions, 13 deletions
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 |