AWSNativeSDK-1.9.50-linux-openssl3.patch 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. diff --git a/aws-cpp-sdk-core/CMakeLists.txt b/aws-cpp-sdk-core/CMakeLists.txt
  2. index 17b4e46442..f71a925288 100644
  3. --- a/aws-cpp-sdk-core/CMakeLists.txt
  4. +++ b/aws-cpp-sdk-core/CMakeLists.txt
  5. @@ -100,7 +100,22 @@ include(CheckCXXSourceRuns)
  6. if(ENABLE_CURL_CLIENT)
  7. file(GLOB HTTP_CURL_CLIENT_HEADERS "include/aws/core/http/curl/*.h")
  8. file(GLOB HTTP_CURL_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/curl/*.cpp")
  9. - set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBRARIES})
  10. +
  11. + set(CMAKE_REQUIRED_INCLUDES ${CURL_INCLUDE_DIR})
  12. +
  13. + set(REQUIRED_CURL_TEST_LIBRARIES ${CURL_LIBRARIES})
  14. +
  15. + get_filename_component(DEP_CURL_FILE_EXTN ${CURL_LIBRARY} EXT)
  16. +
  17. + if(DEP_CURL_FILE_EXTN STREQUAL ".a")
  18. + message("Adding additional static dependencies for curl")
  19. + LIST(APPEND REQUIRED_CURL_TEST_LIBRARIES ${OPENSSL_LIBRARIES})
  20. + LIST(APPEND REQUIRED_CURL_TEST_LIBRARIES ${ZLIB_LIBRARIES})
  21. + SET(CMAKE_REQUIRED_FLAGS "-pthread -ldl")
  22. + endif()
  23. +
  24. + set(CMAKE_REQUIRED_LIBRARIES ${REQUIRED_CURL_TEST_LIBRARIES})
  25. +
  26. set(CHECK_CURL_HAS_H2 "
  27. #include <curl/curl.h>
  28. int main() {
  29. diff --git a/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp b/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp
  30. index af3e33e045..228625417e 100644
  31. --- a/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp
  32. +++ b/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp
  33. @@ -51,6 +51,11 @@ namespace Aws
  34. #define OPENSSL_VERSION_NUMBER 0x1000107fL
  35. #endif
  36. #define OPENSSL_VERSION_LESS_1_1 (OPENSSL_VERSION_NUMBER < 0x10100003L)
  37. +#define OPENSSL_VERSION_LESS_3_0 (OPENSSL_VERSION_NUMBER < 0x30000000L)
  38. +
  39. +#if !OPENSSL_VERSION_LESS_3_0
  40. +#include <openssl/core_names.h>
  41. +#endif
  42. #if OPENSSL_VERSION_LESS_1_1
  43. static const char* OPENSSL_INTERNALS_TAG = "OpenSSLCallbackState";
  44. @@ -328,8 +333,11 @@ namespace Aws
  45. HMACRAIIGuard() {
  46. #if OPENSSL_VERSION_LESS_1_1
  47. m_ctx = Aws::New<HMAC_CTX>("AllocSha256HAMCOpenSSLContext");
  48. -#else
  49. +#elif OPENSSL_VERSION_LESS_3_0
  50. m_ctx = HMAC_CTX_new();
  51. +#else
  52. + mac = EVP_MAC_fetch(NULL, "HMAC", NULL);
  53. + m_ctx = EVP_MAC_CTX_new(mac);
  54. #endif
  55. assert(m_ctx != nullptr);
  56. }
  57. @@ -337,17 +345,28 @@ namespace Aws
  58. ~HMACRAIIGuard() {
  59. #if OPENSSL_VERSION_LESS_1_1
  60. Aws::Delete<HMAC_CTX>(m_ctx);
  61. -#else
  62. +#elif OPENSSL_VERSION_LESS_3_0
  63. HMAC_CTX_free(m_ctx);
  64. +#else
  65. + EVP_MAC_CTX_free(m_ctx);
  66. #endif
  67. m_ctx = nullptr;
  68. }
  69. +#if OPENSSL_VERSION_LESS_3_0
  70. HMAC_CTX* getResource() {
  71. +#else
  72. + EVP_MAC_CTX* getResource() {
  73. +#endif
  74. return m_ctx;
  75. }
  76. private:
  77. +#if OPENSSL_VERSION_LESS_3_0
  78. HMAC_CTX *m_ctx;
  79. +#else
  80. + EVP_MAC *mac;
  81. + EVP_MAC_CTX *m_ctx;
  82. +#endif
  83. };
  84. HashResult Sha256HMACOpenSSLImpl::Calculate(const ByteBuffer& toSign, const ByteBuffer& secret)
  85. @@ -357,20 +376,36 @@ namespace Aws
  86. memset(digest.GetUnderlyingData(), 0, length);
  87. HMACRAIIGuard guard;
  88. +#if OPENSSL_VERSION_LESS_3_0
  89. HMAC_CTX* m_ctx = guard.getResource();
  90. +#else
  91. + EVP_MAC_CTX* m_ctx = guard.getResource();
  92. +#endif
  93. #if OPENSSL_VERSION_LESS_1_1
  94. HMAC_CTX_init(m_ctx);
  95. #endif
  96. +#if OPENSSL_VERSION_LESS_3_0
  97. HMAC_Init_ex(m_ctx, secret.GetUnderlyingData(), static_cast<int>(secret.GetLength()), EVP_sha256(),
  98. NULL);
  99. HMAC_Update(m_ctx, toSign.GetUnderlyingData(), toSign.GetLength());
  100. HMAC_Final(m_ctx, digest.GetUnderlyingData(), &length);
  101. +#else
  102. + char sha256[] {"SHA256"};
  103. + OSSL_PARAM ossl_params[2];
  104. + ossl_params[0] =
  105. + OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, sha256, 0);
  106. + ossl_params[1] = OSSL_PARAM_construct_end();
  107. + EVP_MAC_init(m_ctx, secret.GetUnderlyingData(),
  108. + static_cast<int>(secret.GetLength()), ossl_params);
  109. + EVP_MAC_update(m_ctx, toSign.GetUnderlyingData(), toSign.GetLength());
  110. + EVP_MAC_final(m_ctx, digest.GetUnderlyingData(), NULL, length);
  111. +#endif
  112. #if OPENSSL_VERSION_LESS_1_1
  113. HMAC_CTX_cleanup(m_ctx);
  114. -#else
  115. +#elif OPENSSL_VERSION_LESS_3_0
  116. HMAC_CTX_reset(m_ctx);
  117. #endif
  118. return HashResult(std::move(digest));