diff --git a/virtrust/.keep b/virtrust/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/virtrust/CMakeLists.txt b/virtrust/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..6716957404adec8300978acd1db74a2887357eba --- /dev/null +++ b/virtrust/CMakeLists.txt @@ -0,0 +1,169 @@ +cmake_minimum_required(VERSION 3.14.1) +project(virtrust CXX C) + +option(BUILD_TEST "Enable/Disable tests" On) +option(ENABLE_DOWNLOAD_DEPS "Download Dependencies Automatically" Off) +option(USE_MOCK_TSB_AGENT "Use Mocked Tsb Agent (DO NOT USE IN PRODUCTION)" Off) + +set(USER_DEPS_DIR + "${PROJECT_SOURCE_DIR}/external" + CACHE + STRING + "Pre-Build Dependency Directory, default to ${PROJECT_SOURCE_DIR}/external" +) + +if (NOT BUILD_TEST AND CMAKE_BUILD_TYPE STREQUAL "Asan") + message(WARNING "CMAKE_BUILD_TYPE is Asan but BUILD_TEST has been set to Off, turn on BUILD_TEST automatically.") + set(BUILD_TEST On) +endif () + +if (NOT BUILD_TEST AND CMAKE_BUILD_TYPE STREQUAL "Coverage") + message(WARNING "CMAKE_BUILD_TYPE is Coverage but BUILD_TEST has been set to Off, turn on BUILD_TEST automatically.") + set(BUILD_TEST On) +endif () + +if (NOT BUILD_TEST AND CMAKE_BUILD_TYPE STREQUAL "Fuzz") + message(WARNING "CMAKE_BUILD_TYPE is Fuzz but BUILD_TEST has been set to Off, turn on BUILD_TEST automatically.") + set(BUILD_TEST On) +endif () + +if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE + "Release" + CACHE + STRING + "Choose the type of build, e.g. Debug, Release, Coverage, Asan, Fuzz" + FORCE) + message(WARNING "CMAKE_BUILD_TYPE not specified, defaulting to '${CMAKE_BUILD_TYPE}'") +endif () + +if (USE_MOCK_TSB_AGENT) + add_compile_definitions(USE_MOCK_TSB_AGENT) + if (CMAKE_BUILD_TYPE STREQUAL "Release") + message(WARNING "USE_MOCK_TSB_AGENT has been set to On while building with Relase, please make sure this is intentional.") + endif () +endif () + +if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE ${PROJECT_BINARY_DIR}) + message("CMAKE_INSTALL_PREFIX not specified, defaulting to '${PROJECT_BINARY_DIR}'") +endif () + +cmake_policy(GET CMP0097 NEW) + +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") +set(CMAKE_EXPORT_COMPILE_COMMANDS On) + +include(GNUInstallDirs) + +set(DEPENDENCY_INSTALL_PREFIX_NAME deps) +set(CMAKE_DEPENDENCY_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/${DEPENDENCY_INSTALL_PREFIX_NAME}) +set(CMAKE_DEPENDENCY_INCLUDEDIR ${CMAKE_DEPENDENCY_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDER}) +set(CMAKE_DEPENDENCY_LIBDIR ${CMAKE_DEPENDENCY_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) +if (ENABLE_DOWNLOAD_DEPS) + set(CMAKE_DEPENDENCY_SRCDIR ${CMAKE_DEPENDENCY_INSTALL_PREFIX}/src) +else () + set(CMAKE_DEPENDENCY_SRCDIR ${USER_DEPS_DIR}) +endif () + +set(CMAKE_C_STANDARD 17) +set(CMAKE_CXX_STANDARD 17) + +set(CMAKE_POSITION_INDEPENDENT_CODE On) + +set(CMAKE_CXX_FLAGS_RELEASE "") +set(CMAKE_CXX_FLAGS_DEBUG "") + +include(SetToolchainFlags) +set_toolchain_flags() + +add_compile_flags("-Wno-missing-field-initializers") +add_compile_flags("-Wno-format-overflow") +add_compile_flags("-Wno-unused-parameter") +add_compile_flags("-Wno-sign-compare") + +get_property( + virtrust_link_options + DIRECTORY + PROPERTY LINK_OPTIONS +) + +message(STATUS "=============================================================") +message(STATUS "User Options and Configurations") +message(STATUS "=============================================================") +message(STATUS "CMake Version :${CMAKE_VERSION}") +message(STATUS "Build Type :${CMAKE_BUILD_TYPE}") +message(STATUS "CPU Type :${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "Compiler :${CMAKE_CXX_COMPILER_ID}") +message(STATUS "Compiler Version :${CMAKE_CXX_COMPILER_VERSION}") +message(STATUS "C Standard :${CMAKE_C_STANDARD}") +message(STATUS "C++ Standard :${CMAKE_CXX_STANDARD}") +message(STATUS "Compiler Flags :\n${CMAKE_CXX_FLAGS}") +message(STATUS "Linker Flags :\n${virtrust_link_options}") +message(STATUS "Exe Linker Flags :\n${CMAKE_EXE_LINKER_FLAGS}") +message(STATUS "CMAKE_INSTALL_PREFIX :${CMAKE_INSTALL_PREFIX}") +message(STATUS "CMAKE_DEPENDENCY_SRCDIR :${CMAKE_DEPENDENCY_SRCDIR}") +message(STATUS "(opt) ENABLE_DOWNLOAD_DEPS :${ENABLE_DOWNLOAD_DEPS}") +message(STATUS "(opt) BUILD_TEST :${BUILD_TEST}") +message(STATUS "(opt) USE_MOCK_TSB_AGENT :${USE_MOCK_TSB_AGENT}") + +include(FetchContent) +include(ExternalProject) + +set(FETCHCONTENT_BASE_DIR ${CMAKE_DEPENDENCY_INSTALL_PREFIX}/src) + +include(ImportLib) +include(deps/openssl) +include(deps/huawei_secure_c) +include(deps/spdlog) +include(deps/tsb_agent) +include(deps/hcom) +include(deps/gtest) +include(deps/rapidjson) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) +set(CMAKE_INCLUDE_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDERDIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}) + +include(AddVirtrustTestIf) + +if (BUILD_TEST) + include(CTest) + enable_testing() + list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure") +endif () + +add_subdirectory(src) + +if (BUILD_TEST) + add_subdirectory(test) +endif () + +if (CMAKE_BUILD_TYPE STREQUAL "Coverage") + find_program(LCOV_PATH lcov) + find_program(GENHTML_PATH genhtml) + if (LCOV_PATH AND GENHTML_PATH) + add_custom_target( + + coverage + COMMAND ${LCOV_PATH} --capture --directory . --exclue "build/*" --exclude "external/*" --exclude "/usr/*" --output-file coverage.info + --ignore-errors mismatch,inconsistent + COMMAND ${GENHTML_PATH} coverage.info --output-directory ${CMAKE_BINARY_DIR}/coverage_report --ignore-errors inconsistent + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating code coverage report..." + VERBATIM) + else () + add_custom_target( + coverage + COMMAND ${CMAKE_COMMAND} -E echo + "lcov and/or genhtml not found. Generating gcov files instead." + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/gcov_report + COMMAND find src -name "*.gcda" -exec gcov -pb {} + + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating gcov coverage report..." + VERBATIM) + endif () +endif () + + diff --git a/virtrust/src/libvirtrustd/CMakeLists.txt b/virtrust/src/libvirtrustd/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..5475756a3da80fb012ca2f066aa92f1f6b775937 --- /dev/null +++ b/virtrust/src/libvirtrustd/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. + +# executable +add_executable(libvirtrustd ${CMAKE_CURRENT_LIST_DIR}/main.cpp + ${CMAKE_CURRENT_LIST_DIR}/utils.cpp) + +target_include_directories(libvirtrustd PRIVATE ${CMAKE_DEPENDENCY_INCLUDEDIR} + $) + +target_link_libraries(libvirtrustd PRIVATE virtrust-shared Deps::rapidjson) \ No newline at end of file diff --git a/virtrust/src/libvirtrustd/defines.h b/virtrust/src/libvirtrustd/defines.h new file mode 100644 index 0000000000000000000000000000000000000000..274907bac79675378b33fa32a25a7705e5031308 --- /dev/null +++ b/virtrust/src/libvirtrustd/defines.h @@ -0,0 +1,23 @@ +/* +* Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. +*/ + +#pragma once + +#include +#include +#include + +namespace virtrust { +// version +constexpr std::string_view LIBVIRTRUSTD_VERSION = "1.0.0"; + +// default values +constexpr std::string_view LIBVIRTRUSTD_SERVER_ADDR = "127.0.0.1"; +constexpr std::string_view LIBVIRTRUSTD_SERVER_ADDR_MASK = "127.0.0.1/8"; +constexpr std::string_view LIBVIRTRUSTD_CA_PATH = "ca-cert.pem"; +constexpr std::string_view LIBVIRTRUSTD_CERT_PATH = "server-cert.pem"; +constexpr std::string_view LIBVIRTRUSTD_SK_PATH = "server-sk.pem"; +constexpr std::string_view LIBVIRTRUSTD_SERVER_PORT = 10086; + +} // namespace virtrust \ No newline at end of file diff --git a/virtrust/src/libvirtrustd/main.cpp b/virtrust/src/libvirtrustd/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..265b1224870d02e082697e320f185bd713e1ca91 --- /dev/null +++ b/virtrust/src/libvirtrustd/main.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. + */ + +#include +#include + +#include +#include +#include + +#include "libvirtrustd/defines.h" +#include "libvirtrustd/utils.h" +#include "spdlog/fmt/bundled/core.h" + +#include "virtrust/base/logger.h" +#include "virtrust/link/link_server.h" + +namespace virtrust { +namespace { +volatile sig_atomic_t g_stopFlag = 0; + +void SignalHandler(int signum) +{ + VIRTRUST_LOG_INFO("Received signal: {}", signum); + if (signum == SIGPIPE) { + VIRTRUST_LOG_INFO("SIGPIPE signal received, ignored."); + + return; + } + g_stopFlag = 1; +} + +void PrintVersion() +{ + fmt::print("{} version: {}\n", progname, LIBVIRTRUST_VERSION); +} + +void PrintUsage(std::string_view progname) +{ + fmt::print("\n" + " USAGE:\n" + " {} [options]\n" + "\n" + " REQUIRED ARGS:\n" + " --config path to config file\n" + "\n" + " OPTIONS:\n" + " --help print this help\n" + " --version show version\n" + "\n", + progname); +} + +int ProcessArgs(int argc, char **argv) +{ + int arg = -1; + int longindex = -1; + std::vector