You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ar...@apache.org on 2021/11/16 21:12:36 UTC
[openoffice] 03/06: Allow compilation of oox with latest OpenSSL
This is an automated email from the ASF dual-hosted git repository.
ardovm pushed a commit to branch serf
in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit f3aa7b625b438836ffb3d068f5cd25b19d13b10f
Author: Arrigo Marchiori <ar...@yahoo.it>
AuthorDate: Tue Nov 16 22:02:45 2021 +0100
Allow compilation of oox with latest OpenSSL
---
main/oox/Library_oox.mk | 3 +++
main/oox/source/core/filterdetect.cxx | 33 +++++++++++++++------------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/main/oox/Library_oox.mk b/main/oox/Library_oox.mk
index 7bd2cf9..2dafb81 100644
--- a/main/oox/Library_oox.mk
+++ b/main/oox/Library_oox.mk
@@ -58,6 +58,9 @@ $(eval $(call gb_Library_add_linked_libs,oox,\
))
$(call gb_Library_use_external,oox,openssl)
+ifeq ($(OS),LINUX)
+$(call gb_Library_add_libs,oox,-lpthread)
+endif
# object files ----------------------------------------------------------------
diff --git a/main/oox/source/core/filterdetect.cxx b/main/oox/source/core/filterdetect.cxx
index fc44947..37450d8 100644
--- a/main/oox/source/core/filterdetect.cxx
+++ b/main/oox/source/core/filterdetect.cxx
@@ -355,25 +355,23 @@ bool lclCheckEncryptionData( const sal_uInt8* pnKey, sal_uInt32 nKeySize, const
if ( nKeySize == 16 && nVerifierSize == 16 && nVerifierHashSize == 32 )
{
// check password
- EVP_CIPHER_CTX aes_ctx;
- EVP_CIPHER_CTX_init( &aes_ctx );
- EVP_DecryptInit_ex( &aes_ctx, EVP_aes_128_ecb(), 0, pnKey, 0 );
- EVP_CIPHER_CTX_set_padding( &aes_ctx, 0 );
+ EVP_CIPHER_CTX *aes_ctx = EVP_CIPHER_CTX_new();
+ EVP_DecryptInit_ex( aes_ctx, EVP_aes_128_ecb(), 0, pnKey, 0 );
+ EVP_CIPHER_CTX_set_padding( aes_ctx, 0 );
int nOutLen = 0;
sal_uInt8 pnTmpVerifier[ 16 ];
(void) memset( pnTmpVerifier, 0, sizeof(pnTmpVerifier) );
- /*int*/ EVP_DecryptUpdate( &aes_ctx, pnTmpVerifier, &nOutLen, pnVerifier, nVerifierSize );
- EVP_CIPHER_CTX_cleanup( &aes_ctx );
+ /*int*/ EVP_DecryptUpdate( aes_ctx, pnTmpVerifier, &nOutLen, pnVerifier, nVerifierSize );
- EVP_CIPHER_CTX_init( &aes_ctx );
- EVP_DecryptInit_ex( &aes_ctx, EVP_aes_128_ecb(), 0, pnKey, 0 );
- EVP_CIPHER_CTX_set_padding( &aes_ctx, 0 );
+ EVP_CIPHER_CTX_reset( aes_ctx );
+ EVP_DecryptInit_ex( aes_ctx, EVP_aes_128_ecb(), 0, pnKey, 0 );
+ EVP_CIPHER_CTX_set_padding( aes_ctx, 0 );
sal_uInt8 pnTmpVerifierHash[ 32 ];
(void) memset( pnTmpVerifierHash, 0, sizeof(pnTmpVerifierHash) );
- /*int*/ EVP_DecryptUpdate( &aes_ctx, pnTmpVerifierHash, &nOutLen, pnVerifierHash, nVerifierHashSize );
- EVP_CIPHER_CTX_cleanup( &aes_ctx );
+ /*int*/ EVP_DecryptUpdate( aes_ctx, pnTmpVerifierHash, &nOutLen, pnVerifierHash, nVerifierHashSize );
+ EVP_CIPHER_CTX_free( aes_ctx );
rtlDigest aDigest = rtl_digest_create( rtl_Digest_AlgorithmSHA1 );
rtlDigestError aError = rtl_digest_update( aDigest, pnTmpVerifier, sizeof( pnTmpVerifier ) );
@@ -562,10 +560,9 @@ Reference< XInputStream > FilterDetect::extractUnencryptedPackage( MediaDescript
BinaryXOutputStream aDecryptedPackage( xDecryptedPackage, true );
BinaryXInputStream aEncryptedPackage( xEncryptedPackage, true );
- EVP_CIPHER_CTX aes_ctx;
- EVP_CIPHER_CTX_init( &aes_ctx );
- EVP_DecryptInit_ex( &aes_ctx, EVP_aes_128_ecb(), 0, aVerifier.getKey(), 0 );
- EVP_CIPHER_CTX_set_padding( &aes_ctx, 0 );
+ EVP_CIPHER_CTX *aes_ctx = EVP_CIPHER_CTX_new();
+ EVP_DecryptInit_ex( aes_ctx, EVP_aes_128_ecb(), 0, aVerifier.getKey(), 0 );
+ EVP_CIPHER_CTX_set_padding( aes_ctx, 0 );
sal_uInt8 pnInBuffer[ 1024 ];
sal_uInt8 pnOutBuffer[ 1024 ];
@@ -574,13 +571,13 @@ Reference< XInputStream > FilterDetect::extractUnencryptedPackage( MediaDescript
aEncryptedPackage.skip( 8 ); // decrypted size
while( (nInLen = aEncryptedPackage.readMemory( pnInBuffer, sizeof( pnInBuffer ) )) > 0 )
{
- EVP_DecryptUpdate( &aes_ctx, pnOutBuffer, &nOutLen, pnInBuffer, nInLen );
+ EVP_DecryptUpdate( aes_ctx, pnOutBuffer, &nOutLen, pnInBuffer, nInLen );
aDecryptedPackage.writeMemory( pnOutBuffer, nOutLen );
}
- EVP_DecryptFinal_ex( &aes_ctx, pnOutBuffer, &nOutLen );
+ EVP_DecryptFinal_ex( aes_ctx, pnOutBuffer, &nOutLen );
aDecryptedPackage.writeMemory( pnOutBuffer, nOutLen );
- EVP_CIPHER_CTX_cleanup( &aes_ctx );
+ EVP_CIPHER_CTX_free( aes_ctx );
xDecryptedPackage->flush();
aDecryptedPackage.seekToStart();