Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Alexander_Naumov:SLE-12:Update
podofo.35912
r1791-Fix-build-failure-with-OpenSSL-1.1.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File r1791-Fix-build-failure-with-OpenSSL-1.1.patch of Package podofo.35912
Index: CMakeLists.txt =================================================================== --- CMakeLists.txt.orig +++ CMakeLists.txt @@ -22,7 +22,6 @@ SET(PODOFO_LIBVERSION "${PODOFO_SOVERSIO # INCLUDE(CheckIncludeFile) INCLUDE(CheckLibraryExists) -INCLUDE(UsePkgConfig) INCLUDE(TestBigEndian) INCLUDE(CheckTypeSize) @@ -486,9 +485,14 @@ LINK_DIRECTORIES( # will include these and the correct podofo target, so clients # should specify only PODOFO_LIB . # +# The LIBCRYPTO_LDFLAGS is defined only if the libcrypto was found +# by pkg-config, otherwise it will be empty. It can contain proper +# path for the libcrypto too, thus it's added here. +# SET(PODOFO_LIB_DEPENDS ${ZLIB_LIBRARIES} ${LIBIDN_LIBRARIES} + ${LIBCRYPTO_LDFLAGS} ${LIBCRYPTO_LIBRARIES} ${LIBJPEG_LIBRARIES} ${PLATFORM_SYSTEM_LIBRARIES} Index: cmake/modules/FindPkgConfig.cmake =================================================================== --- cmake/modules/FindPkgConfig.cmake.orig +++ cmake/modules/FindPkgConfig.cmake @@ -1,74 +0,0 @@ -## FindPkgConfig.cmake -## by Albert Strasheim <http://students . ee . sun . ac . za/~albert/> -## -## This module finds packages using pkg-config, which retrieves -## information about packages from special metadata files. -## -## See http://www . freedesktop . org/Software/pkgconfig/ -## -## ------------------------------------------------------------------- -## -## Usage: -## -## INCLUDE( ${CMAKE_ROOT}/Modules/FindPkgConfig.cmake) -## PKGCONFIG("libxml-2.0 >= 1.3") -## IF(PKGCONFIG_FOUND) -## # do something with CMAKE_PKGCONFIG_C_FLAGS -## # do something with PKGCONFIG_LIBRARIES -## ELSE(PKGCONFIG_FOUND) -# MESSAGE("Cannot find libxml2 version 1.3 or above") -## ENDIF(PKGCONFIG_FOUND) -## -## Notes: -## -## You can set the PKG_CONFIG_PATH environment variable to tell -## pkg-config where to search for .pc files. See pkg-config(1) for -## more information. - -#FIXME: IF(WIN32) pkg-config --msvc-syntax ENDIF(WIN32) ??? - -FIND_PROGRAM(CMAKE_PKGCONFIG_EXECUTABLE pkg-config) -MARK_AS_ADVANCED(CMAKE_PKGCONFIG_EXECUTABLE) - -MACRO(PKGCONFIG LIBRARY) - SET(PKGCONFIG_FOUND 0) - -# MESSAGE("DEBUG: find library '${LIBRARY}'") - - IF(CMAKE_PKGCONFIG_EXECUTABLE) -# MESSAGE("DEBUG: pkg-config executable found") - - EXEC_PROGRAM(${CMAKE_PKGCONFIG_EXECUTABLE} - ARGS "'${LIBRARY}'" - OUTPUT_VARIABLE PKGCONFIG_OUTPUT - RETURN_VALUE PKGCONFIG_RETURN) - IF(NOT PKGCONFIG_RETURN) -# MESSAGE("DEBUG: packages found") - - # set C_FLAGS and CXX_FLAGS - EXEC_PROGRAM(${CMAKE_PKGCONFIG_EXECUTABLE} - ARGS "--cflags '${LIBRARY}'" - OUTPUT_VARIABLE CMAKE_PKGCONFIG_C_FLAGS) - SET(CMAKE_PKGCONFIG_CXX_FLAGS "${CMAKE_PKGCONFIG_C_FLAGS}") - - # set LIBRARIES - EXEC_PROGRAM(${CMAKE_PKGCONFIG_EXECUTABLE} - ARGS "--libs '${LIBRARY}'" - OUTPUT_VARIABLE PKGCONFIG_LIBRARIES) - - SET(PKGCONFIG_FOUND 1) - ELSE(NOT PKGCONFIG_RETURN) -# MESSAGE("DEBUG '${LIBRARY}' NOT FOUND by pkg-config") - - SET(CMAKE_PKGCONFIG_C_FLAGS "") - SET(CMAKE_PKGCONFIG_CXX_FLAGS "") - SET(PKGCONFIG_LIBRARIES "") - ENDIF(NOT PKGCONFIG_RETURN) -# ELSE(CMAKE_PKGCONFIG_EXECUTABLE) -# MESSAGE("DEBUG: pkg-config executable NOT FOUND") - ENDIF(CMAKE_PKGCONFIG_EXECUTABLE) - -# MESSAGE("DEBUG: CMAKE_PKGCONFIG_C_FLAGS=${CMAKE_PKGCONFIG_C_FLAGS}") -# MESSAGE("DEBUG: PKGCONFIG_LIBRARIES=${PKGCONFIG_LIBRARIES}") -ENDMACRO(PKGCONFIG) - Index: cmake/modules/FindLIBCRYPTO.cmake =================================================================== --- cmake/modules/FindLIBCRYPTO.cmake.orig +++ cmake/modules/FindLIBCRYPTO.cmake @@ -11,39 +11,70 @@ IF (LIBCRYPTO_INCLUDE_DIR) SET(LIBCRYPTO_FIND_QUIETLY TRUE) ENDIF (LIBCRYPTO_INCLUDE_DIR) -# Require a regular OpenSSL even on OSX/iOS -# IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") -# # MacOSX has deprecated the use of openssl crypto functions -# # and replaced it with API-compatible CommonCrypto -# FIND_PATH(LIBCRYPTO_INCLUDE_DIR CommonCrypto/CommonDigest.h) -# SET(LIBCRYPTO_LIBRARY_NAMES_RELEASE ${LIBCRYPTO_LIBRARY_NAMES_RELEASE} ${LIBCRYPTO_LIBRARY_NAMES} ssl) -# SET(LIBCRYPTO_LIBRARY_NAMES_DEBUG ${LIBCRYPTO_LIBRARY_NAMES_DEBUG} ssld) -# ELSE(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - FIND_PATH(LIBCRYPTO_INCLUDE_DIR openssl/sha.h) - SET(LIBCRYPTO_LIBRARY_NAMES_RELEASE ${LIBCRYPTO_LIBRARY_NAMES_RELEASE} ${LIBCRYPTO_LIBRARY_NAMES} crypto) - SET(LIBCRYPTO_LIBRARY_NAMES_DEBUG ${LIBCRYPTO_LIBRARY_NAMES_DEBUG} cryptod) -# ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - -FIND_LIBRARY(LIBCRYPTO_LIBRARY_RELEASE NAMES ${LIBCRYPTO_LIBRARY_NAMES_RELEASE} ) - -# Find a debug library if one exists and use that for debug builds. -# This really only does anything for win32, but does no harm on other -# platforms. -FIND_LIBRARY(LIBCRYPTO_LIBRARY_DEBUG NAMES ${LIBCRYPTO_LIBRARY_NAMES_DEBUG}) - -INCLUDE(LibraryDebugAndRelease) -SET_LIBRARY_FROM_DEBUG_AND_RELEASE(LIBCRYPTO) - -# handle the QUIETLY and REQUIRED arguments and set LIBCRYPTO_FOUND to TRUE if -# all listed variables are TRUE -INCLUDE(PoDoFoFindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBCRYPTO DEFAULT_MSG LIBCRYPTO_LIBRARY LIBCRYPTO_INCLUDE_DIR) - -IF(LIBCRYPTO_FOUND) - SET( LIBCRYPTO_LIBRARIES ${LIBCRYPTO_LIBRARY} ) -ELSE(LIBCRYPTO_FOUND) - SET( LIBCRYPTO_LIBRARIES ) -ENDIF(LIBCRYPTO_FOUND) - -MARK_AS_ADVANCED( LIBCRYPTO_LIBRARY LIBCRYPTO_INCLUDE_DIR ) +IF (NOT LIBCRYPTO_INCLUDE_DIR OR NOT LIBCRYPTO_LIBRARIES) + FIND_PACKAGE(PkgConfig) + IF (PKG_CONFIG_FOUND) + PKG_CHECK_MODULES (LIBCRYPTO libcrypto) + IF (LIBCRYPTO_FOUND) + SET (LIBCRYPTO_INCLUDE_DIR ${LIBCRYPTO_INCLUDE_DIRS}) + ENDIF (LIBCRYPTO_FOUND) + ENDIF (PKG_CONFIG_FOUND) +ENDIF (NOT LIBCRYPTO_INCLUDE_DIR OR NOT LIBCRYPTO_LIBRARIES) + +IF (NOT LIBCRYPTO_INCLUDE_DIR OR NOT LIBCRYPTO_LIBRARIES) + # Require a regular OpenSSL even on OSX/iOS + # IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + # # MacOSX has deprecated the use of openssl crypto functions + # # and replaced it with API-compatible CommonCrypto + # FIND_PATH(LIBCRYPTO_INCLUDE_DIR CommonCrypto/CommonDigest.h) + # SET(LIBCRYPTO_LIBRARY_NAMES_RELEASE ${LIBCRYPTO_LIBRARY_NAMES_RELEASE} ${LIBCRYPTO_LIBRARY_NAMES} ssl) + # SET(LIBCRYPTO_LIBRARY_NAMES_DEBUG ${LIBCRYPTO_LIBRARY_NAMES_DEBUG} ssld) + # ELSE(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + FIND_PATH(LIBCRYPTO_INCLUDE_DIR openssl/sha.h) + SET(LIBCRYPTO_LIBRARY_NAMES_RELEASE ${LIBCRYPTO_LIBRARY_NAMES_RELEASE} ${LIBCRYPTO_LIBRARY_NAMES} crypto) + SET(LIBCRYPTO_LIBRARY_NAMES_DEBUG ${LIBCRYPTO_LIBRARY_NAMES_DEBUG} cryptod) + # ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + + FIND_LIBRARY(LIBCRYPTO_LIBRARY_RELEASE NAMES ${LIBCRYPTO_LIBRARY_NAMES_RELEASE} ) + + # Find a debug library if one exists and use that for debug builds. + # This really only does anything for win32, but does no harm on other + # platforms. + FIND_LIBRARY(LIBCRYPTO_LIBRARY_DEBUG NAMES ${LIBCRYPTO_LIBRARY_NAMES_DEBUG}) + + INCLUDE(LibraryDebugAndRelease) + SET_LIBRARY_FROM_DEBUG_AND_RELEASE(LIBCRYPTO) + + # handle the QUIETLY and REQUIRED arguments and set LIBCRYPTO_FOUND to TRUE if + # all listed variables are TRUE + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBCRYPTO DEFAULT_MSG LIBCRYPTO_LIBRARY LIBCRYPTO_INCLUDE_DIR) + + IF(LIBCRYPTO_FOUND) + SET( LIBCRYPTO_LIBRARIES ${LIBCRYPTO_LIBRARY} ) + ELSE(LIBCRYPTO_FOUND) + SET( LIBCRYPTO_LIBRARIES ) + ENDIF(LIBCRYPTO_FOUND) + + MARK_AS_ADVANCED( LIBCRYPTO_LIBRARY LIBCRYPTO_INCLUDE_DIR ) + +ENDIF (NOT LIBCRYPTO_INCLUDE_DIR OR NOT LIBCRYPTO_LIBRARIES) + +# check whether using OpenSSL 1.1 API +IF (DEFINED LIBCRYPTO_INCLUDE_DIR AND DEFINED LIBCRYPTO_LIBRARIES) + INCLUDE(CheckCSourceCompiles) + + SET(CMAKE_REQUIRED_INCLUDES ${LIBCRYPTO_INCLUDE_DIR}) + SET(CMAKE_REQUIRED_LIBRARIES ${LIBCRYPTO_LIBRARIES}) + CHECK_C_SOURCE_COMPILES("#include <openssl/opensslv.h> + #ifndef OPENSSL_VERSION_NUMBER + #error No OPENSSL_VERSION_NUMBER defined + #endif + #if OPENSSL_VERSION_NUMBER < 0x10100000L + #error This is not OpenSSL 1.1 or higher + #endif + int main(void) { return 0; }" PODOFO_HAVE_OPENSSL_1_1) + UNSET(CMAKE_REQUIRED_INCLUDES) + UNSET(CMAKE_REQUIRED_LIBRARIES) +ENDIF (DEFINED LIBCRYPTO_INCLUDE_DIR AND DEFINED LIBCRYPTO_LIBRARIES) Index: podofo_config.h.in =================================================================== --- podofo_config.h.in.orig +++ podofo_config.h.in @@ -48,6 +48,7 @@ #cmakedefine PODOFO_HAVE_BOOST #cmakedefine PODOFO_HAVE_CPPUNIT #cmakedefine PODOFO_HAVE_OPENSSL +#cmakedefine PODOFO_HAVE_OPENSSL_1_1 #cmakedefine PODOFO_HAVE_LIBIDN /* Platform quirks */ Index: src/base/PdfEncrypt.cpp =================================================================== --- src/base/PdfEncrypt.cpp.orig +++ src/base/PdfEncrypt.cpp @@ -79,19 +79,38 @@ class AESCryptoEngine { AESCryptoEngine() { + #ifdef PODOFO_HAVE_OPENSSL_1_1 + aes = EVP_CIPHER_CTX_new(); + #else EVP_CIPHER_CTX_init(&aes); + #endif } - EVP_CIPHER_CTX* getEngine() {return &aes;} + EVP_CIPHER_CTX* getEngine() + { + #ifdef PODOFO_HAVE_OPENSSL_1_1 + return aes; + #else + return &aes; + #endif + } ~AESCryptoEngine() { + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX_free(aes); + #else EVP_CIPHER_CTX_cleanup(&aes); + #endif } private: - + + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX *aes; + #else EVP_CIPHER_CTX aes; + #endif }; // A class that holds the RC4 Crypto object @@ -101,19 +120,38 @@ public: RC4CryptoEngine() { + #ifdef PODOFO_HAVE_OPENSSL_1_1 + rc4 = EVP_CIPHER_CTX_new(); + #else EVP_CIPHER_CTX_init(&rc4); + #endif } - EVP_CIPHER_CTX* getEngine() {return &rc4;} + EVP_CIPHER_CTX* getEngine() + { + #ifdef PODOFO_HAVE_OPENSSL_1_1 + return rc4; + #else + return &rc4; + #endif + } ~RC4CryptoEngine() { + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX_free(rc4); + #else EVP_CIPHER_CTX_cleanup(&rc4); + #endif } private: + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX *rc4; + #else EVP_CIPHER_CTX rc4; + #endif }; /** A class that can encrypt/decrpyt streamed data block wise @@ -1304,24 +1342,34 @@ void PdfEncryptSHABase::ComputeUserKey(c // UE = AES-256 encoded file encryption key with key=hash // CBC mode, no padding, init vector=0 - EVP_CIPHER_CTX aes; - EVP_CIPHER_CTX_init(&aes); + EVP_CIPHER_CTX *aes; + #ifdef PODOFO_HAVE_OPENSSL_1_1 + aes = EVP_CIPHER_CTX_new(); + #else + EVP_CIPHER_CTX aes_local; + EVP_CIPHER_CTX_init(&aes_local); + aes = &aes_local; + #endif - int status = EVP_EncryptInit_ex(&aes, EVP_aes_256_cbc(), NULL, hashValue, NULL); + int status = EVP_EncryptInit_ex(aes, EVP_aes_256_cbc(), NULL, hashValue, NULL); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error initializing AES encryption engine" ); - EVP_CIPHER_CTX_set_padding(&aes, 0); // disable padding + EVP_CIPHER_CTX_set_padding(aes, 0); // disable padding int dataOutMoved; - status = EVP_EncryptUpdate(&aes, m_ueValue, &dataOutMoved, m_encryptionKey, m_keyLength); + status = EVP_EncryptUpdate(aes, m_ueValue, &dataOutMoved, m_encryptionKey, m_keyLength); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error AES-encrypting data" ); - status = EVP_EncryptFinal_ex(&aes, &m_ueValue[dataOutMoved], &dataOutMoved); + status = EVP_EncryptFinal_ex(aes, &m_ueValue[dataOutMoved], &dataOutMoved); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error AES-encrypting data" ); - EVP_CIPHER_CTX_cleanup(&aes); + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX_free(aes); + #else + EVP_CIPHER_CTX_cleanup(&aes_local); + #endif } void PdfEncryptSHABase::ComputeOwnerKey(const unsigned char * ownerpswd, int len) @@ -1360,24 +1408,34 @@ void PdfEncryptSHABase::ComputeOwnerKey( // OE = AES-256 encoded file encryption key with key=hash // CBC mode, no padding, init vector=0 - EVP_CIPHER_CTX aes; - EVP_CIPHER_CTX_init(&aes); + EVP_CIPHER_CTX *aes; + #ifdef PODOFO_HAVE_OPENSSL_1_1 + aes = EVP_CIPHER_CTX_new(); + #else + EVP_CIPHER_CTX aes_local; + EVP_CIPHER_CTX_init(&aes_local); + aes = &aes_local; + #endif - int status = EVP_EncryptInit_ex(&aes, EVP_aes_256_cbc(), NULL, hashValue, NULL); + int status = EVP_EncryptInit_ex(aes, EVP_aes_256_cbc(), NULL, hashValue, NULL); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error initializing AES encryption engine" ); - EVP_CIPHER_CTX_set_padding(&aes, 0); // disable padding + EVP_CIPHER_CTX_set_padding(aes, 0); // disable padding int dataOutMoved; - status = EVP_EncryptUpdate(&aes, m_oeValue, &dataOutMoved, m_encryptionKey, m_keyLength); + status = EVP_EncryptUpdate(aes, m_oeValue, &dataOutMoved, m_encryptionKey, m_keyLength); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error AES-encrypting data" ); - status = EVP_EncryptFinal_ex(&aes, &m_oeValue[dataOutMoved], &dataOutMoved); + status = EVP_EncryptFinal_ex(aes, &m_oeValue[dataOutMoved], &dataOutMoved); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error AES-encrypting data" ); - EVP_CIPHER_CTX_cleanup(&aes); + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX_free(aes); + #else + EVP_CIPHER_CTX_cleanup(&aes_local); + #endif } void PdfEncryptSHABase::PreprocessPassword( const std::string &password, unsigned char* outBuf, int &len) @@ -1508,24 +1566,34 @@ PdfEncryptAESV3::GenerateEncryptionKey(c // Encrypt Perms value - EVP_CIPHER_CTX aes; - EVP_CIPHER_CTX_init(&aes); + EVP_CIPHER_CTX *aes; + #ifdef PODOFO_HAVE_OPENSSL_1_1 + aes = EVP_CIPHER_CTX_new(); + #else + EVP_CIPHER_CTX aes_local; + EVP_CIPHER_CTX_init(&aes_local); + aes = &aes_local; + #endif - int status = EVP_EncryptInit_ex(&aes, EVP_aes_256_ecb(), NULL, m_encryptionKey, NULL); + int status = EVP_EncryptInit_ex(aes, EVP_aes_256_ecb(), NULL, m_encryptionKey, NULL); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error initializing AES encryption engine" ); - EVP_CIPHER_CTX_set_padding(&aes, 0); // disable padding + EVP_CIPHER_CTX_set_padding(aes, 0); // disable padding int dataOutMoved; - status = EVP_EncryptUpdate(&aes, m_permsValue, &dataOutMoved, perms, 16); + status = EVP_EncryptUpdate(aes, m_permsValue, &dataOutMoved, perms, 16); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error AES-encrypting data" ); - status = EVP_EncryptFinal_ex(&aes, &m_permsValue[dataOutMoved], &dataOutMoved); + status = EVP_EncryptFinal_ex(aes, &m_permsValue[dataOutMoved], &dataOutMoved); if(status != 1) PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Error AES-encrypting data" ); - EVP_CIPHER_CTX_cleanup(&aes); + #ifdef PODOFO_HAVE_OPENSSL_1_1 + EVP_CIPHER_CTX_free(aes); + #else + EVP_CIPHER_CTX_cleanup(&aes_local); + #endif } bool PdfEncryptAESV3::Authenticate( const std::string & password, const PdfString & )
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor