diff options
author | Michael Stahl <Michael.Stahl@cib.de> | 2020-05-15 15:12:23 +0200 |
---|---|---|
committer | Michael Stahl <Michael.Stahl@cib.de> | 2020-07-22 14:15:54 +0200 |
commit | b65d956ecec1fc1acc2e037f426f3485d7b8fa0e (patch) | |
tree | ff7b66a2aaa4470db6625adc561e95c2d3c59684 | |
parent | new loplugin:conststringfield [Only ManifestImport.[ch]xx] (diff) | |
download | core-b65d956ecec1fc1acc2e037f426f3485d7b8fa0e.tar.gz core-b65d956ecec1fc1acc2e037f426f3485d7b8fa0e.zip |
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.
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>
(cherry picked from commit a3ef13b495d5898488ae52981bdaf8cf34db791c)
Change-Id: I407321c857e7b3ed9f4d04568ca2ea116764b3da
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99155
Tested-by: Michael Stahl <michael.stahl@cib.de>
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
-rw-r--r-- | package/source/manifest/ManifestImport.cxx | 31 | ||||
-rw-r--r-- | xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt | bin | 15981 -> 12982 bytes |
2 files changed, 18 insertions, 13 deletions
diff --git a/package/source/manifest/ManifestImport.cxx b/package/source/manifest/ManifestImport.cxx index 9982aae75209..425f3fe3f097 100644 --- a/package/source/manifest/ManifestImport.cxx +++ b/package/source/manifest/ManifestImport.cxx @@ -354,8 +354,8 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re doFileEntry(aConvertedAttribs); else if (aConvertedName == gsManifestKeyInfoElement) //loext:keyinfo doKeyInfoEntry(aConvertedAttribs); - else if (aConvertedName == gsManifestKeyInfoElement13) //manifest:keyinfo - doKeyInfoEntry(aConvertedAttribs); + else if (aConvertedName == gsEncryptedKeyElement13) //manifest:encrypted-key + doEncryptedKey(aConvertedAttribs); else aStack.back().m_bValid = false; break; @@ -370,8 +370,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; @@ -390,16 +394,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 doEncryptedKeyInfo(aConvertedAttribs); else if (aConvertedName == gsCipherDataElement) //loext:CipherData doEncryptedCipherData(aConvertedAttribs); - else if (aConvertedName == gsCipherDataElement13) //manifest:CipherData - doEncryptedCipherData(aConvertedAttribs); else if (aConvertedName == gsPgpDataElement13) //manifest:PGPData doEncryptedPgpData(aConvertedAttribs); + else if (aConvertedName == gsCipherValueElement13) //manifest:CipherValue + // ciphervalue action happens on endElement + aCurrentCharacters = ""; else aStack.back().m_bValid = false; break; @@ -415,9 +418,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 = ""; @@ -495,11 +495,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 Binary files differindex 6bcc43503267..e738c2f6df89 100644 --- a/xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt +++ b/xmlsecurity/qa/unit/signing/data/encryptedGPG_odf13.odt |