[Libreoffice-commits] core.git: Branch 'private/thb/gpg4libre' - 2 commits - comphelper/Library_comphelper.mk comphelper/source package/source xmlsecurity/source
Thorsten Behrens
Thorsten.Behrens at CIB.de
Mon Aug 21 07:26:45 UTC 2017
comphelper/Library_comphelper.mk | 1
comphelper/source/misc/storagehelper.cxx | 63 ++++++++++++-
package/source/manifest/ManifestExport.cxx | 118 +++++++++++++------------
xmlsecurity/source/gpg/SecurityEnvironment.cxx | 6 -
4 files changed, 126 insertions(+), 62 deletions(-)
New commits:
commit 4a270c8931169fdd8d1f1dcffecc2c061b198f41
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date: Mon Aug 21 09:24:32 2017 +0200
demo hack: list all certificates
Change-Id: Ibc678cf9c0c8a0a8e8198516b8cbdebcc977c185
diff --git a/xmlsecurity/source/gpg/SecurityEnvironment.cxx b/xmlsecurity/source/gpg/SecurityEnvironment.cxx
index 367fa35e76a3..ed498a4d424b 100644
--- a/xmlsecurity/source/gpg/SecurityEnvironment.cxx
+++ b/xmlsecurity/source/gpg/SecurityEnvironment.cxx
@@ -70,8 +70,8 @@ Sequence< Reference < XCertificate > > SecurityEnvironmentGpg::getPersonalCertif
std::list< GpgME::Key > keyList;
std::list< CertificateImpl* > certsList;
- m_ctx->setKeyListMode(GPGME_KEYLIST_MODE_LOCAL);
- GpgME::Error err = m_ctx->startKeyListing("", true);
+ m_ctx->addKeyListMode(GPGME_KEYLIST_MODE_LOCAL);
+ GpgME::Error err = m_ctx->startKeyListing("", false);
while (!err) {
GpgME::Key k = m_ctx->nextKey(err);
if (err)
@@ -109,7 +109,7 @@ Reference< XCertificate > SecurityEnvironmentGpg::getCertificate( const OUString
if(xmlSecBase64Decode(strKeyId, const_cast<xmlSecByte*>(strKeyId), xmlStrlen(strKeyId)) < 0)
throw RuntimeException("Base64 decode failed");
- m_ctx->setKeyListMode(GPGME_KEYLIST_MODE_LOCAL);
+ m_ctx->addKeyListMode(GPGME_KEYLIST_MODE_LOCAL);
GpgME::Error err = m_ctx->startKeyListing("", false);
while (!err) {
GpgME::Key k = m_ctx->nextKey(err);
commit 61f3957cf48eacbbce2a2d0829e471b1e4c5457e
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date: Mon Aug 21 09:22:49 2017 +0200
Make encrypt manifest writing actually work
Change-Id: I65c05c62d507c0ba781520885f4d36a9b6313f8e
diff --git a/comphelper/Library_comphelper.mk b/comphelper/Library_comphelper.mk
index ec5ac9d3240c..25449f09d919 100644
--- a/comphelper/Library_comphelper.mk
+++ b/comphelper/Library_comphelper.mk
@@ -62,6 +62,7 @@ $(eval $(call gb_Library_use_libraries,comphelper,\
cppuhelper \
sal \
salhelper \
+ sax \
ucbhelper \
i18nlangtag \
))
diff --git a/comphelper/source/misc/storagehelper.cxx b/comphelper/source/misc/storagehelper.cxx
index 7df94b276e8a..5f3defa34bf1 100644
--- a/comphelper/source/misc/storagehelper.cxx
+++ b/comphelper/source/misc/storagehelper.cxx
@@ -35,6 +35,8 @@
#include <com/sun/star/xml/crypto/XDigestContext.hpp>
#include <com/sun/star/xml/crypto/XDigestContextSupplier.hpp>
#include <com/sun/star/xml/crypto/DigestID.hpp>
+#include "com/sun/star/security/DocumentDigitalSignatures.hpp"
+#include "com/sun/star/security/XCertificate.hpp"
#include <vector>
@@ -42,6 +44,7 @@
#include <rtl/random.h>
#include <osl/time.h>
#include <osl/diagnose.h>
+#include <sax/tools/converter.hxx>
#include <ucbhelper/content.hxx>
@@ -50,6 +53,11 @@
#include <comphelper/documentconstants.hxx>
#include <comphelper/storagehelper.hxx>
+#include <gpgme.h>
+#include <context.h>
+#include <key.h>
+#include <data.h>
+
using namespace ::com::sun::star;
namespace comphelper {
@@ -437,13 +445,58 @@ uno::Sequence< beans::NamedValue > OStorageHelper::CreateGpgPackageEncryptionDat
uno::Sequence< beans::NamedValue > aGpgEncryptionData(3);
uno::Sequence< beans::NamedValue > aEncryptionData(1);
+ // TODO fire certificate chooser dialog
+ uno::Reference< security::XDocumentDigitalSignatures > xSigner(
+ security::DocumentDigitalSignatures::createWithVersion(
+ comphelper::getProcessComponentContext(), "1.2" ) );
+
+ // The use may provide a description while choosing a certificate.
+ OUString aDescription;
+ uno::Reference< security::XCertificate > xSignCertificate=
+ xSigner->chooseCertificate(aDescription);
+
+ uno::Sequence < sal_Int8 > aKeyID;
+ if (xSignCertificate.is())
+ {
+ aKeyID = xSignCertificate->getSHA1Thumbprint();
+ }
+
+ std::unique_ptr<GpgME::Context> ctx;
+ GpgME::Error err = GpgME::checkEngine(GpgME::OpenPGP);
+ if (err)
+ throw RuntimeException("The GpgME library failed to initialize for the OpenPGP protocol.");
+
+ ctx.reset( GpgME::Context::createForProtocol(GpgME::OpenPGP) );
+ if (ctx == nullptr)
+ throw RuntimeException("The GpgME library failed to initialize for the OpenPGP protocol.");
+ ctx->setArmor(false);
+ ctx->setKeyListMode(GPGME_KEYLIST_MODE_LOCAL);
+ std::vector<GpgME::Key> keys;
+ keys.push_back(
+ ctx->key(
+ "0x909BE2575CEDBEA3", err, true));
+
+ // good, ctx is setup now, let's sign the lot
+ GpgME::Data data_in(
+ reinterpret_cast<char*>(xmlSecBufferGetData(pDsigCtx->transformCtx.result)),
+ xmlSecBufferGetSize(pDsigCtx->transformCtx.result), false);
+ GpgME::Data data_out;
+
+ ctx->encrypt(keys, plain, cipher, GpgME::Context::NoCompress);
+
+ SAL_INFO("xmlsecurity.xmlsec.gpg", "Generating signature for: " << xmlSecBufferGetData(pDsigCtx->transformCtx.result));
+
// TODO perhaps rename that one - bit misleading name ...
aGpgEncryptionData[0].Name = "KeyId";
- aGpgEncryptionData[0].Value <<= OUString("jypAUdH0E9c=");
- aGpgEncryptionData[0].Name = "KeyPacket";
- aGpgEncryptionData[0].Value <<= OUString("LS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQpWZXJzaW9uOiBHbnVQRyB2MQoKbFFJR0JGY3J4V3NCQkFDM1VBdko4Sk9PZWZZcVVYQVNzVHkrUHBjNHp3cU9YZlRZT2VTSk45V3RZWDVBdU9RNgpjdzZUTmhhbExwT1hLNlhLcUpoMklqSVh6cE1jUzEvQzg1QlNSK0V6dm51VXlhUCtZTXI4VzkyalZwNGo2OWJFCkR1Mnd2Nm5wTnFvRDhqY3NBMHJLeUFoVEg0c3lNL2RMcm1FOThEVXJibGRscE11R0VDUFg0L2tVSHdBUkFRQUIKL2djREFqbjhxQXJpdllBVVlLVGtxd1U5dTRseUdhUEFzOFZNc0ltWTRYUksxd1hOWHNmVC9vaG44QWh4OHJWWQp3eCtQUnFVemxrS2xiNFhkcjBzL0VKSWp0bmx4c3ZPYWlsY1VFaFpEL0VkaHM5WEI2MUl0UFdSWm1OMW1lbGt0Ck1lZDBLL1hCdzVxejJUemZGcFBaaGIxdjZMY0IwRmZnSjY2K1JBWW9EZXVmRGdGNllNcmhrc3kvVnNwM1MrYTYKNE4rclBuNWlkcTVPOU5lb09MVCt5RGRBVTlFeFAxVnd1SFY5V01UT3JvcUtKZUYyT1lvSW05V2dzTGd6ZEU1OQpuSXFVNC9FcWQxYUpCbTgrRTBtbnhFd0VuS2JJNEtOa0tzdDAwRXFmTmIzVXA4RlFJV3hVRnlaclplL2JmeTNCCnVrM2IzZ0xRUlRqUHJvR0JNS3B2UWQvd2xVVTVESS92OUdHMWtpT2duV1dnZGFWWjBFazdzTWhaY1R3aWpHNFYKaUVaOEE1bVZRWXBMTlFwY29jRGdoM0lyRzBkSFVkNVorRUVaQkRSbElaRklKVnVyak9XempzM2lsd3ZhYWpmUwppSFdiZUw
4Nmh2bFVWV2hCTCtqMUhsTDRZWjg2SmJNc0kzQ0ZmaEJXT1pqbEFMMTRvc1NHNUVLMEhGUmxjM1FnClZYTmxjaUE4ZEdWemRFQmxlR0Z0Y0d4bExtTnZiVDZJdmdRVEFRSUFLQVVDVnl2RmF3SWJBd1VKQUFGUmdBWUwKQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0QUFDZ2tRanlwQVVkSDBFOWVwTGdQOUcxLytPU0pkVWVzKwp3ZDMvQmdwbUxqdWRsWEVXQVZjZnh2UlpHbmVjY2VwOXl5ay90WHRSc3lnNjMyTnV5REFlUk5EWmRDVEFHNGNUCmQxY1crWnJsQzM5T1MrOFUrQUFVUi82QlVic3JXT0RrMTVzN2VOOUs3NmE2SU9Lb2RKRHd1QkVkZDJQcUdCd3YKQ1Qwam5pT0pXUFVZdjJzOHBPMGFndzdVV0dNUzdmU2RBZ1lFVnl2RmF3RUVBTU04aVZnMERNbEpPSlQwbmhFQgp2dFR3ZUpIeFB2akpnTHNmUlFsdkNlQWs1U2taV1pNTllxRnRxbTl6NmJqMkJobnlYU0tFMENBem4xTXhsc1o2CjlJWkJPQ3ZURlRRY1pZQ3V2N1UwY3prU0xzMlBvN1VMeXJKMFNpSS9OS2NSdVhIR3ZDSzdWUHdpK2RROTNITUEKWUxOZ2FyblJ1cVUzbHd1NU1yaHROZVpOQUJFQkFBSCtCd01DT2Z5b0N1SzlnQlJnZm1XUmlRc1VzU1BkRTlDRwptaGpRcDdKOWRNQTIrWDhsK0NnaU8yU2J3SG5idmwrWEtLaElzaGNRSWp2UitMdHZnRFFoZkN6TlJwNTBnRlRUCkZNZER6RlVJakVhYVRleDh2cUFkV1lQcjl5SitVSGdUVWhTdVB5eG41UHYrVmR1MmhTai9pVzJpeEVUQ2J5ZkUKOWt6R2FsMGJaQWRiWFZEcHFoam1rbHAzVXlkQm1xRzVoMmJ4cS9Z
eFRKYmZ4S01RQm03Ukw4MDBHbjYwUWhsUwpDTkNmWVFRa290cmlnMzNzWHl4Q1RSZDQ3Ymk1Zmlta2JoOVllcnU5Q29sUDVqQUQwSm43NjBxYk5MZjcveFNCCnJRRENzL0k4R1lYMmtkQllrOUxpYm03Y1FhNjRrRDVaMzZtdGdNNERGQjEwbUMxaDVRZVpuRUJtczdKei9PUTMKdWtUWU1JYTBUT1VnY25jTG40K0pKckZQTkxYak9rNVdid0FzN0hYKzEyVitXb05oSmhVdlhMYXFHTTcrUWtUUwplMERJazVCZFZxUlp4VURJRDM0OEhQR0Ntc21VUlRGRDcxbEZKMy91Zkg3a2FHTmVzUnBnZFplSmFGUlFybS93CkpLQ1c2SXJJbEt1cWNpNDRMdkpBYTRpbEJCZ0JBZ0FQQlFKWEs4VnJBaHNNQlFrQUFWR0FBQW9KRUk4cVFGSFIKOUJQWHdVVUQvaTh5eStTOVpjdWhWcUxuTmNXNkxzSHhUaHE2MXVMRysxcTg3aFBYVGxLMmt3M0M5QTI2OUlqOApBUkhRaGpBSUFSSkM3MHNCaWVKK0xMMlZWa1ZYakVnYnpqdlNHTUE3dkRXRlBJOHovdHVxSnBKeW1zR0tEbFJ4CkptSVBkRFFOVlJtZGV6cnd1WlNlaVJabE43SjNNNnQvenJCNzFHVU9CakhLS2Jua2pKdUQKPXpyZG4KLS0tLS1FTkQgUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0K");
- aGpgEncryptionData[0].Name = "CipherValue";
- aGpgEncryptionData[0].Value <<= OUString("FAm4BDOfQRJ66/ecfIByCck3JxaKYYEWwms7z+Vsb+iqPWyPGdbgJNkRBAWH4V92JvMoc/QcD/1+z+iRvR6PMGdDHAyprIh5uGHs7mo+dqabJU0qOhHb16InW2XO1GqhmjzMDUw+q4ot28jpfIVSMKPlf6b8vnNUICMJjXn+aB8=");
+ aGpgEncryptionData[0].Value <<= aKeyID;
+ aGpgEncryptionData[1].Name = "KeyPacket";
+ OUString packet("LS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQpWZXJzaW9uOiBHbnVQRyB2MQoKbFFJR0JGY3J4V3NCQkFDM1VBdko4Sk9PZWZZcVVYQVNzVHkrUHBjNHp3cU9YZlRZT2VTSk45V3RZWDVBdU9RNgpjdzZUTmhhbExwT1hLNlhLcUpoMklqSVh6cE1jUzEvQzg1QlNSK0V6dm51VXlhUCtZTXI4VzkyalZwNGo2OWJFCkR1Mnd2Nm5wTnFvRDhqY3NBMHJLeUFoVEg0c3lNL2RMcm1FOThEVXJibGRscE11R0VDUFg0L2tVSHdBUkFRQUIKL2djREFqbjhxQXJpdllBVVlLVGtxd1U5dTRseUdhUEFzOFZNc0ltWTRYUksxd1hOWHNmVC9vaG44QWh4OHJWWQp3eCtQUnFVemxrS2xiNFhkcjBzL0VKSWp0bmx4c3ZPYWlsY1VFaFpEL0VkaHM5WEI2MUl0UFdSWm1OMW1lbGt0Ck1lZDBLL1hCdzVxejJUemZGcFBaaGIxdjZMY0IwRmZnSjY2K1JBWW9EZXVmRGdGNllNcmhrc3kvVnNwM1MrYTYKNE4rclBuNWlkcTVPOU5lb09MVCt5RGRBVTlFeFAxVnd1SFY5V01UT3JvcUtKZUYyT1lvSW05V2dzTGd6ZEU1OQpuSXFVNC9FcWQxYUpCbTgrRTBtbnhFd0VuS2JJNEtOa0tzdDAwRXFmTmIzVXA4RlFJV3hVRnlaclplL2JmeTNCCnVrM2IzZ0xRUlRqUHJvR0JNS3B2UWQvd2xVVTVESS92OUdHMWtpT2duV1dnZGFWWjBFazdzTWhaY1R3aWpHNFYKaUVaOEE1bVZRWXBMTlFwY29jRGdoM0lyRzBkSFVkNVorRUVaQkRSbElaRklKVnVyak9XempzM2lsd3ZhYWpmUwppSFdiZUw4Nmh2bFVWV2hCTCtqMUhsTDRZ
Wjg2SmJNc0kzQ0ZmaEJXT1pqbEFMMTRvc1NHNUVLMEhGUmxjM1FnClZYTmxjaUE4ZEdWemRFQmxlR0Z0Y0d4bExtTnZiVDZJdmdRVEFRSUFLQVVDVnl2RmF3SWJBd1VKQUFGUmdBWUwKQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0QUFDZ2tRanlwQVVkSDBFOWVwTGdQOUcxLytPU0pkVWVzKwp3ZDMvQmdwbUxqdWRsWEVXQVZjZnh2UlpHbmVjY2VwOXl5ay90WHRSc3lnNjMyTnV5REFlUk5EWmRDVEFHNGNUCmQxY1crWnJsQzM5T1MrOFUrQUFVUi82QlVic3JXT0RrMTVzN2VOOUs3NmE2SU9Lb2RKRHd1QkVkZDJQcUdCd3YKQ1Qwam5pT0pXUFVZdjJzOHBPMGFndzdVV0dNUzdmU2RBZ1lFVnl2RmF3RUVBTU04aVZnMERNbEpPSlQwbmhFQgp2dFR3ZUpIeFB2akpnTHNmUlFsdkNlQWs1U2taV1pNTllxRnRxbTl6NmJqMkJobnlYU0tFMENBem4xTXhsc1o2CjlJWkJPQ3ZURlRRY1pZQ3V2N1UwY3prU0xzMlBvN1VMeXJKMFNpSS9OS2NSdVhIR3ZDSzdWUHdpK2RROTNITUEKWUxOZ2FyblJ1cVUzbHd1NU1yaHROZVpOQUJFQkFBSCtCd01DT2Z5b0N1SzlnQlJnZm1XUmlRc1VzU1BkRTlDRwptaGpRcDdKOWRNQTIrWDhsK0NnaU8yU2J3SG5idmwrWEtLaElzaGNRSWp2UitMdHZnRFFoZkN6TlJwNTBnRlRUCkZNZER6RlVJakVhYVRleDh2cUFkV1lQcjl5SitVSGdUVWhTdVB5eG41UHYrVmR1MmhTai9pVzJpeEVUQ2J5ZkUKOWt6R2FsMGJaQWRiWFZEcHFoam1rbHAzVXlkQm1xRzVoMmJ4cS9ZeFRKYmZ4S01RQm03Ukw4MDBHb
jYwUWhsUwpDTkNmWVFRa290cmlnMzNzWHl4Q1RSZDQ3Ymk1Zmlta2JoOVllcnU5Q29sUDVqQUQwSm43NjBxYk5MZjcveFNCCnJRRENzL0k4R1lYMmtkQllrOUxpYm03Y1FhNjRrRDVaMzZtdGdNNERGQjEwbUMxaDVRZVpuRUJtczdKei9PUTMKdWtUWU1JYTBUT1VnY25jTG40K0pKckZQTkxYak9rNVdid0FzN0hYKzEyVitXb05oSmhVdlhMYXFHTTcrUWtUUwplMERJazVCZFZxUlp4VURJRDM0OEhQR0Ntc21VUlRGRDcxbEZKMy91Zkg3a2FHTmVzUnBnZFplSmFGUlFybS93CkpLQ1c2SXJJbEt1cWNpNDRMdkpBYTRpbEJCZ0JBZ0FQQlFKWEs4VnJBaHNNQlFrQUFWR0FBQW9KRUk4cVFGSFIKOUJQWHdVVUQvaTh5eStTOVpjdWhWcUxuTmNXNkxzSHhUaHE2MXVMRysxcTg3aFBYVGxLMmt3M0M5QTI2OUlqOApBUkhRaGpBSUFSSkM3MHNCaWVKK0xMMlZWa1ZYakVnYnpqdlNHTUE3dkRXRlBJOHovdHVxSnBKeW1zR0tEbFJ4CkptSVBkRFFOVlJtZGV6cnd1WlNlaVJabE43SjNNNnQvenJCNzFHVU9CakhLS2Jua2pKdUQKPXpyZG4KLS0tLS1FTkQgUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0K");
+ ::sax::Converter::decodeBase64(aKeyID, packet);
+ aGpgEncryptionData[1].Value <<= aKeyID;
+ aGpgEncryptionData[2].Name = "CipherValue";
+ OUString cipher("FAm4BDOfQRJ66/ecfIByCck3JxaKYYEWwms7z+Vsb+iqPWyPGdbgJNkRBAWH4V92JvMoc/QcD/1+z+iRvR6PMGdDHAyprIh5uGHs7mo+dqabJU0qOhHb16InW2XO1GqhmjzMDUw+q4ot28jpfIVSMKPlf6b8vnNUICMJjXn+aB8=");
+ ::sax::Converter::decodeBase64(aKeyID, cipher);
+ aGpgEncryptionData[2].Value <<= aKeyID;
aEncryptionData[0].Name = PACKAGE_ENCRYPTIONDATA_SHA256UTF8;
aEncryptionData[0].Value <<= aVector;
diff --git a/package/source/manifest/ManifestExport.cxx b/package/source/manifest/ManifestExport.cxx
index 88762d272021..622ac94aa5d2 100644
--- a/package/source/manifest/ManifestExport.cxx
+++ b/package/source/manifest/ManifestExport.cxx
@@ -210,61 +210,15 @@ ManifestExport::ManifestExport( uno::Reference< xml::sax::XDocumentHandler > con
}
xHandler->startElement( sManifestElement, xRootAttrList );
- for (sal_uInt32 i = 0 ; i < nManLength ; i++)
+ if (nManLength > 0)
{
- ::comphelper::AttributeList *pAttrList = new ::comphelper::AttributeList;
- const beans::PropertyValue *pValue = pSequence[i].getConstArray();
+ const beans::PropertyValue *pValue = pSequence[0].getConstArray();
OUString aString;
- const uno::Any *pVector = nullptr, *pSalt = nullptr,
- *pIterationCount = nullptr, *pDigest = nullptr,
- *pDigestAlg = nullptr, *pEncryptAlg = nullptr,
- *pStartKeyAlg = nullptr, *pDerivedKeySize = nullptr,
- *pPgpKeyIDProperty = nullptr, *pPgpKeyPacketProperty = nullptr,
+ const uno::Any *pPgpKeyIDProperty = nullptr, *pPgpKeyPacketProperty = nullptr,
*pCipherValueProperty = nullptr;
- for (sal_uInt32 j = 0, nNum = pSequence[i].getLength(); j < nNum; j++, pValue++)
+ for (sal_uInt32 j = 0, nNum = pSequence[0].getLength(); j < nNum; j++, pValue++)
{
- if (pValue->Name == sMediaTypeProperty )
- {
- pValue->Value >>= aString;
- pAttrList->AddAttribute ( sMediaTypeAttribute, sCdataAttribute, aString );
- }
- else if (pValue->Name == sVersionProperty )
- {
- pValue->Value >>= aString;
- // the version is stored only if it is not empty
- if ( bAcceptNonemptyVersion && !aString.isEmpty() )
- pAttrList->AddAttribute ( sVersionAttribute, sCdataAttribute, aString );
- }
- else if (pValue->Name == sFullPathProperty )
- {
- pValue->Value >>= aString;
- pAttrList->AddAttribute ( sFullPathAttribute, sCdataAttribute, aString );
- }
- else if (pValue->Name == sSizeProperty )
- {
- sal_Int64 nSize = 0;
- pValue->Value >>= nSize;
- OUStringBuffer aBuffer;
- aBuffer.append ( nSize );
- pAttrList->AddAttribute ( sSizeAttribute, sCdataAttribute, aBuffer.makeStringAndClear() );
- }
- else if (pValue->Name == sInitialisationVectorProperty )
- pVector = &pValue->Value;
- else if (pValue->Name == sSaltProperty )
- pSalt = &pValue->Value;
- else if (pValue->Name == sIterationCountProperty )
- pIterationCount = &pValue->Value;
- else if (pValue->Name == sDigestProperty )
- pDigest = &pValue->Value;
- else if (pValue->Name == sDigestAlgProperty )
- pDigestAlg = &pValue->Value;
- else if (pValue->Name == sEncryptionAlgProperty )
- pEncryptAlg = &pValue->Value;
- else if (pValue->Name == sStartKeyAlgProperty )
- pStartKeyAlg = &pValue->Value;
- else if (pValue->Name == sDerivedKeySizeProperty )
- pDerivedKeySize = &pValue->Value;
- else if (pValue->Name == sPgpKeyIDProperty )
+ if (pValue->Name == sPgpKeyIDProperty )
pPgpKeyIDProperty = &pValue->Value;
else if (pValue->Name == sPgpKeyPacketProperty )
pPgpKeyPacketProperty = &pValue->Value;
@@ -272,9 +226,6 @@ ManifestExport::ManifestExport( uno::Reference< xml::sax::XDocumentHandler > con
pCipherValueProperty = &pValue->Value;
}
- xHandler->ignorableWhitespace ( sWhiteSpace );
- uno::Reference < xml::sax::XAttributeList > xAttrList ( pAttrList );
- xHandler->startElement( sFileEntryElement , xAttrList);
if ( pPgpKeyIDProperty && pPgpKeyPacketProperty && pCipherValueProperty )
{
// TODO make this work for multiple recipients
@@ -344,6 +295,65 @@ ManifestExport::ManifestExport( uno::Reference< xml::sax::XDocumentHandler > con
xHandler->endElement( sKeyInfoElement );
xHandler->ignorableWhitespace ( sWhiteSpace );
}
+ }
+
+ for (sal_uInt32 i = 0 ; i < nManLength ; i++)
+ {
+ ::comphelper::AttributeList *pAttrList = new ::comphelper::AttributeList;
+ const beans::PropertyValue *pValue = pSequence[i].getConstArray();
+ OUString aString;
+ const uno::Any *pVector = nullptr, *pSalt = nullptr,
+ *pIterationCount = nullptr, *pDigest = nullptr,
+ *pDigestAlg = nullptr, *pEncryptAlg = nullptr,
+ *pStartKeyAlg = nullptr, *pDerivedKeySize = nullptr;
+ for (sal_uInt32 j = 0, nNum = pSequence[i].getLength(); j < nNum; j++, pValue++)
+ {
+ if (pValue->Name == sMediaTypeProperty )
+ {
+ pValue->Value >>= aString;
+ pAttrList->AddAttribute ( sMediaTypeAttribute, sCdataAttribute, aString );
+ }
+ else if (pValue->Name == sVersionProperty )
+ {
+ pValue->Value >>= aString;
+ // the version is stored only if it is not empty
+ if ( bAcceptNonemptyVersion && !aString.isEmpty() )
+ pAttrList->AddAttribute ( sVersionAttribute, sCdataAttribute, aString );
+ }
+ else if (pValue->Name == sFullPathProperty )
+ {
+ pValue->Value >>= aString;
+ pAttrList->AddAttribute ( sFullPathAttribute, sCdataAttribute, aString );
+ }
+ else if (pValue->Name == sSizeProperty )
+ {
+ sal_Int64 nSize = 0;
+ pValue->Value >>= nSize;
+ OUStringBuffer aBuffer;
+ aBuffer.append ( nSize );
+ pAttrList->AddAttribute ( sSizeAttribute, sCdataAttribute, aBuffer.makeStringAndClear() );
+ }
+ else if (pValue->Name == sInitialisationVectorProperty )
+ pVector = &pValue->Value;
+ else if (pValue->Name == sSaltProperty )
+ pSalt = &pValue->Value;
+ else if (pValue->Name == sIterationCountProperty )
+ pIterationCount = &pValue->Value;
+ else if (pValue->Name == sDigestProperty )
+ pDigest = &pValue->Value;
+ else if (pValue->Name == sDigestAlgProperty )
+ pDigestAlg = &pValue->Value;
+ else if (pValue->Name == sEncryptionAlgProperty )
+ pEncryptAlg = &pValue->Value;
+ else if (pValue->Name == sStartKeyAlgProperty )
+ pStartKeyAlg = &pValue->Value;
+ else if (pValue->Name == sDerivedKeySizeProperty )
+ pDerivedKeySize = &pValue->Value;
+ }
+
+ xHandler->ignorableWhitespace ( sWhiteSpace );
+ uno::Reference < xml::sax::XAttributeList > xAttrList ( pAttrList );
+ xHandler->startElement( sFileEntryElement , xAttrList);
if ( pVector && pSalt && pIterationCount && pDigest && pDigestAlg && pEncryptAlg && pStartKeyAlg && pDerivedKeySize )
{
// ==== Encryption Data
More information about the Libreoffice-commits
mailing list