summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasily Melenchuk <vasily.melenchuk@cib.de>2019-10-13 23:53:22 +0300
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2019-12-04 17:13:36 +0100
commitdec99cf239010280ad33ab47ca4233f7e05204e5 (patch)
tree19fe16c8ac5a47b60ecfffcecbf66fc4ba013200
parentODK: cleanup windows linker debug args (diff)
downloadcore-dec99cf239010280ad33ab47ca4233f7e05204e5.tar.gz
core-dec99cf239010280ad33ab47ca4233f7e05204e5.zip
oox: XPackageEncryption interface simplification
instead of two methods to write ecrypted data and encryption info just one is used. Change-Id: Ie31f363a0b76cfe5b67b15c1b98b0e556578b5c8
-rw-r--r--include/oox/crypto/AgileEngine.hxx8
-rw-r--r--include/oox/crypto/Standard2007Engine.hxx7
-rw-r--r--offapi/com/sun/star/packages/XPackageEncryption.idl8
-rw-r--r--oox/source/crypto/AgileEngine.cxx29
-rw-r--r--oox/source/crypto/DocumentEncryption.cxx7
-rw-r--r--oox/source/crypto/Standard2007Engine.cxx33
6 files changed, 51 insertions, 41 deletions
diff --git a/include/oox/crypto/AgileEngine.hxx b/include/oox/crypto/AgileEngine.hxx
index afef194e53e9..de3836ffdb19 100644
--- a/include/oox/crypto/AgileEngine.hxx
+++ b/include/oox/crypto/AgileEngine.hxx
@@ -128,6 +128,9 @@ private:
void setupEncryptionParameters(AgileEncryptionParameters const & rAgileEncryptionParameters);
bool setupEncryptionKey(OUString const & rPassword);
+ css::uno::Sequence<sal_Int8> writeEncryptionInfo();
+ css::uno::Sequence<sal_Int8> writeEncryptedDocument(const css::uno::Reference<css::io::XInputStream>& rxInputStream);
+
public:
AgileEngine(const css::uno::Reference< css::uno::XComponentContext >& rxContext);
@@ -143,10 +146,7 @@ public:
// Encryption
- virtual css::uno::Sequence<css::beans::NamedValue> SAL_CALL writeEncryptionInfo() override;
-
- virtual void SAL_CALL encrypt(const css::uno::Reference<css::io::XInputStream>& rxInputStream,
- css::uno::Reference<css::io::XOutputStream>& rxOutputStream) override;
+ virtual css::uno::Sequence<css::beans::NamedValue> SAL_CALL encrypt(const css::uno::Reference<css::io::XInputStream>& rxInputStream) override;
virtual sal_Bool SAL_CALL setupEncryption(const css::uno::Sequence<css::beans::NamedValue>& rMediaEncData) override;
diff --git a/include/oox/crypto/Standard2007Engine.hxx b/include/oox/crypto/Standard2007Engine.hxx
index b0963284c5df..d1ab8039d772 100644
--- a/include/oox/crypto/Standard2007Engine.hxx
+++ b/include/oox/crypto/Standard2007Engine.hxx
@@ -38,6 +38,8 @@ class OOX_DLLPUBLIC Standard2007Engine : public cppu::WeakImplHelper<css::packag
bool calculateEncryptionKey(const OUString& rPassword);
css::uno::Reference<css::io::XInputStream> getStream(const css::uno::Sequence<css::beans::NamedValue> & rStreams, const OUString sStreamName);
+ css::uno::Sequence<sal_Int8> writeEncryptionInfo();
+ css::uno::Sequence<sal_Int8> writeEncryptedDocument(const css::uno::Reference<css::io::XInputStream>& rxInputStream);
public:
Standard2007Engine(const css::uno::Reference<css::uno::XComponentContext>& rxContext);
@@ -54,10 +56,7 @@ public:
// Encryption
- virtual css::uno::Sequence<css::beans::NamedValue> SAL_CALL writeEncryptionInfo() override;
-
- virtual void SAL_CALL encrypt(const css::uno::Reference<css::io::XInputStream>& rxInputStream,
- css::uno::Reference<css::io::XOutputStream>& rxOutputStream) override;
+ virtual css::uno::Sequence<css::beans::NamedValue> SAL_CALL encrypt(const css::uno::Reference<css::io::XInputStream>& rxInputStream) override;
virtual sal_Bool SAL_CALL setupEncryption(const css::uno::Sequence<css::beans::NamedValue>& rMediaEncData) override;
diff --git a/offapi/com/sun/star/packages/XPackageEncryption.idl b/offapi/com/sun/star/packages/XPackageEncryption.idl
index 298a089af6c7..0fba1d9c3ba7 100644
--- a/offapi/com/sun/star/packages/XPackageEncryption.idl
+++ b/offapi/com/sun/star/packages/XPackageEncryption.idl
@@ -52,11 +52,6 @@ interface XPackageEncryption: com::sun::star::uno::XInterface
/**
TODO
*/
- sequence<com::sun::star::beans::NamedValue> writeEncryptionInfo();
-
- /**
- TODO
- */
sequence<com::sun::star::beans::NamedValue> createEncryptionData([in] string rPassword);
/**
@@ -67,8 +62,7 @@ interface XPackageEncryption: com::sun::star::uno::XInterface
/**
TODO
*/
- void encrypt([in] com::sun::star::io::XInputStream rxInputStream,
- [out] com::sun::star::io::XOutputStream rxOutputStream);
+ sequence<com::sun::star::beans::NamedValue> encrypt([in] com::sun::star::io::XInputStream rxInputStream);
/**
TODO
diff --git a/oox/source/crypto/AgileEngine.cxx b/oox/source/crypto/AgileEngine.cxx
index d864539747cc..fea1498cc8b9 100644
--- a/oox/source/crypto/AgileEngine.cxx
+++ b/oox/source/crypto/AgileEngine.cxx
@@ -755,7 +755,7 @@ bool AgileEngine::setupEncryptionKey(OUString const & rPassword)
return true;
}
-css::uno::Sequence<css::beans::NamedValue> AgileEngine::writeEncryptionInfo()
+css::uno::Sequence<sal_Int8> AgileEngine::writeEncryptionInfo()
{
Reference<XOutputStream> aEncryptionInfoStream(
mxContext->getServiceManager()->createInstanceWithContext("com.sun.star.io.SequenceOutputStream", mxContext),
@@ -819,20 +819,19 @@ css::uno::Sequence<css::beans::NamedValue> AgileEngine::writeEncryptionInfo()
rStream.close();
aEncryptionInfoStream->flush();
- // Store all streams into sequence and return back
- comphelper::SequenceAsHashMap aStreams;
-
Reference<XSequenceOutputStream> aEncryptionInfoSequenceStream(aEncryptionInfoStream, UNO_QUERY);
- aStreams["EncryptionInfo"] <<= aEncryptionInfoSequenceStream->getWrittenBytes();
- return aStreams.getAsConstNamedValueList();
+ return aEncryptionInfoSequenceStream->getWrittenBytes();
}
-void AgileEngine::encrypt(const css::uno::Reference<css::io::XInputStream> & rxInputStream,
- css::uno::Reference<css::io::XOutputStream> & rxOutputStream)
+css::uno::Sequence<sal_Int8> AgileEngine::writeEncryptedDocument(const css::uno::Reference<css::io::XInputStream>& rxInputStream)
{
CryptoHash aCryptoHash(mInfo.hmacKey, cryptoHashTypeFromString(mInfo.hashAlgorithm));
- BinaryXOutputStream aBinaryOutputStream(rxOutputStream, false);
+ Reference<XOutputStream> aOutputStream(
+ mxContext->getServiceManager()->createInstanceWithContext("com.sun.star.io.SequenceOutputStream", mxContext),
+ UNO_QUERY);
+ BinaryXOutputStream aBinaryOutputStream(aOutputStream, false);
+
BinaryXInputStream aBinaryInputStream(rxInputStream, false);
Reference<XSeekable> xSeekable(rxInputStream, UNO_QUERY);
sal_uInt32 nLength = xSeekable->getLength();
@@ -889,6 +888,18 @@ void AgileEngine::encrypt(const css::uno::Reference<css::io::XInputStream> & rx
}
mInfo.hmacHash = aCryptoHash.finalize();
encryptHmacValue();
+
+ Reference<XSequenceOutputStream> aSequenceStream(aOutputStream, UNO_QUERY);
+ return aSequenceStream->getWrittenBytes();
+}
+
+
+css::uno::Sequence<css::beans::NamedValue> AgileEngine::encrypt(const css::uno::Reference<css::io::XInputStream> & rxInputStream)
+{
+ comphelper::SequenceAsHashMap aStreams;
+ aStreams["EncryptedPackage"] <<= writeEncryptedDocument(rxInputStream);
+ aStreams["EncryptionInfo"] <<= writeEncryptionInfo();
+ return aStreams.getAsConstNamedValueList();
}
} // namespace core
diff --git a/oox/source/crypto/DocumentEncryption.cxx b/oox/source/crypto/DocumentEncryption.cxx
index 2dba0f035df5..2f0457911aed 100644
--- a/oox/source/crypto/DocumentEncryption.cxx
+++ b/oox/source/crypto/DocumentEncryption.cxx
@@ -78,12 +78,7 @@ bool DocumentEncryption::encrypt()
mxPackageEncryption->setupEncryption(mMediaEncData);
- Reference<XOutputStream> xOutputStream(mrOleStorage.openOutputStream("EncryptedPackage"), UNO_SET_THROW);
- mxPackageEncryption->encrypt(xInputStream, xOutputStream);
- xOutputStream->flush();
- xOutputStream->closeOutput();
-
- Sequence<NamedValue> aStreams = mxPackageEncryption->writeEncryptionInfo();
+ Sequence<NamedValue> aStreams = mxPackageEncryption->encrypt(xInputStream);
for (const NamedValue & aStream : aStreams)
{
diff --git a/oox/source/crypto/Standard2007Engine.cxx b/oox/source/crypto/Standard2007Engine.cxx
index 50f23e2cf491..9ddde339b1d5 100644
--- a/oox/source/crypto/Standard2007Engine.cxx
+++ b/oox/source/crypto/Standard2007Engine.cxx
@@ -257,7 +257,7 @@ sal_Bool Standard2007Engine::setupEncryption(const css::uno::Sequence<css::beans
return true;
}
-css::uno::Sequence<css::beans::NamedValue> Standard2007Engine::writeEncryptionInfo()
+css::uno::Sequence<sal_Int8> Standard2007Engine::writeEncryptionInfo()
{
Reference<XOutputStream> aEncryptionInfoStream(
mxContext->getServiceManager()->createInstanceWithContext("com.sun.star.io.SequenceOutputStream", mxContext),
@@ -283,21 +283,17 @@ css::uno::Sequence<css::beans::NamedValue> Standard2007Engine::writeEncryptionIn
rStream.close();
aEncryptionInfoStream->flush();
- // Store all streams into sequence and return back
- comphelper::SequenceAsHashMap aStreams;
-
Reference<XSequenceOutputStream> aEncryptionInfoSequenceStream(aEncryptionInfoStream, UNO_QUERY);
- aStreams["EncryptionInfo"] <<= aEncryptionInfoSequenceStream->getWrittenBytes();
- return aStreams.getAsConstNamedValueList();
+ return aEncryptionInfoSequenceStream->getWrittenBytes();
}
-void Standard2007Engine::encrypt(const css::uno::Reference<css::io::XInputStream> & rxInputStream,
- css::uno::Reference<css::io::XOutputStream> & rxOutputStream)
+css::uno::Sequence<sal_Int8> Standard2007Engine::writeEncryptedDocument(const css::uno::Reference<css::io::XInputStream> & rxInputStream)
{
- if (mKey.empty())
- return;
+ Reference<XOutputStream> aOutputStream(
+ mxContext->getServiceManager()->createInstanceWithContext("com.sun.star.io.SequenceOutputStream", mxContext),
+ UNO_QUERY);
+ BinaryXOutputStream aBinaryOutputStream(aOutputStream, false);
- BinaryXOutputStream aBinaryOutputStream(rxOutputStream, false);
BinaryXInputStream aBinaryInputStream(rxInputStream, false);
Reference<XSeekable> xSeekable(rxInputStream, UNO_QUERY);
@@ -321,6 +317,21 @@ void Standard2007Engine::encrypt(const css::uno::Reference<css::io::XInputStream
outputLength = aEncryptor.update(outputBuffer, inputBuffer, inputLength);
aBinaryOutputStream.writeMemory(outputBuffer.data(), outputLength);
}
+
+ Reference<XSequenceOutputStream> aSequenceStream(aOutputStream, UNO_QUERY);
+ return aSequenceStream->getWrittenBytes();
+}
+
+css::uno::Sequence<css::beans::NamedValue> Standard2007Engine::encrypt(const css::uno::Reference<css::io::XInputStream> & rxInputStream)
+{
+ if (mKey.empty())
+ return css::uno::Sequence<css::beans::NamedValue>();
+
+ comphelper::SequenceAsHashMap aStreams;
+
+ aStreams["EncryptedPackage"] <<= writeEncryptedDocument(rxInputStream);
+ aStreams["EncryptionInfo"] <<= writeEncryptionInfo();
+ return aStreams.getAsConstNamedValueList();
}
css::uno::Reference<css::io::XInputStream> Standard2007Engine::getStream(const css::uno::Sequence<css::beans::NamedValue> & rStreams, const OUString sStreamName)