|
 |
bf2fec |
From 0df85fe6a19d90d73397f8006c62d61e96976817 Mon Sep 17 00:00:00 2001
|
|
 |
bf2fec |
From: Stephan Bergmann <sbergman@redhat.com>
|
|
 |
bf2fec |
Date: Thu, 23 Aug 2018 16:55:40 +0200
|
|
 |
bf2fec |
Subject: [PATCH 2/5] Related rhbz#1618703: Properly handle failure encoding
|
|
 |
bf2fec |
zip file
|
|
 |
bf2fec |
MIME-Version: 1.0
|
|
 |
bf2fec |
Content-Type: text/plain; charset=UTF-8
|
|
 |
bf2fec |
Content-Transfer-Encoding: 8bit
|
|
 |
bf2fec |
|
|
 |
bf2fec |
...when e.g. FIPS mode makes ZipFile::StaticGetCipher fail by throwing an
|
|
 |
bf2fec |
exception which would be caught by ZipPackageStream::saveChild (in
|
|
 |
bf2fec |
package/source/zippackage/ZipPackageStream.cxx) alright (and translated into
|
|
 |
bf2fec |
bSuccess = false), if ZipFile::StaticGetCipher didn't unhelpfully swallow and
|
|
 |
bf2fec |
ignore all exceptions in an outer try-catch.
|
|
 |
bf2fec |
|
|
 |
bf2fec |
Change-Id: I14376128515df1dd4bdac921edd8ab94cc9b7617
|
|
 |
bf2fec |
Reviewed-on: https://gerrit.libreoffice.org/59514
|
|
 |
bf2fec |
Tested-by: Jenkins
|
|
 |
bf2fec |
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
 |
bf2fec |
(cherry picked from commit 3cc6d3611ac8cbbfb9803f3a084d02edde470ad3)
|
|
 |
bf2fec |
Reviewed-on: https://gerrit.libreoffice.org/59569
|
|
 |
bf2fec |
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
|
 |
bf2fec |
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
|
 |
bf2fec |
(cherry picked from commit 2b5ff36afab8888cdbc879ae2f34903ede190c04)
|
|
 |
bf2fec |
---
|
|
 |
bf2fec |
package/source/zipapi/ZipFile.cxx | 75 ++++++++++++++-----------------
|
|
 |
bf2fec |
1 file changed, 34 insertions(+), 41 deletions(-)
|
|
 |
bf2fec |
|
|
 |
bf2fec |
diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx
|
|
 |
bf2fec |
index 1ef81bf582a5..8126ebba305b 100644
|
|
 |
bf2fec |
--- a/package/source/zipapi/ZipFile.cxx
|
|
 |
bf2fec |
+++ b/package/source/zipapi/ZipFile.cxx
|
|
 |
bf2fec |
@@ -162,54 +162,47 @@ uno::Reference< xml::crypto::XCipherContext > ZipFile::StaticGetCipher( const un
|
|
 |
bf2fec |
{
|
|
 |
bf2fec |
uno::Reference< xml::crypto::XCipherContext > xResult;
|
|
 |
bf2fec |
|
|
 |
bf2fec |
- try
|
|
 |
bf2fec |
+ if (xEncryptionData->m_nDerivedKeySize < 0)
|
|
 |
bf2fec |
{
|
|
 |
bf2fec |
- if (xEncryptionData->m_nDerivedKeySize < 0)
|
|
 |
bf2fec |
- {
|
|
 |
bf2fec |
- throw ZipIOException("Invalid derived key length!" );
|
|
 |
bf2fec |
- }
|
|
 |
bf2fec |
+ throw ZipIOException("Invalid derived key length!" );
|
|
 |
bf2fec |
+ }
|
|
 |
bf2fec |
|
|
 |
bf2fec |
- uno::Sequence< sal_Int8 > aDerivedKey( xEncryptionData->m_nDerivedKeySize );
|
|
 |
bf2fec |
- if ( !xEncryptionData->m_nIterationCount &&
|
|
 |
bf2fec |
- xEncryptionData->m_nDerivedKeySize == xEncryptionData->m_aKey.getLength() )
|
|
 |
bf2fec |
- {
|
|
 |
bf2fec |
- // gpg4libre: no need to derive key, m_aKey is already
|
|
 |
bf2fec |
- // usable as symmetric session key
|
|
 |
bf2fec |
- aDerivedKey = xEncryptionData->m_aKey;
|
|
 |
bf2fec |
- }
|
|
 |
bf2fec |
- else if ( rtl_Digest_E_None != rtl_digest_PBKDF2( reinterpret_cast< sal_uInt8* >( aDerivedKey.getArray() ),
|
|
 |
bf2fec |
- aDerivedKey.getLength(),
|
|
 |
bf2fec |
- reinterpret_cast< const sal_uInt8 * > (xEncryptionData->m_aKey.getConstArray() ),
|
|
 |
bf2fec |
- xEncryptionData->m_aKey.getLength(),
|
|
 |
bf2fec |
- reinterpret_cast< const sal_uInt8 * > ( xEncryptionData->m_aSalt.getConstArray() ),
|
|
 |
bf2fec |
- xEncryptionData->m_aSalt.getLength(),
|
|
 |
bf2fec |
- xEncryptionData->m_nIterationCount ) )
|
|
 |
bf2fec |
- {
|
|
 |
bf2fec |
- throw ZipIOException("Can not create derived key!" );
|
|
 |
bf2fec |
- }
|
|
 |
bf2fec |
+ uno::Sequence< sal_Int8 > aDerivedKey( xEncryptionData->m_nDerivedKeySize );
|
|
 |
bf2fec |
+ if ( !xEncryptionData->m_nIterationCount &&
|
|
 |
bf2fec |
+ xEncryptionData->m_nDerivedKeySize == xEncryptionData->m_aKey.getLength() )
|
|
 |
bf2fec |
+ {
|
|
 |
bf2fec |
+ // gpg4libre: no need to derive key, m_aKey is already
|
|
 |
bf2fec |
+ // usable as symmetric session key
|
|
 |
bf2fec |
+ aDerivedKey = xEncryptionData->m_aKey;
|
|
 |
bf2fec |
+ }
|
|
 |
bf2fec |
+ else if ( rtl_Digest_E_None != rtl_digest_PBKDF2( reinterpret_cast< sal_uInt8* >( aDerivedKey.getArray() ),
|
|
 |
bf2fec |
+ aDerivedKey.getLength(),
|
|
 |
bf2fec |
+ reinterpret_cast< const sal_uInt8 * > (xEncryptionData->m_aKey.getConstArray() ),
|
|
 |
bf2fec |
+ xEncryptionData->m_aKey.getLength(),
|
|
 |
bf2fec |
+ reinterpret_cast< const sal_uInt8 * > ( xEncryptionData->m_aSalt.getConstArray() ),
|
|
 |
bf2fec |
+ xEncryptionData->m_aSalt.getLength(),
|
|
 |
bf2fec |
+ xEncryptionData->m_nIterationCount ) )
|
|
 |
bf2fec |
+ {
|
|
 |
bf2fec |
+ throw ZipIOException("Can not create derived key!" );
|
|
 |
bf2fec |
+ }
|
|
 |
bf2fec |
|
|
 |
bf2fec |
- if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING )
|
|
 |
bf2fec |
- {
|
|
 |
bf2fec |
- uno::Reference< uno::XComponentContext > xContext = xArgContext;
|
|
 |
bf2fec |
- if ( !xContext.is() )
|
|
 |
bf2fec |
- xContext = comphelper::getProcessComponentContext();
|
|
 |
bf2fec |
+ if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING )
|
|
 |
bf2fec |
+ {
|
|
 |
bf2fec |
+ uno::Reference< uno::XComponentContext > xContext = xArgContext;
|
|
 |
bf2fec |
+ if ( !xContext.is() )
|
|
 |
bf2fec |
+ xContext = comphelper::getProcessComponentContext();
|
|
 |
bf2fec |
|
|
 |
bf2fec |
- uno::Reference< xml::crypto::XNSSInitializer > xCipherContextSupplier = xml::crypto::NSSInitializer::create( xContext );
|
|
 |
bf2fec |
+ uno::Reference< xml::crypto::XNSSInitializer > xCipherContextSupplier = xml::crypto::NSSInitializer::create( xContext );
|
|
 |
bf2fec |
|
|
 |
bf2fec |
- xResult = xCipherContextSupplier->getCipherContext( xEncryptionData->m_nEncAlg, aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt, uno::Sequence< beans::NamedValue >() );
|
|
 |
bf2fec |
- }
|
|
 |
bf2fec |
- else if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::BLOWFISH_CFB_8 )
|
|
 |
bf2fec |
- {
|
|
 |
bf2fec |
- xResult = BlowfishCFB8CipherContext::Create( aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt );
|
|
 |
bf2fec |
- }
|
|
 |
bf2fec |
- else
|
|
 |
bf2fec |
- {
|
|
 |
bf2fec |
- throw ZipIOException("Unknown cipher algorithm is requested!" );
|
|
 |
bf2fec |
- }
|
|
 |
bf2fec |
+ xResult = xCipherContextSupplier->getCipherContext( xEncryptionData->m_nEncAlg, aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt, uno::Sequence< beans::NamedValue >() );
|
|
 |
bf2fec |
}
|
|
 |
bf2fec |
- catch( ... )
|
|
 |
bf2fec |
+ else if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::BLOWFISH_CFB_8 )
|
|
 |
bf2fec |
+ {
|
|
 |
bf2fec |
+ xResult = BlowfishCFB8CipherContext::Create( aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt );
|
|
 |
bf2fec |
+ }
|
|
 |
bf2fec |
+ else
|
|
 |
bf2fec |
{
|
|
 |
bf2fec |
- OSL_ENSURE( false, "Can not create cipher context!" );
|
|
 |
bf2fec |
+ throw ZipIOException("Unknown cipher algorithm is requested!" );
|
|
 |
bf2fec |
}
|
|
 |
bf2fec |
|
|
 |
bf2fec |
return xResult;
|
|
 |
bf2fec |
--
|
|
 |
bf2fec |
2.17.1
|
|
 |
bf2fec |
|