Skip to content

Finish crt migration, DRAFT, DO NOT MERGE #2460

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ if (LEGACY_BUILD)
add_definitions(-DDISABLE_IMDSV1)
endif ()

if (USE_CRT_HTTP_CLIENT)
set(ANDROID_BUILD_CURL OFF)
set(ANDROID_BUILD_OPENSSL OFF)
set(ANDROID_BUILD_ZLIB OFF)
set(FORCE_CURL OFF)
set(ENABLE_ZLIB_REQUEST_COMPRESSION OFF)
endif()

#From https://stackoverflow.com/questions/18968979/how-to-get-colorized-output-with-cmake
if (NOT WIN32)
string(ASCII 27 Esc)
Expand Down Expand Up @@ -160,7 +168,7 @@ if (LEGACY_BUILD)
set(PYTHON3_CMD ${PYTHON_EXECUTABLE})

# ENABLE_ZLIB_REQUEST_COMPRESSION should be ON by default if ZLIB is available
if(ENABLE_ZLIB_REQUEST_COMPRESSION)
if(ENABLE_ZLIB_REQUEST_COMPRESSION AND NOT USE_CRT_HTTP_CLIENT)
find_package(ZLIB QUIET)
if ( NOT ZLIB_FOUND)
set(ENABLE_ZLIB_REQUEST_COMPRESSION
Expand Down Expand Up @@ -232,10 +240,25 @@ if (LEGACY_BUILD)
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_PREV})
endif ()
else ()
# This is required in order to append /lib/cmake to each element in CMAKE_PREFIX_PATH
set(AWS_MODULE_DIR "/${CMAKE_INSTALL_LIBDIR}/cmake")
string(REPLACE ";" "${AWS_MODULE_DIR};" AWS_MODULE_PATH "${CMAKE_PREFIX_PATH}${AWS_MODULE_DIR}")
# Append that generated list to the module search path
list(APPEND CMAKE_MODULE_PATH ${AWS_MODULE_PATH})
include(AwsFindPackage)
set(IN_SOURCE_BUILD OFF)
endif ()
set(AWS_COMMON_RUNTIME_LIBS "aws-crt-cpp;aws-c-auth;aws-c-cal;aws-c-common;aws-c-compression;aws-c-event-stream;aws-c-http;aws-c-io;aws-c-mqtt;aws-c-s3;aws-checksums;aws-c-sdkutils")
aws_use_package(aws-crt-cpp)
aws_use_package(aws-c-http)
aws_use_package(aws-c-mqtt)
aws_use_package(aws-c-cal)
aws_use_package(aws-c-auth)
aws_use_package(aws-c-common)
aws_use_package(aws-c-io)
aws_use_package(aws-checksums)
aws_use_package(aws-c-event-stream)
aws_use_package(aws-c-s3)
set(AWS_COMMON_RUNTIME_LIBS ${DEP_AWS_LIBS})

include(compiler_settings)
# Instead of calling functions/macros inside included cmake scripts, we should call them in our main CMakeList.txt
Expand Down
67 changes: 18 additions & 49 deletions cmake/external_dependencies.cmake
Original file line number Diff line number Diff line change
@@ -1,61 +1,30 @@
# Zlib
if(PLATFORM_ANDROID AND ANDROID_BUILD_ZLIB)
set(BUILD_ZLIB 1)
message(STATUS " Building Zlib as part of AWS SDK")
elseif(NOT PLATFORM_WINDOWS AND NOT PLATFORM_CUSTOM)
#If zlib is required either by openssl and curl in their linking chain, we should find it.
include(FindZLIB)
if(NOT ZLIB_FOUND)
message(FATAL_ERROR "Could not find zlib")
else()
message(STATUS " Zlib library: ${ZLIB_LIBRARIES}")
if (NOT USE_CRT_HTTP_CLIENT)
if(PLATFORM_ANDROID AND ANDROID_BUILD_ZLIB)
set(BUILD_ZLIB 1)
message(STATUS " Building Zlib as part of AWS SDK")
elseif(NOT PLATFORM_WINDOWS AND NOT PLATFORM_CUSTOM)
#If zlib is required either by openssl and curl in their linking chain, we should find it.
include(FindZLIB)
if(NOT ZLIB_FOUND)
message(FATAL_ERROR "Could not find zlib")
else()
message(STATUS " Zlib library: ${ZLIB_LIBRARIES}")
endif()
endif()
endif()

# Request Compression dependencies
if (ENABLE_ZLIB_REQUEST_COMPRESSION)
find_package(ZLIB REQUIRED)
# Request Compression dependencies
if (ENABLE_ZLIB_REQUEST_COMPRESSION)
find_package(ZLIB REQUIRED)
endif()
endif()


# Encryption control
if(NOT NO_ENCRYPTION)
if(PLATFORM_WINDOWS)
set(ENABLE_BCRYPT_ENCRYPTION ON)
elseif(PLATFORM_LINUX OR PLATFORM_ANDROID)
set(ENABLE_OPENSSL_ENCRYPTION ON)
elseif(PLATFORM_APPLE)
set(ENABLE_COMMONCRYPTO_ENCRYPTION ON)
endif()
else()
if(NO_ENCRYPTION)
set(ENABLE_INJECTED_ENCRYPTION ON)
endif()

if(ENABLE_BCRYPT_ENCRYPTION)
add_definitions(-DENABLE_BCRYPT_ENCRYPTION)
set(CRYPTO_LIBS Bcrypt)
set(CRYPTO_LIBS_ABSTRACT_NAME Bcrypt)
message(STATUS "Encryption: Bcrypt")
elseif(ENABLE_OPENSSL_ENCRYPTION)
add_definitions(-DENABLE_OPENSSL_ENCRYPTION)
message(STATUS "Encryption: LibCrypto")

set(CRYPTO_TARGET_NAME "AWS::crypto")
if(PLATFORM_ANDROID AND ANDROID_BUILD_OPENSSL)
set(BUILD_OPENSSL 1)
set(CRYPTO_TARGET_NAME "crypto")
set(USE_OPENSSL ON)
message(STATUS " Building Openssl as part of AWS SDK")
else()
find_package(crypto REQUIRED)
endif()
set(CRYPTO_LIBS ${CRYPTO_TARGET_NAME} ${ZLIB_LIBRARIES})
# ssl depends on libcrypto
set(CRYPTO_LIBS_ABSTRACT_NAME ${CRYPTO_TARGET_NAME} ssl z)
elseif(ENABLE_COMMONCRYPTO_ENCRYPTION)
add_definitions(-DENABLE_COMMONCRYPTO_ENCRYPTION)
message(STATUS "Encryption: CommonCrypto")
elseif(ENABLE_INJECTED_ENCRYPTION)
if(ENABLE_INJECTED_ENCRYPTION)
message(STATUS "Encryption: None")
message(STATUS "You will need to inject an encryption implementation before making any http requests!")
endif()
Expand Down
2 changes: 1 addition & 1 deletion crt/aws-crt-cpp
Submodule aws-crt-cpp updated 41 files
+30 −0 .builder/actions/crt-ci-prep.py
+82 −0 .github/ISSUE_TEMPLATE/bug-report.yml
+5 −0 .github/ISSUE_TEMPLATE/config.yml
+23 −0 .github/ISSUE_TEMPLATE/documentation.yml
+47 −0 .github/ISSUE_TEMPLATE/feature-request.yml
+17 −0 .github/workflows/closed-issue-message.yml
+46 −0 .github/workflows/stale_issue.yml
+1 −1 CMakeLists.txt
+1 −1 VERSION
+37 −37 bin/mqtt5_app/main.cpp
+204 −132 bin/mqtt5_canary/main.cpp
+330 −0 codebuild/CanaryWrapper.py
+1,288 −0 codebuild/CanaryWrapper_Classes.py
+48 −0 codebuild/CanaryWrapper_MetricFunctions.py
+51 −0 codebuild/mqtt5-cpp-canary-test.yml
+1 −1 crt/aws-c-cal
+1 −1 crt/aws-c-common
+16 −2 include/aws/crt/Types.h
+18 −0 include/aws/crt/crypto/HMAC.h
+51 −7 include/aws/crt/crypto/Hash.h
+18 −0 include/aws/crt/crypto/SecureRandom.h
+147 −0 include/aws/crt/crypto/SymmetricCipher.h
+2 −2 include/aws/crt/http/HttpRequestResponse.h
+34 −104 include/aws/crt/mqtt/Mqtt5Client.h
+197 −0 include/aws/crt/mqtt/Mqtt5ClientCore.h
+49 −49 include/aws/crt/mqtt/Mqtt5Packets.h
+18 −18 include/aws/iot/Mqtt5Client.h
+50 −22 source/Types.cpp
+33 −2 source/crypto/HMAC.cpp
+54 −15 source/crypto/Hash.cpp
+21 −0 source/crypto/SecureRandom.cpp
+169 −0 source/crypto/SymmetricCipher.cpp
+112 −55 source/iot/Mqtt5Client.cpp
+80 −444 source/mqtt/Mqtt5Client.cpp
+612 −0 source/mqtt/Mqtt5ClientCore.cpp
+51 −51 source/mqtt/Mqtt5Packets.cpp
+5 −0 tests/CMakeLists.txt
+1 −0 tests/HMACTest.cpp
+34 −0 tests/HashTest.cpp
+451 −349 tests/Mqtt5ClientTest.cpp
+200 −0 tests/SymmetricCipherTest.cpp
55 changes: 13 additions & 42 deletions src/aws-cpp-sdk-core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -212,18 +212,11 @@ else()
endif()

# encryption implementations
if(ENABLE_BCRYPT_ENCRYPTION)
file(GLOB UTILS_CRYPTO_BCRYPT_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/bcrypt/*.h")
file(GLOB UTILS_CRYPTO_BCRYPT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/bcrypt/*.cpp")
elseif(ENABLE_OPENSSL_ENCRYPTION)
file(GLOB UTILS_CRYPTO_OPENSSL_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/openssl/*.h")
file(GLOB UTILS_CRYPTO_OPENSSL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/openssl/*.cpp")
elseif(ENABLE_COMMONCRYPTO_ENCRYPTION)
file(GLOB UTILS_CRYPTO_COMMONCRYPTO_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/commoncrypto/*.h")
file(GLOB UTILS_CRYPTO_COMMONCRYPTO_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/commoncrypto/*.cpp")
if (NOT NO_ENCRYPTION)
file(GLOB UTILS_CRYPTO_CRT_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/crt/*.h")
file(GLOB UTILS_CRYPTO_CRT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/crt/*.cpp")
endif()


file(GLOB AWS_NATIVE_SDK_COMMON_SRC
${AWS_TINYXML2_SOURCE}
${AWS_AUTH_SOURCE}
Expand All @@ -246,8 +239,7 @@ file(GLOB AWS_NATIVE_SDK_COMMON_SRC
${UTILS_LOGGING_SOURCE}
${UTILS_MEMORY_SOURCE}
${UTILS_MEMORY_STL_SOURCE}
${UTILS_CRYPTO_OPENSSL_SOURCE}
${UTILS_CRYPTO_COMMONCRYPTO_SOURCE}
${UTILS_CRYPTO_CRT_SOURCE}
)

file(GLOB AWS_NATIVE_SDK_COMMON_HEADERS
Expand Down Expand Up @@ -408,16 +400,7 @@ if(MSVC)
endif()
source_group("Header Files\\aws\\core\\http\\crt" FILES ${CRT_HTTP_HEADERS})


# encryption conditional headers
if(ENABLE_BCRYPT_ENCRYPTION)
source_group("Header Files\\aws\\core\\utils\\crypto\\bcrypt" FILES ${UTILS_CRYPTO_BCRYPT_HEADERS})
elseif(ENABLE_OPENSSL_ENCRYPTION)
source_group("Header Files\\aws\\core\\utils\\crypto\\openssl" FILES ${UTILS_CRYPTO_OPENSSL_HEADERS})
elseif(ENABLE_COMMONCRYPTO_ENCRYPTION)
source_group("Header Files\\aws\\core\\utils\\crypto\\commoncrypto" FILES ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS})
endif()

source_group("Header Files\\aws\\core\\utils\\crypto\\crt" FILES ${UTILS_CRYPTO_CRT_HEADERS})
source_group("Source Files" FILES ${AWS_SOURCE})
source_group("Source Files\\external\\cjson" FILES ${CJSON_SOURCE})
source_group("Source Files\\external\\tinyxml2" FILES ${AWS_TINYXML2_SOURCE})
Expand Down Expand Up @@ -459,17 +442,9 @@ if(MSVC)
source_group("Source Files\\http\\crt" FILES ${CRT_HTTP_SOURCE})
endif()


# encryption conditional source
if(ENABLE_BCRYPT_ENCRYPTION)
source_group("Source Files\\utils\\crypto\\bcrypt" FILES ${UTILS_CRYPTO_BCRYPT_SOURCE})
elseif(ENABLE_OPENSSL_ENCRYPTION)
source_group("Source Files\\utils\\crypto\\openssl" FILES ${UTILS_CRYPTO_OPENSSL_SOURCE})
elseif(ENABLE_COMMONCRYPTO_ENCRYPTION)
source_group("Source Files\\utils\\crypto\\commoncrypto" FILES ${UTILS_CRYPTO_COMMONCRYPTO_SOURCE})
if (NOT NO_ENCRYPTION)
source_group("Source Files\\utils\\crypto\\crt" FILES ${UTILS_CRYPTO_CRT_SOURCE})
endif()


endif(MSVC)

add_library(${PROJECT_NAME} ${AWS_NATIVE_SDK_SRC})
Expand All @@ -495,6 +470,10 @@ if (CURL_HAS_TLS_PROXY)
target_compile_definitions(${PROJECT_NAME} PRIVATE "CURL_HAS_TLS_PROXY")
endif()

if (NO_ENCRYPTION)
target_compile_definitions(${PROJECT_NAME} PRIVATE "NO_ENCRYPTION")
endif()

set(Core_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/include/")

if(PLATFORM_CUSTOM)
Expand All @@ -508,7 +487,6 @@ if(PLATFORM_CUSTOM)
endif()
endif()


if(NOT PLATFORM_CUSTOM)
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/platform/refs")
endif()
Expand Down Expand Up @@ -551,7 +529,7 @@ aws_use_package(aws-crt-cpp)

target_link_libraries(${PROJECT_NAME} PUBLIC ${DEP_AWS_LIBS})

if (ENABLE_ZLIB_REQUEST_COMPRESSION)
if (ENABLE_ZLIB_REQUEST_COMPRESSION AND NOT USE_CRT_HTTP_CLIENT)
target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB)
endif()

Expand Down Expand Up @@ -647,13 +625,6 @@ endif()


# encryption headers
if(ENABLE_BCRYPT_ENCRYPTION)
install (FILES ${UTILS_CRYPTO_BCRYPT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/bcrypt)
elseif(ENABLE_OPENSSL_ENCRYPTION)
install (FILES ${UTILS_CRYPTO_OPENSSL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/openssl)
elseif(ENABLE_COMMONCRYPTO_ENCRYPTION)
install (FILES ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/commoncrypto)
endif()

install (FILES ${UTILS_CRYPTO_CRT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/crt)
do_packaging()

Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,6 @@ namespace Aws
std::shared_ptr<Auth::AWSCredentialsProvider> m_credentialsProvider;
const Aws::String m_serviceName;
const Aws::String m_region;
Aws::UniquePtr<Aws::Utils::Crypto::Sha256> m_hash;
Aws::UniquePtr<Aws::Utils::Crypto::Sha256HMAC> m_HMAC;

Aws::Set<Aws::String> m_unsignedHeaders;

Expand Down
Loading