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 <ard...@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();