diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 75b82ee..47bed29 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,11 +3,7 @@ cmake_minimum_required(VERSION 3.10 FATAL_ERROR) project(uthenticode) find_package(pe-parse REQUIRED) -find_package( - OpenSSL 1.1 - COMPONENTS Crypto - REQUIRED -) +find_package(OpenSSL REQUIRED) add_library("${PROJECT_NAME}" uthenticode.cpp) @@ -38,7 +34,7 @@ else () target_link_libraries("${PROJECT_NAME}" PUBLIC pe-parse::pe-parser-library) endif () -target_link_libraries("${PROJECT_NAME}" PUBLIC OpenSSL::Crypto) +target_link_libraries("${PROJECT_NAME}" PUBLIC OpenSSL::SSL OpenSSL::Crypto) install( TARGETS "${PROJECT_NAME}" diff --git a/src/include/uthenticode.h b/src/include/uthenticode.h index 8422cc3..938d8b8 100644 --- a/src/include/uthenticode.h +++ b/src/include/uthenticode.h @@ -48,6 +48,7 @@ DECLARE_ASN1_FUNCTIONS(Authenticode_SpcIndirectDataContent) * So we wrap it here for use with unique_ptr. */ void OpenSSL_free(void *ptr); +void SK_X509_free(stack_st_X509 *ptr); /* Convenient self-releasing aliases for libcrypto and custom ASN.1 types. */ @@ -56,7 +57,7 @@ using ASN1_OBJECT_ptr = std::unique_ptr; using OpenSSL_ptr = std::unique_ptr; using BN_ptr = std::unique_ptr; -using STACK_OF_X509_ptr = std::unique_ptr; +using STACK_OF_X509_ptr = std::unique_ptr; using SectionList = std::vector; diff --git a/src/uthenticode.cpp b/src/uthenticode.cpp index b1be0bc..7043589 100644 --- a/src/uthenticode.cpp +++ b/src/uthenticode.cpp @@ -39,6 +39,11 @@ IMPLEMENT_ASN1_FUNCTIONS(Authenticode_SpcIndirectDataContent) void OpenSSL_free(void *ptr) { OPENSSL_free(ptr); } + +void SK_X509_free(stack_st_X509 *ptr) { + sk_X509_free(ptr); +} + // clang-format on } // namespace impl @@ -252,7 +257,7 @@ std::vector SignedData::get_signers() const { if (signers_stack_ptr == nullptr) { return {}; } - auto signers_stack = impl::STACK_OF_X509_ptr(signers_stack_ptr, sk_X509_free); + auto signers_stack = impl::STACK_OF_X509_ptr(signers_stack_ptr, impl::SK_X509_free); std::vector signers; for (auto i = 0; i < sk_X509_num(signers_stack.get()); ++i) {