diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2019-10-13 23:53:22 +0300 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2019-12-04 17:13:36 +0100 |
commit | dec99cf239010280ad33ab47ca4233f7e05204e5 (patch) | |
tree | 19fe16c8ac5a47b60ecfffcecbf66fc4ba013200 | |
parent | ODK: cleanup windows linker debug args (diff) | |
download | core-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.hxx | 8 | ||||
-rw-r--r-- | include/oox/crypto/Standard2007Engine.hxx | 7 | ||||
-rw-r--r-- | offapi/com/sun/star/packages/XPackageEncryption.idl | 8 | ||||
-rw-r--r-- | oox/source/crypto/AgileEngine.cxx | 29 | ||||
-rw-r--r-- | oox/source/crypto/DocumentEncryption.cxx | 7 | ||||
-rw-r--r-- | oox/source/crypto/Standard2007Engine.cxx | 33 |
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) |