diff --git a/CMakeLists.txt b/CMakeLists.txt index 767231e7..ec2703b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,7 +73,7 @@ message( message("") # Search for and set up the needed packages -set(OPENSSL_EXPECTED_VERSION 1.0.0) +set(OPENSSL_EXPECTED_VERSION 1.1.0) find_package(Platform REQUIRED) find_package(Git) diff --git a/cmake/FindOpenSSL.cmake b/cmake/FindOpenSSL.cmake index 3467a2db..8318b269 100644 --- a/cmake/FindOpenSSL.cmake +++ b/cmake/FindOpenSSL.cmake @@ -25,32 +25,19 @@ # http://www.slproweb.com/products/Win32OpenSSL.html -SET(_OPENSSL_ROOT_HINTS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]" - ) -IF(PLATFORM EQUAL 64) - SET(_OPENSSL_ROOT_PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;InstallLocation]" - "C:/OpenSSL-Win64/" - "C:/OpenSSL/" - "/usr/local/opt/openssl/" - ) -ELSE() - SET(_OPENSSL_ROOT_PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]" - "C:/OpenSSL/" - "/usr/local/opt/openssl/" - ) -ENDIF() +SET(_OPENSSL_ROOT_PATHS + "C:/OpenSSL-Win${PLATFORM}-v11/" + "C:/OpenSSL-Win${PLATFORM}/" + "C:/OpenSSL/" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (${PLATFORM}-bit)_is1;InstallLocation]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (${PLATFORM}-bit)_is1;InstallLocation]" + "/usr/local/opt/openssl/" +) FIND_PATH(OPENSSL_ROOT_DIR NAMES include/openssl/ssl.h - HINTS - ${_OPENSSL_ROOT_HINTS} PATHS ${_OPENSSL_ROOT_PATHS} ) @@ -81,28 +68,28 @@ IF(WIN32 AND NOT CYGWIN) FIND_LIBRARY(LIB_EAY_DEBUG NAMES - libeay32MDd libeay32 + libeay32MDd libeay32 libcrypto${PLATFORM}MDd libcrypto${PLATFORM} PATHS ${OPENSSL_ROOT_DIR}/lib/VC ) FIND_LIBRARY(LIB_EAY_RELEASE NAMES - libeay32MD libeay32 + libeay32MD libeay32 libcrypto${PLATFORM}MD libcrypto${PLATFORM} PATHS ${OPENSSL_ROOT_DIR}/lib/VC ) FIND_LIBRARY(SSL_EAY_DEBUG NAMES - ssleay32MDd ssleay32 ssl + ssleay32MDd ssleay32 ssl libssl${PLATFORM}MDd libssl${PLATFORM} libssl PATHS ${OPENSSL_ROOT_DIR}/lib/VC ) FIND_LIBRARY(SSL_EAY_RELEASE NAMES - ssleay32MD ssleay32 ssl + ssleay32MD ssleay32 ssl libssl${PLATFORM}MD libssl${PLATFORM} libssl PATHS ${OPENSSL_ROOT_DIR}/lib/VC ) @@ -125,14 +112,14 @@ IF(WIN32 AND NOT CYGWIN) # same player, for MingW FIND_LIBRARY(LIB_EAY NAMES - libeay32 + libeay32 libcrypto PATHS ${OPENSSL_ROOT_DIR}/lib/MinGW ) FIND_LIBRARY(SSL_EAY NAMES NAMES - ssleay32 + ssleay32 libssl PATHS ${OPENSSL_ROOT_DIR}/lib/MinGW ) @@ -147,7 +134,7 @@ IF(WIN32 AND NOT CYGWIN) # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues: FIND_LIBRARY(LIB_EAY NAMES - libeay32 + libeay32 libcrypto PATHS ${OPENSSL_ROOT_DIR}/lib ${OPENSSL_ROOT_DIR}/lib/VC @@ -155,7 +142,7 @@ IF(WIN32 AND NOT CYGWIN) FIND_LIBRARY(SSL_EAY NAMES - ssleay32 + ssleay32 libssl PATHS ${OPENSSL_ROOT_DIR}/lib ${OPENSSL_ROOT_DIR}/lib/VC @@ -182,8 +169,6 @@ if (NOT OPENSSL_INCLUDE_DIR) endif() if (OPENSSL_INCLUDE_DIR) - message( STATUS "Found OpenSSL library: ${OPENSSL_LIBRARIES}") - message( STATUS "Found OpenSSL headers: ${OPENSSL_INCLUDE_DIR}") if (_OPENSSL_VERSION) set(OPENSSL_VERSION "${_OPENSSL_VERSION}") else (_OPENSSL_VERSION) @@ -218,6 +203,11 @@ if (OPENSSL_INCLUDE_DIR) set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}") endif (_OPENSSL_VERSION) + + message( STATUS "OpenSSL library: ${OPENSSL_LIBRARIES}") + message( STATUS "OpenSSL headers: ${OPENSSL_INCLUDE_DIR}") + message( STATUS "OpenSSL version: ${OPENSSL_VERSION}") + endif (OPENSSL_INCLUDE_DIR) MARK_AS_ADVANCED(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES) diff --git a/cmake/generate_product_version.cmake b/cmake/generate_product_version.cmake index fb0a8ea0..8b7ea01c 100644 --- a/cmake/generate_product_version.cmake +++ b/cmake/generate_product_version.cmake @@ -14,7 +14,7 @@ set (GenerateProductVersionCurrentDir ${CMAKE_CURRENT_LIST_DIR}) # ICON ${PATH_TO_APP_ICON} # VERSION_MAJOR 2 # VERSION_MINOR 3 -# VERSION_PATH ${BUILD_COUNTER} +# VERSION_PATCH ${BUILD_COUNTER} # VERSION_REVISION ${BUILD_REVISION} # ) # where BUILD_COUNTER and BUILD_REVISION could be values from your CI server. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 500f19ec..e2fbcf60 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -53,11 +53,15 @@ if(BUILD_TOOLS) endif() if (BUILD_MANGOSD OR BUILD_REALMD) -if(WIN32) +if(WIN32 AND MSVC) get_filename_component(MYSQL_LIB_DIR ${MYSQL_LIBRARY} DIRECTORY) get_filename_component(MYSQL_LIB_DLL ${MYSQL_LIBRARY} NAME) STRING(REPLACE ".lib" ".dll" MYSQL_LIB_DLL ${MYSQL_LIB_DLL}) install(FILES ${MYSQL_LIB_DIR}/${MYSQL_LIB_DLL} DESTINATION ${BIN_DIR}) - install(FILES ${OPENSSL_ROOT_DIR}/libeay32.dll DESTINATION ${BIN_DIR}) + if (OPENSSL_VERSION VERSION_EQUAL "1.1") + install(FILES ${OPENSSL_ROOT_DIR}/libcrypto-1_1.dll DESTINATION ${BIN_DIR} OPTIONAL) + else() + install(FILES ${OPENSSL_ROOT_DIR}/libeay32.dll DESTINATION ${BIN_DIR} OPTIONAL) + endif() endif() endif() diff --git a/src/mangosd/CMakeLists.txt b/src/mangosd/CMakeLists.txt index 09ce94fe..50d4919d 100644 --- a/src/mangosd/CMakeLists.txt +++ b/src/mangosd/CMakeLists.txt @@ -137,7 +137,6 @@ endif() if(UNIX) target_link_libraries(${EXECUTABLE_NAME} - ${OPENSSL_EXTRA_LIBRARIES} ${ZLIB_LIBRARIES} ) endif() diff --git a/src/shared/Auth/ARC4.cpp b/src/shared/Auth/ARC4.cpp index 19cb1a94..eecad6ad 100644 --- a/src/shared/Auth/ARC4.cpp +++ b/src/shared/Auth/ARC4.cpp @@ -27,32 +27,32 @@ ARC4::ARC4(uint8 len) : m_ctx() { - EVP_CIPHER_CTX_init(&m_ctx); - EVP_EncryptInit_ex(&m_ctx, EVP_rc4(), NULL, NULL, NULL); - EVP_CIPHER_CTX_set_key_length(&m_ctx, len); + m_ctx = EVP_CIPHER_CTX_new(); + EVP_EncryptInit_ex(m_ctx, EVP_rc4(), NULL, NULL, NULL); + EVP_CIPHER_CTX_set_key_length(m_ctx, len); } ARC4::ARC4(uint8 *seed, uint8 len) : m_ctx() { - EVP_CIPHER_CTX_init(&m_ctx); - EVP_EncryptInit_ex(&m_ctx, EVP_rc4(), NULL, NULL, NULL); - EVP_CIPHER_CTX_set_key_length(&m_ctx, len); - EVP_EncryptInit_ex(&m_ctx, NULL, NULL, seed, NULL); + m_ctx = EVP_CIPHER_CTX_new(); + EVP_EncryptInit_ex(m_ctx, EVP_rc4(), NULL, NULL, NULL); + EVP_CIPHER_CTX_set_key_length(m_ctx, len); + EVP_EncryptInit_ex(m_ctx, NULL, NULL, seed, NULL); } ARC4::~ARC4() { - EVP_CIPHER_CTX_cleanup(&m_ctx); + EVP_CIPHER_CTX_free(m_ctx); } void ARC4::Init(uint8 *seed) { - EVP_EncryptInit_ex(&m_ctx, NULL, NULL, seed, NULL); + EVP_EncryptInit_ex(m_ctx, NULL, NULL, seed, NULL); } void ARC4::UpdateData(int len, uint8 *data) { int outlen = 0; - EVP_EncryptUpdate(&m_ctx, data, &outlen, data, len); - EVP_EncryptFinal_ex(&m_ctx, data, &outlen); + EVP_EncryptUpdate(m_ctx, data, &outlen, data, len); + EVP_EncryptFinal_ex(m_ctx, data, &outlen); } diff --git a/src/shared/Auth/ARC4.h b/src/shared/Auth/ARC4.h index 6bfa1bd7..3b4cd493 100644 --- a/src/shared/Auth/ARC4.h +++ b/src/shared/Auth/ARC4.h @@ -38,7 +38,7 @@ class ARC4 void Init(uint8 *seed); void UpdateData(int len, uint8 *data); private: - EVP_CIPHER_CTX m_ctx; + EVP_CIPHER_CTX* m_ctx; }; #endif diff --git a/src/shared/Auth/HMACSHA1.cpp b/src/shared/Auth/HMACSHA1.cpp index 11cb741b..df905271 100644 --- a/src/shared/Auth/HMACSHA1.cpp +++ b/src/shared/Auth/HMACSHA1.cpp @@ -27,13 +27,22 @@ HMACSHA1::HMACSHA1(uint32 len, uint8 *seed) { +#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX_init(&m_ctx); HMAC_Init_ex(&m_ctx, seed, len, EVP_sha1(), NULL); +#else + m_ctx = HMAC_CTX_new(); + HMAC_Init_ex(m_ctx, seed, len, EVP_sha1(), NULL); +#endif } HMACSHA1::~HMACSHA1() { +#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX_cleanup(&m_ctx); +#else + HMAC_CTX_free(m_ctx); +#endif } void HMACSHA1::UpdateBigNumber(BigNumber *bn) @@ -43,7 +52,11 @@ void HMACSHA1::UpdateBigNumber(BigNumber *bn) void HMACSHA1::UpdateData(const uint8 *data, int length) { +#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_Update(&m_ctx, data, length); +#else + HMAC_Update(m_ctx, data, length); +#endif } void HMACSHA1::UpdateData(const std::string &str) @@ -54,13 +67,21 @@ void HMACSHA1::UpdateData(const std::string &str) void HMACSHA1::Finalize() { uint32 length = 0; +#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_Final(&m_ctx, (uint8*)m_digest, &length); +#else + HMAC_Final(m_ctx, (uint8*)m_digest, &length); +#endif MANGOS_ASSERT(length == SHA_DIGEST_LENGTH); } uint8 *HMACSHA1::ComputeHash(BigNumber *bn) { +#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_Update(&m_ctx, bn->AsByteArray(), bn->GetNumBytes()); +#else + HMAC_Update(m_ctx, bn->AsByteArray(), bn->GetNumBytes()); +#endif Finalize(); return (uint8*)m_digest; -} \ No newline at end of file +} diff --git a/src/shared/Auth/HMACSHA1.h b/src/shared/Auth/HMACSHA1.h index bcfa1496..482328a0 100644 --- a/src/shared/Auth/HMACSHA1.h +++ b/src/shared/Auth/HMACSHA1.h @@ -46,7 +46,11 @@ public: uint8 *GetDigest() { return (uint8*)m_digest; } int GetLength() { return SHA_DIGEST_LENGTH; } private: +#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX m_ctx; +#else + HMAC_CTX* m_ctx; +#endif uint8 m_digest[SHA_DIGEST_LENGTH]; }; -#endif \ No newline at end of file +#endif