diff --git a/.github/workflows/android-ci.yml b/.github/workflows/Android.yml similarity index 51% rename from .github/workflows/android-ci.yml rename to .github/workflows/Android.yml index d84d43d31..45a09d4e5 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/Android.yml @@ -1,4 +1,4 @@ -name: CMake-Android +name: Android on: push: @@ -7,8 +7,9 @@ on: branches: [ master ] env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release + # Specifies the available build types (configurations), e.g. Debug, Release, RelWithDebInfo, MinSizeRel, etc. + # https://cmake.org/cmake/help/latest/variable/CMAKE_CONFIGURATION_TYPES.html + CMAKE_CONFIGURATION_TYPES: "Release;Debug;RelWithDebInfo;MinSizeRel" jobs: build: @@ -18,6 +19,7 @@ jobs: strategy: matrix: os: [ ubuntu-latest ] + config: [ Release, Debug, RelWithDebInfo, MinSizeRel ] runs-on: ${{ matrix.os }} steps: @@ -26,20 +28,20 @@ jobs: - uses: nttld/setup-ndk@v1 id: setup-ndk with: - ndk-version: r25 + ndk-version: r27 add-to-path: false - run: echo ${{env.ANDROID_NDK_HOME}} env: ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - - # - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - # run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - - - name: Build - # Build your program with the given configuration - run: mkdir ${{github.workspace}}/build; cd ${{github.workspace}}/build; cmake .. -DCMAKE_TOOLCHAIN_FILE=${{env.ANDROID_NDK_HOME}}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-23;make + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build -G "Ninja Multi-Config" -DCMAKE_TOOLCHAIN_FILE=${{env.ANDROID_NDK_HOME}}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=23 env: ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{ matrix.config }} + + - name: Package + working-directory: ${{github.workspace}}/build + run: cpack -C ${{ matrix.config }} diff --git a/.github/workflows/Desktop.yml b/.github/workflows/Desktop.yml new file mode 100644 index 000000000..0d3c2b139 --- /dev/null +++ b/.github/workflows/Desktop.yml @@ -0,0 +1,40 @@ +name: Desktop + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +env: + # Specifies the available build types (configurations), e.g. Debug, Release, RelWithDebInfo, MinSizeRel, etc. + # https://cmake.org/cmake/help/latest/variable/CMAKE_CONFIGURATION_TYPES.html + CMAKE_CONFIGURATION_TYPES: "Release;Debug;RelWithDebInfo;MinSizeRel" + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + strategy: + matrix: + os: [ windows-latest, ubuntu-latest, macos-latest ] + config: [ Release, Debug, RelWithDebInfo, MinSizeRel ] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v3 + + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build -G "Ninja Multi-Config" + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{ matrix.config }} + + - name: Test + working-directory: ${{github.workspace}}/build + run: ctest --rerun-failed --output-on-failure -C ${{ matrix.config }} -T test + + - name: Package + working-directory: ${{github.workspace}}/build + run: cpack -C ${{ matrix.config }} diff --git a/.github/workflows/cmake-windows.yml b/.github/workflows/cmake-windows.yml deleted file mode 100644 index 7d640b5d4..000000000 --- a/.github/workflows/cmake-windows.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: CMake-windows - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - - runs-on: windows-latest - - steps: - - uses: actions/checkout@v3 - - - name: Configure build for x86 - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: amd64_x86 - - - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}\build -G "NMake Makefiles" -DWIN32=ON; - - - name: Build - working-directory: ${{github.workspace}}\build - # Build your program with the given configuration - run: nmake - - - name: Test - working-directory: ${{github.workspace}}\build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest --rerun-failed --output-on-failure -C ${{env.BUILD_TYPE}} diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml deleted file mode 100644 index 9d30a5131..000000000 --- a/.github/workflows/cmake.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: CMake - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. - # You can convert this to a matrix build if you need cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - strategy: - matrix: - os: [ ubuntu-latest, macos-latest ] - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v3 - - - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - - - name: Build - # Build your program with the given configuration - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Test - working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest --rerun-failed --output-on-failure -C ${{env.BUILD_TYPE}} - diff --git a/.github/workflows/ios.yml b/.github/workflows/iOS.yml similarity index 63% rename from .github/workflows/ios.yml rename to .github/workflows/iOS.yml index 996828c42..da4c944c7 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/iOS.yml @@ -1,4 +1,4 @@ -name: CMake-iOS +name: iOS on: push: @@ -7,12 +7,15 @@ on: branches: [ "master" ] env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release + # Specifies the available build types (configurations), e.g. Debug, Release, RelWithDebInfo, MinSizeRel, etc. + # https://cmake.org/cmake/help/latest/variable/CMAKE_CONFIGURATION_TYPES.html + CMAKE_CONFIGURATION_TYPES: "Release;Debug;RelWithDebInfo;MinSizeRel" jobs: build: - + strategy: + matrix: + config: [ Release, Debug, RelWithDebInfo, MinSizeRel ] runs-on: macos-latest steps: @@ -29,11 +32,11 @@ jobs: - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type run: cmake -B ${{github.workspace}}/build -G Xcode -DCMAKE_TOOLCHAIN_FILE=ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64 -DBUILD_SHARED_LIBS=OFF - name: Build - # Build your program with the given configuration - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + run: cmake --build ${{github.workspace}}/build --config ${{ matrix.config }} + - name: Package + working-directory: ${{github.workspace}}/build + run: cpack -C ${{ matrix.config }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d7d12d92..62f33e3f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,22 +3,22 @@ if (CMAKE_VERSION VERSION_LESS "3.0") else() cmake_minimum_required(VERSION 3.6) endif() -project(GmSSL C) -SET(CMAKE_PROJECT_HOMEPAGE_URL "http://gmssl.org") +file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/include/gmssl/version.h" _gmssl_version_h_contents REGEX "#define GMSSL_VERSION_STR") +string(REGEX MATCH "\"GmSSL [^\"]*" _gmssl_version ${_gmssl_version_h_contents}) +string(REGEX REPLACE ".* ([0-9]+\\.[0-9]+\\.[0-9]+) (.*)" "\\1-\\2" _gmssl_version ${_gmssl_version}) +unset(_gmssl_version_h_contents) + +string(REGEX REPLACE "([0-9]+\.[0-9]+\.[0-9]+).+" "\\1" _gmssl_version_sem "${_gmssl_version}") +project(GmSSL + VERSION ${_gmssl_version_sem} + HOMEPAGE_URL "http://gmssl.org" + LANGUAGES C) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") -include_directories(include) - -if(MSVC) - #add_compile_options(/O2) # conflict with CI /0d (not optimized) -else() - add_compile_options(-O3) -endif() - option(ENABLE_TEST_SPEED "Enable test speed" OFF) @@ -237,7 +237,7 @@ if (ENABLE_TEST_SPEED) endif() -option(ENABLE_SM2_ALGOR_ID_ENCODE_NULL "Enable AlgorithmIdenifier with algorithm sm2sign_with_sm3 encode a NULL object as parameters" OFF) +option(ENABLE_SM2_ALGOR_ID_ENCODE_NULL "Enable Algorithm Identifier with algorithm sm2sign_with_sm3 encode a NULL object as parameters" OFF) if (ENABLE_SM2_ALGOR_ID_ENCODE_NULL) message(STATUS "ENABLE_SM2_ALGOR_ID_ENCODE_NULL is ON") add_definitions(-DENABLE_SM2_ALGOR_ID_ENCODE_NULL) @@ -318,7 +318,7 @@ if (ENABLE_SM4_AVX2) list(FIND src src/sm4.c sm4_index) list(REMOVE_AT src ${sm4_index}) list(INSERT src ${sm4_index} src/sm4_avx2.c) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") + add_compile_options("-march=native") endif() if (ENABLE_SM4_AESNI) @@ -326,7 +326,7 @@ if (ENABLE_SM4_AESNI) list(FIND src src/sm4.c sm4_index) list(REMOVE_AT src ${sm4_index}) list(INSERT src ${sm4_index} src/sm4_aesni.c) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") + add_compile_options("-march=native") endif() @@ -346,7 +346,7 @@ if (ENABLE_SM4_CTR_AESNI_AVX) list(FIND src src/sm4_ctr.c sm4_ctr_index) list(REMOVE_AT src ${sm4_ctr_index}) list(INSERT src ${sm4_ctr_index} src/sm4_ctr_aesni_avx.c) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") + add_compile_options("-march=native") endif() @@ -469,7 +469,7 @@ if (ENABLE_INTEL_RDRAND) message(STATUS "ENABLE_INTEL_RDRAND") add_definitions(-DENABLE_INTEL_RDRAND) list(APPEND src src/rdrand.c) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mrdrnd") + add_compile_options("-mrdrnd") endif() if (ENABLE_INTEL_RDSEED) set(CMAKE_REQUIRED_FLAGS "-rdseed") @@ -479,7 +479,7 @@ if (ENABLE_INTEL_RDRAND) if (HAVE_INTEL_RDSEED) message(STATUS "ENABLE_INTEL_RDSEED") add_definitions(-DENABLE_INTEL_RDSEED) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mrdseed") + add_compile_options("-mrdseed") endif() endif() endif() @@ -518,7 +518,7 @@ if (ENABLE_SKF) src/skf/skf_wisec.c) list(APPEND tools tools/skfutil.c) add_library(skf_dummy SHARED src/skf/skf_dummy.c) - set_target_properties(skf_dummy PROPERTIES VERSION 3.1 SOVERSION 3) + set_target_properties(skf_dummy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) endif() if (ENABLE_SDF) @@ -543,19 +543,23 @@ endif() option(BUILD_SHARED_LIBS "Build using shared libraries" ON) -if (CMAKE_C_COMPILER_ID MATCHES "MSVC") +if (MSVC) message(STATUS "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS") set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # set before add_library endif() add_library(gmssl ${src}) +add_library(GmSSL::${PROJECT_NAME} ALIAS gmssl) - +target_include_directories(gmssl PUBLIC + $ + $ +) if (WIN32) - target_link_libraries(gmssl -lws2_32) + target_link_libraries(gmssl PRIVATE ws2_32) elseif (APPLE) if (ENABLE_SDF) target_link_libraries(gmssl dl) @@ -577,11 +581,41 @@ endif() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") -SET_TARGET_PROPERTIES(gmssl PROPERTIES VERSION 3.1 SOVERSION 3) - - -install(TARGETS gmssl ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) -install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/gmssl DESTINATION include) +include(GNUInstallDirs) +set(GmSSL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + +set(_targets_export_name ${PROJECT_NAME}Targets) +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in + ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${GmSSL_CMAKE_DIR}) +write_basic_package_version_file( + ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) +install( + FILES + ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${GmSSL_CMAKE_DIR}) + +install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/gmssl DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(TARGETS gmssl + EXPORT ${_targets_export_name} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +set_target_properties(gmssl PROPERTIES + VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} + EXPORT_NAME ${PROJECT_NAME}) +export(EXPORT ${_targets_export_name} + NAMESPACE GmSSL:: + FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${_targets_export_name}.cmake") + +install(EXPORT ${_targets_export_name} + NAMESPACE GmSSL:: + DESTINATION ${GmSSL_CMAKE_DIR}) if(UNIX AND NOT APPLE) message(STATUS "Detected Linux, configuring /etc/ld.so.conf.d/gmssl.conf") @@ -601,6 +635,7 @@ if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS") target_link_libraries(gmssl-bin PRIVATE Ws2_32) endif() + include(CTest) enable_testing() foreach(name ${tests}) add_test(NAME ${name} COMMAND ${name}test) @@ -608,13 +643,12 @@ if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS") target_link_libraries (${name}test LINK_PUBLIC gmssl) endforeach() - install(TARGETS gmssl-bin RUNTIME DESTINATION bin) + install(TARGETS gmssl-bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() -if (CMAKE_C_COMPILER_ID MATCHES "MSVC") +if (MSVC) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT gmssl-bin) - set(CMAKE_INSTALL_PREFIX "C:/Program Files/GmSSL") # change by `cmake -DCMAKE_INSTALL_PREFIX=C:\path\to\install` - # run `set path=%path%;C:\Program Files\GmSSL\bin` + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) target_compile_options(gmssl PRIVATE /utf-8) @@ -625,13 +659,15 @@ if (CMAKE_C_COMPILER_ID MATCHES "MSVC") endif() -add_test(NAME sm3_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/sm3_commands.cmake") -add_test(NAME sm2_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/sm2_commands.cmake") -add_test(NAME cert_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/cert_commands.cmake") +add_test(NAME sm3_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/sm3_commands.cmake" WORKING_DIRECTORY "$") +add_test(NAME sm2_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/sm2_commands.cmake" WORKING_DIRECTORY "$") +add_test(NAME cert_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/cert_commands.cmake" WORKING_DIRECTORY "$") +set_tests_properties(sm3_commands sm2_commands cert_commands PROPERTIES ENVIRONMENT "PATH=$:$ENV{PATH}") if(NOT WIN32) - add_test(NAME tlcp_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/tlcp_commands.cmake") - add_test(NAME tls12_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/tls12_commands.cmake") - add_test(NAME tls13_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/tls13_commands.cmake") + add_test(NAME tlcp_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/tlcp_commands.cmake" WORKING_DIRECTORY "$") + add_test(NAME tls12_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/tls12_commands.cmake" WORKING_DIRECTORY "$") + add_test(NAME tls13_commands COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake/tls13_commands.cmake" WORKING_DIRECTORY "$") + set_tests_properties(tlcp_commands tls12_commands tls13_commands PROPERTIES ENVIRONMENT "PATH=$:$ENV{PATH}") endif() # Generate install package with cpack @@ -642,9 +678,11 @@ endif() # Install the STGZ package # ./GmSSL--Linux.sh --prefix=/usr/local # -set(CPACK_PACKAGE_NAME "GmSSL") +# The `-DEV` part is important +string(REGEX REPLACE "([0-9]+\.[0-9]+)\.([0-9]+.*)" "\\2" CPACK_PACKAGE_VERSION_PATCH "${_gmssl_version}") set(CPACK_PACKAGE_VENDOR "GmSSL develop team") -set(CPACK_PACKAGE_VERSION "3.1.2-Dev") -set(CPACK_PACKAGE_DESCRIPTION_FILE ${PROJECT_SOURCE_DIR}/README.md) +set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE) +set(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md) +set(CPACK_GENERATOR TGZ) # default generator, can be overwritten by `cpack -G` set(CPACK_NSIS_MODIFY_PATH ON) include(CPack) diff --git a/INSTALL.md b/INSTALL.md index d4fa16aca..290e5dc32 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -6,22 +6,20 @@ GmSSL当前版本采用CMake构建系统。由于CMake是一个跨平台的编译、安装工具,因此GmSSL可以在大多数主流操作系统上编译、安装和运行。GmSSL项目官方测试了Windows (包括Visual Stduio和Cygwin)、Linux、Mac、Android和iOS这几个主流操作系统上的编译,并通过GitHub的CI工作流对提交的最新代码进行自动化的编译测试。 -和其他基于CMake的开源项目类似,GmSSL的构建过程主要包含配置、编译、测试、安装这几个步骤。以Linux操作系统环境为例,在下载并解压GmSSL源代码后,进入源代码目录,执行如下命令: +和其他基于CMake的开源项目类似,GmSSL的构建过程主要包含配置、编译、测试、安装这几个步骤。在下载并解压GmSSL源代码后,进入源代码目录,执行如下命令: -```bash -mkdir build -cd build -cmake .. -make -make test -sudo make install +```shell +cmake -B build # -G "Ninja Multi-Config" +cmake --build build +ctest --test-dir build +sudo cmake --install build # --prefix /path ``` 就可以完成配置、编译、测试和安装。 -在执行`make`编译成功后,在`build/bin`目录下会生成项目的可执行文件和库文件。对于密码工具来说,在安装使用之前通过`make test`进行测试是重要的一步,如果测试失败,那么不应该使用这个软件。在发生某个测试错误后,可以执行`build/bin`下的具体某个测试命令行,如`sm4test`,这样可以看到具体的错误打印信息。 +在执行`cmake --build`编译成功后,在`build/bin`目录下会生成项目的可执行文件和库文件。对于密码工具来说,在安装使用之前通过`ctest`进行测试是重要的一步,如果测试失败,那么不应该使用这个软件。在发生某个测试错误后,可以执行`build/bin`下的具体某个测试命令行,如`sm4test`,这样可以看到具体的错误打印信息。 -执行`sudo make install`,安装完成后,可以命令行中调用`gmssl`命令行工具。在Linux和Mac环境下,头文件通常被安装在`/usr/local/include/gmssl`目录下,库文件被安装在`/usr/local/lib`目录下。 +执行`sudo cmake --install`,安装完成后,可以命令行中调用`gmssl`命令行工具。在Linux和Mac环境下,头文件通常被安装在`/usr/local/include/gmssl`目录下,库文件被安装在`/usr/local/lib`目录下。 ## 项目源代码 @@ -37,11 +35,9 @@ GmSSL项目的源代码在GitHub中发布和维护。 通过GitHub的CI工作流状态可以判断某次提交是否存在编译错误,目前GmSSL项目中配置了如下编译环境: -* CMake ubuntu-latest -* CMake windows-latest -* CMake macos-latest -* CMake-Android -* CMake-iOS +* Desktop (windows, macos, ubuntu) +* Android +* iOS 通过查看这些CI的状态,可以判断当前代码是否可以在对应操作系统上成功编译。如果当前最新代码无法在某个平台上编译,那么可以选择之前某个通过测试的Commit版本。 @@ -80,9 +76,9 @@ GmSSL包含了针对特定硬件和处理指令集的密码算法优化实现, 处于教学目的,GmSSL源代码中包含了一组不安全的密码算法,这些算法默认情况下不被编译到二进制文件中,可以通过设置`ENABLE_BROKEN_CRYPTO`,在配置阶段启用这些算法,在当前`build`目录中执行: -```bash +```shell cmake .. -DENABLE_BROKEN_CRYPTO=ON -make +cmake --build . ``` 重新编译后,加入GmSSL库文件的算法包括: @@ -96,28 +92,26 @@ make CMake支持通过指定不同的构建系统生成器(Generator),生成不同类型的Makefile。在Windows和Visual Studio环境下,CMake即可以生成常规的Visual Studio解决方案(.sln)文件,在Visual Studio图形界面中完成编译,也可以生成类似于Linux环境下的Makefile文件,在命令行环境下完成编译和测试。 -### 生成Makefile编译 +### 生成NMake编译 (不推荐, 建议使用Ninja或MSBuild) 在安装完Visual Studio之后,在启动菜单栏中会出现Visual Studio菜单目录,其中包含x64 Native Tools Command Prompt for VS 2022等多个终端命令行环境菜单项。 -```bash +```pwsh C:\Program Files\Microsoft Visual Studio\2022\Community>cd /path/to/gmssl -mkdir build -cd build -cmake .. -G "NMake Makefiles" -nmake -nmake test +cmake -B build -G "NMake Makefiles" +# cmake -B build -G "Ninja" +ctest --test-dir build ``` 在编译完成后直接执行安装会报权限错误,这是因为安装过程需要向系统目录中写入文件,而当前打开命令行环境的用户不具备该权限。可以通过右键选择“更多-以管理员身份运行”打开x64 Native Tools Command Prompt for VS 2022终端,执行 -``` -nmake install +```pwsh +cmake --install build ``` 那么`gmssl`命令行程序、头文件和库文件分别被写入`C:/Program Files/GmSSL/bin`、`C:/Program Files/GmSSL/include`、`C:/Program Files/GmSSL/lib`这几个系统目录中。为了能够直接在命令行环境任意目录下执行`gmssl`命令行程序,需要将其安装目录加入到系统路径中,可以执行: -```bash +```batch set path=%path%;C:\Program Files\GmSSL\bin ``` @@ -127,11 +121,10 @@ set path=%path%;C:\Program Files\GmSSL\bin 在安装完Visual Studio之后,在启动菜单栏中会出现Visual Studio菜单目录,其中包含x64 Native Tools Command Prompt for VS 2022等多个终端命令行环境菜单项。 -```bash +```pwsh C:\Program Files\Microsoft Visual Studio\2022\Community>cd /path/to/gmssl -mkdir build -cd build -cmake .. +# 此处`-G`可以不显式指定, 因为cmake在windows上使用MSBuild作为默认generator +cmake -B build # -G "Visual Studio 17 2022" ``` 完成后可以看到CMake在`build`目录下生成了一个`GmSSL.sln`文件和大量的`.vcxproj`文件。 @@ -179,15 +172,13 @@ cp "/cygdrive/c/Users/Guan Zhi/Downloads/GmSSL-master.zip" ~/ ```bash unzip GmSSL-master.zip cd GmSSL-master -mkdir build -cd build -cmake .. -make -make test -make install +cmake -B build +cmake --build build +ctest --test-dir build +cmake --install build # --prefix /path ``` -注意,由于在Cygwin环境中用户本身具有系统权限,因此在执行`make install`时不需要`sudo`。 +注意,由于在Cygwin环境中用户本身具有系统权限,因此在执行`cmake --install`时不需要`sudo`。 在安装完成之后,可以在Cygwin的命令行环境下执行`gmssl`命令行,或者运行源代码`demo`目录下的演示脚本。 @@ -218,7 +209,7 @@ cmake --build . --config Release ```bash mkdir build; cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-23 -make +cmake --build . ``` ## 安装包构建 @@ -258,23 +249,33 @@ make package 在正式发布之前,需要在测试平台上编译、测试、安装。验证`gmssl`命令行可以正确使用,验证`sm3_demo.c`可以正确和`-lgmssl`编译,并且可以正确输出哈希值。 -完成编译和测试后,在`build`目录下执行如下操作 - -``` bash -#!/bin/bash -x -VERSION=3.2.0 -OS=macos -ARCH=arm64 -mkdir build; cd build; cmake ..; make -cmake .. -DBUILD_SHARED_LIBS=OFF; make -mkdir gmssl-$VERSION -cd gmssl-$VERSION -mkdir bin; mkdir lib; mkdir include -cp ../bin/gmssl bin -cp -P ../bin/libgmssl* lib -cp -r ../../include/gmssl include -cd .. -tar czvf gmssl-$VERSION-$OS-$ARCH.tar.gz gmssl-$VERSION +完成编译和测试后,进行编译打包操作。 + +### 生成开发压缩包 + +对于需要打包多模式 (`Debug`, `Release`, `RelWithDebInfo`) 的 (主要为Windows平台,因为`MSVC`的`Debug`/`Release`标准库运行时独立),可以根据以下示例进行操作。示例中脚本需要环境中存在ninja。 + +```shell +cmake -B build -G "Ninja Multi-Config" -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -DBUILD_SHARED_LIBS=OFF -DCMAKE_DEBUG_POSTFIX="d" +cd build +cmake --build . --config Debug +cmake --build . --config Release +cpack -C "Debug;Release" # -G TGZ ``` -其中`cmake .. -DBUILD_SHARED_LIBS=OFF; make`重新生成了静态库,以及和静态库连接的`gmssl`二进制程序,因此最终打包的`gmssl`命令行不依赖系统库之外的动态库。 +其中指定`BUILD_SHARED_LIBS=OFF`重新生成了静态库,以及和静态库连接的`gmssl`二进制程序,因此最终打包的`gmssl`命令行不依赖系统库之外的动态库。 + +### 在CMake中进行依赖 + +GmSSL库较为简单,只需将对应头文件路径与所需链接库配置进target即可。但目前也已支持了Modern CMake的依赖方式。 + +假设我们将以上打包内容解压至`/path/GmSSL-3.1.2-win64` + +```cmake +set(GmSSL_ROOT "/path/GmSSL-3.1.2-win64") +find_package(GmSSL REQUIRED) # required表示必须找到,否则报错 + +# `MyTarget` is created by `add_library` or `add_executable` +target_link_libraries(MyTarget GmSSL::GmSSL) +``` +通过以上配置,即可正常使用GmSSL。 diff --git a/README.md b/README.md index 3afe399a9..7e992a4c8 100644 --- a/README.md +++ b/README.md @@ -23,27 +23,16 @@ GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对 GmSSL 3 采用了cmake构建系统。下载源代码后将其解压缩,进入源码目录,执行: -```bash -mkdir build -cd build -cmake .. -make -make test -sudo make install +```shell +cmake -B build # -G "Ninja Multi-Config" +cmake --build build --config Release +ctest --test-dir build +sudo cmake --install build # --prefix /path ``` -在`make install`完成后,GmSSL会在默认安装目录中安装`gmssl`命令行工具,在头文件目录中创建`gmssl`目录,并且在库目录中安装`libgmssl.a`、`libgmssl.so`等库文件。 +可以手动指定generator,比如`cmake -B build -G Ninja`以指定Ninja作为generator。 -### Visual Studio环境编译 - -在Visual Studio命令提示符下执行: - -```bash -mkdir build -cd build -cmake .. -G "NMake Makefiles" -DWIN32=ON -nmake -``` +在`cmake --install`完成后,GmSSL会在默认安装目录中安装`gmssl`命令行工具,在头文件目录中创建`gmssl`目录,并且在库目录中安装`libgmssl.a`、`libgmssl.so`等库文件。 ## 主要功能 @@ -95,9 +84,9 @@ GmSSL 3.0版本重写了所有的代码并改变了原有API,因此当前GmSSL 性能测试结果是在单核单线程且未修改处理器默认配置下5次测试中取最好效果。由于未关闭睿频或进行大小核设置,这个成绩通常会略高于多核多线程中每核心的平均成绩。 -``` +```shell cmake .. -DENABLE_TEST_SPEED=ON -make +cmake --build . ./bin/sm4test; ./bin/sm3test; ./bin/sm2_signtest; ./bin/sm2_enctest; ./bin/sm9test; ./bin/zuctest ``` diff --git a/cmake/GmSSLConfig.cmake.in b/cmake/GmSSLConfig.cmake.in new file mode 100644 index 000000000..cf0a1690a --- /dev/null +++ b/cmake/GmSSLConfig.cmake.in @@ -0,0 +1,7 @@ +@PACKAGE_INIT@ + +if (NOT TARGET GmSSL::GmSSL) + include(${CMAKE_CURRENT_LIST_DIR}/@_targets_export_name@.cmake) +endif () + +check_required_components(GmSSL) diff --git a/cmake/cert_commands.cmake b/cmake/cert_commands.cmake index f8bda7511..25968071b 100644 --- a/cmake/cert_commands.cmake +++ b/cmake/cert_commands.cmake @@ -1,6 +1,6 @@ execute_process( - COMMAND bin/gmssl sm2keygen -pass P@ssw0rd -out rootcakey.pem + COMMAND gmssl sm2keygen -pass P@ssw0rd -out rootcakey.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -12,7 +12,7 @@ if(NOT EXISTS rootcakey.pem) endif() execute_process( - COMMAND bin/gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 -key rootcakey.pem -pass P@ssw0rd -out rootcacert.pem -key_usage keyCertSign -key_usage cRLSign -ca + COMMAND gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 -key rootcakey.pem -pass P@ssw0rd -out rootcacert.pem -key_usage keyCertSign -key_usage cRLSign -ca RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -28,7 +28,7 @@ if (NOT FILE_CONTENT MATCHES "^-----BEGIN CERTIFICATE-----") endif() execute_process( - COMMAND bin/gmssl sm2keygen -pass P@ssw0rd -out cakey.pem + COMMAND gmssl sm2keygen -pass P@ssw0rd -out cakey.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -40,7 +40,7 @@ if(NOT EXISTS cakey.pem) endif() execute_process( - COMMAND bin/gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN "Sub CA" -key cakey.pem -pass P@ssw0rd -out careq.pem + COMMAND gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN "Sub CA" -key cakey.pem -pass P@ssw0rd -out careq.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -56,7 +56,7 @@ if (NOT FILE_CONTENT MATCHES "^-----BEGIN CERTIFICATE REQUEST-----") endif() execute_process( - COMMAND bin/gmssl reqsign -in careq.pem -days 365 -key_usage keyCertSign -path_len_constraint 0 -cacert rootcacert.pem -key rootcakey.pem -pass P@ssw0rd -out cacert.pem -ca + COMMAND gmssl reqsign -in careq.pem -days 365 -key_usage keyCertSign -path_len_constraint 0 -cacert rootcacert.pem -key rootcakey.pem -pass P@ssw0rd -out cacert.pem -ca RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -68,7 +68,7 @@ if(NOT EXISTS cacert.pem) endif() execute_process( - COMMAND bin/gmssl sm2keygen -pass P@ssw0rd -out signkey.pem + COMMAND gmssl sm2keygen -pass P@ssw0rd -out signkey.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -80,7 +80,7 @@ if(NOT EXISTS signkey.pem) endif() execute_process( - COMMAND bin/gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key signkey.pem -pass P@ssw0rd -out signreq.pem + COMMAND gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key signkey.pem -pass P@ssw0rd -out signreq.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -92,7 +92,7 @@ if(NOT EXISTS signreq.pem) endif() execute_process( - COMMAND bin/gmssl reqsign -in signreq.pem -days 365 -key_usage digitalSignature -cacert cacert.pem -key cakey.pem -pass P@ssw0rd -out signcert.pem + COMMAND gmssl reqsign -in signreq.pem -days 365 -key_usage digitalSignature -cacert cacert.pem -key cakey.pem -pass P@ssw0rd -out signcert.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -104,7 +104,7 @@ if(NOT EXISTS signcert.pem) endif() execute_process( - COMMAND bin/gmssl sm2keygen -pass P@ssw0rd -out enckey.pem + COMMAND gmssl sm2keygen -pass P@ssw0rd -out enckey.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -116,7 +116,7 @@ if(NOT EXISTS enckey.pem) endif() execute_process( - COMMAND bin/gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key enckey.pem -pass P@ssw0rd -out encreq.pem + COMMAND gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key enckey.pem -pass P@ssw0rd -out encreq.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -128,7 +128,7 @@ if(NOT EXISTS encreq.pem) endif() execute_process( - COMMAND bin/gmssl reqsign -in encreq.pem -days 365 -key_usage keyEncipherment -cacert cacert.pem -key cakey.pem -pass P@ssw0rd -out enccert.pem + COMMAND gmssl reqsign -in encreq.pem -days 365 -key_usage keyEncipherment -cacert cacert.pem -key cakey.pem -pass P@ssw0rd -out enccert.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) diff --git a/cmake/sm2_commands.cmake b/cmake/sm2_commands.cmake index 58d42f557..b263ffe97 100644 --- a/cmake/sm2_commands.cmake +++ b/cmake/sm2_commands.cmake @@ -1,5 +1,5 @@ execute_process( - COMMAND bin/gmssl sm2keygen -pass P@ssw0rd -out sm2.pem -pubout sm2pub.pem + COMMAND gmssl sm2keygen -pass P@ssw0rd -out sm2.pem -pubout sm2pub.pem RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -17,7 +17,7 @@ set(SECRET_MESSAGE "Secret message") file(WRITE message.txt "${SECRET_MESSAGE}") execute_process( - COMMAND bin/gmssl sm2sign -key sm2.pem -pass P@ssw0rd -in message.txt -out sm2.sig + COMMAND gmssl sm2sign -key sm2.pem -pass P@ssw0rd -in message.txt -out sm2.sig RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR ) @@ -27,7 +27,7 @@ endif() execute_process( - COMMAND bin/gmssl sm2verify -pubkey sm2pub.pem -in message.txt -sig sm2.sig + COMMAND gmssl sm2verify -pubkey sm2pub.pem -in message.txt -sig sm2.sig RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR OUTPUT_VARIABLE TEST_STDOUT @@ -42,7 +42,7 @@ endif() execute_process( - COMMAND bin/gmssl sm2encrypt -pubkey sm2pub.pem -in message.txt -out sm2.der + COMMAND gmssl sm2encrypt -pubkey sm2pub.pem -in message.txt -out sm2.der RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR OUTPUT_VARIABLE TEST_STDOUT @@ -52,7 +52,7 @@ if(NOT ${TEST_RESULT} EQUAL 0) endif() execute_process( - COMMAND bin/gmssl sm2decrypt -key sm2.pem -pass P@ssw0rd -in sm2.der + COMMAND gmssl sm2decrypt -key sm2.pem -pass P@ssw0rd -in sm2.der RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR OUTPUT_VARIABLE TEST_STDOUT diff --git a/cmake/sm3_commands.cmake b/cmake/sm3_commands.cmake index 94aaae1bc..508fff557 100644 --- a/cmake/sm3_commands.cmake +++ b/cmake/sm3_commands.cmake @@ -1,5 +1,5 @@ execute_process( - COMMAND bin/gmssl sm3 -in_str abc + COMMAND gmssl sm3 -in_str abc RESULT_VARIABLE TEST_RESULT ERROR_VARIABLE TEST_STDERR OUTPUT_VARIABLE TEST_OUTPUT diff --git a/cmake/tlcp_commands.cmake b/cmake/tlcp_commands.cmake index 8f2e7eb3b..dd0da24ec 100644 --- a/cmake/tlcp_commands.cmake +++ b/cmake/tlcp_commands.cmake @@ -17,13 +17,13 @@ endif() if(WIN32) execute_process( - COMMAND cmd /c "start /B bin\\gmssl tlcp_server -port 4433 -cert tlcp_server_certs.pem -key signkey.pem -pass P@ssw0rd -ex_key enckey.pem -ex_pass P@ssw0rd > tlcp_server.log 2>&1" + COMMAND cmd /c "start /B gmssl tlcp_server -port 4433 -cert tlcp_server_certs.pem -key signkey.pem -pass P@ssw0rd -ex_key enckey.pem -ex_pass P@ssw0rd > tlcp_server.log 2>&1" RESULT_VARIABLE SERVER_RESULT TIMEOUT 5 ) else() execute_process( - COMMAND bash -c "sudo nohup bin/gmssl tlcp_server -port 4433 -cert tlcp_server_certs.pem -key signkey.pem -pass P@ssw0rd -ex_key enckey.pem -ex_pass P@ssw0rd > tlcp_server.log 2>&1 &" + COMMAND bash -c "nohup gmssl tlcp_server -port 4433 -cert tlcp_server_certs.pem -key signkey.pem -pass P@ssw0rd -ex_key enckey.pem -ex_pass P@ssw0rd > tlcp_server.log 2>&1 &" RESULT_VARIABLE SERVER_RESULT TIMEOUT 5 ) @@ -37,13 +37,13 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 2) if (WIN32) execute_process( - COMMAND cmd /c "start /B bin\\gmssl tlcp_client -host localhost -port 4433 -cacert rootcacert.pem > tlcp_client.log 2>&1" + COMMAND cmd /c "start /B gmssl tlcp_client -host localhost -port 4433 -cacert rootcacert.pem > tlcp_client.log 2>&1" RESULT_VARIABLE CLIENT_RESULT TIMEOUT 5 ) else() execute_process( - COMMAND bash -c "bin/gmssl tlcp_client -host localhost -port 4433 -cacert rootcacert.pem > tlcp_client.log 2>&1" + COMMAND bash -c "gmssl tlcp_client -host localhost -port 4433 -cacert rootcacert.pem > tlcp_client.log 2>&1" RESULT_VARIABLE CLIENT_RESULT TIMEOUT 5 ) @@ -57,6 +57,6 @@ if(${FOUND_INDEX} EQUAL -1) endif() execute_process( - COMMAND sudo pkill -f "gmssl" + COMMAND pkill -f "gmssl" ) diff --git a/cmake/tls12_commands.cmake b/cmake/tls12_commands.cmake index 2c97c4b19..954092f71 100644 --- a/cmake/tls12_commands.cmake +++ b/cmake/tls12_commands.cmake @@ -16,7 +16,7 @@ if(NOT EXISTS enckey.pem) endif() execute_process( - COMMAND bash -c "sudo nohup bin/gmssl tls12_server -port 4333 -cert tls_server_certs.pem -key signkey.pem -pass P@ssw0rd > tls12_server.log 2>&1 &" + COMMAND bash -c "nohup gmssl tls12_server -port 4333 -cert tls_server_certs.pem -key signkey.pem -pass P@ssw0rd > tls12_server.log 2>&1 &" RESULT_VARIABLE SERVER_RESULT TIMEOUT 5 ) @@ -27,7 +27,7 @@ endif() execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 2) execute_process( - COMMAND bash -c "bin/gmssl tls12_client -host localhost -port 4333 -cacert rootcacert.pem > tls12_client.log 2>&1" + COMMAND bash -c "gmssl tls12_client -host localhost -port 4333 -cacert rootcacert.pem > tls12_client.log 2>&1" RESULT_VARIABLE CLIENT_RESULT TIMEOUT 5 ) @@ -40,6 +40,6 @@ if(${FOUND_INDEX} EQUAL -1) endif() execute_process( - COMMAND sudo pkill -f "gmssl" + COMMAND pkill -f "gmssl" ) diff --git a/cmake/tls13_commands.cmake b/cmake/tls13_commands.cmake index 0e75ea0f3..c2d436282 100644 --- a/cmake/tls13_commands.cmake +++ b/cmake/tls13_commands.cmake @@ -16,7 +16,7 @@ if(NOT EXISTS enckey.pem) endif() execute_process( - COMMAND bash -c "sudo nohup bin/gmssl tls13_server -port 4443 -cert tls_server_certs.pem -key signkey.pem -pass P@ssw0rd > tls13_server.log 2>&1 &" + COMMAND bash -c "nohup gmssl tls13_server -port 4443 -cert tls_server_certs.pem -key signkey.pem -pass P@ssw0rd > tls13_server.log 2>&1 &" RESULT_VARIABLE SERVER_RESULT TIMEOUT 5 ) @@ -27,7 +27,7 @@ endif() execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 2) execute_process( - COMMAND bash -c "bin/gmssl tls13_client -host localhost -port 4443 -cacert rootcacert.pem > tls13_client.log 2>&1" + COMMAND bash -c "gmssl tls13_client -host localhost -port 4443 -cacert rootcacert.pem > tls13_client.log 2>&1" RESULT_VARIABLE CLIENT_RESULT TIMEOUT 5 ) @@ -40,6 +40,6 @@ if(${FOUND_INDEX} EQUAL -1) endif() execute_process( - COMMAND sudo pkill -f "gmssl" + COMMAND pkill -f "gmssl" ) diff --git a/include/gmssl/dylib.h b/include/gmssl/dylib.h index c2aefaa82..3435e8809 100644 --- a/include/gmssl/dylib.h +++ b/include/gmssl/dylib.h @@ -19,7 +19,7 @@ extern "C" { #endif -#ifdef WIN32 +#ifdef _WIN32 #include diff --git a/include/gmssl/socket.h b/include/gmssl/socket.h index 926d22b7b..0354fac1a 100644 --- a/include/gmssl/socket.h +++ b/include/gmssl/socket.h @@ -21,7 +21,7 @@ extern "C" { -#ifdef WIN32 +#ifdef _WIN32 #pragma comment (lib, "Ws2_32.lib") #pragma comment (lib, "Mswsock.lib") #pragma comment (lib, "AdvApi32.lib") diff --git a/include/gmssl/version.h b/include/gmssl/version.h index c516bd8b9..6e84c8959 100644 --- a/include/gmssl/version.h +++ b/include/gmssl/version.h @@ -16,10 +16,8 @@ extern "C" { #endif - -// Also update CPACK_PACKAGE_VERSION in CMakeLists.txt -#define GMSSL_VERSION_NUM 30102 -#define GMSSL_VERSION_STR "GmSSL 3.1.2 Dev" +#define GMSSL_VERSION_NUM 30102 +#define GMSSL_VERSION_STR "GmSSL 3.1.2 Dev" int gmssl_version_num(void); const char *gmssl_version_str(void); diff --git a/src/file.c b/src/file.c index 149724ccb..78fdbc555 100644 --- a/src/file.c +++ b/src/file.c @@ -21,7 +21,7 @@ int file_size(FILE *fp, size_t *size) int fd; struct stat st; -#ifdef WIN32 +#ifdef _WIN32 fd = _fileno(fp); #else fd = fileno(fp); diff --git a/src/sgd.h b/src/sgd.h index 6656178e0..bd747c607 100644 --- a/src/sgd.h +++ b/src/sgd.h @@ -56,14 +56,14 @@ #define SGD_ZUC_EIA3 (SGD_ZUC|SGD_EIA3) /* public key usage */ -#define SGD_PK_SIGN 0x0100 // FIXME: correct? -#define SGD_PK_DH 0x0200 // FIXME: correct? -#define SGD_PK_ENC 0x0400 // FIXME: correct? +#define SGD_PK_SIGN 0x0100 // FIXME: correct? +#define SGD_PK_DH 0x0200 // FIXME: correct? +#define SGD_PK_ENC 0x0400 // FIXME: correct? /* public key types */ #define SGD_RSA 0x00010000 -#define SGD_RSA_SIGN (SGD_RSA|SGD_PK_SIGN) // FIXME: correct? -#define SGD_RSA_ENC (SGD_RSA|SGD_PK_ENC) // FIXME: correct? +#define SGD_RSA_SIGN (SGD_RSA|SGD_PK_SIGN) // FIXME: correct? +#define SGD_RSA_ENC (SGD_RSA|SGD_PK_ENC) // FIXME: correct? #define SGD_SM2 0x00020100 #define SGD_SM2_1 0x00020200 // SM2 Signature Scheme #define SGD_SM2_2 0x00020400 // SM2 Key Exchange Protocol @@ -275,7 +275,7 @@ typedef int32_t SGD_BOOL; #define SGD_STATUS_READY 0x00000202 #define SGD_STATUS_EXCEPTION 0x00000203 -#ifdef WIN32 +#ifdef _WIN32 #include #else typedef signed char INT8; @@ -318,7 +318,7 @@ typedef HANDLE HCONTAINER; #define TRUE 0x00000001 #endif -#ifdef WIN32 +#ifdef _WIN32 #define DEVAPI __stdcall #else #define DEVAPI diff --git a/src/socket.c b/src/socket.c index e785a9265..ff5e4d576 100644 --- a/src/socket.c +++ b/src/socket.c @@ -16,7 +16,7 @@ #include -#ifdef WIN32 +#ifdef _WIN32 int tls_socket_lib_init(void) { WORD wVersion = MAKEWORD(2, 2); diff --git a/src/tls.c b/src/tls.c index d89dc1eee..0c3574a8c 100644 --- a/src/tls.c +++ b/src/tls.c @@ -2319,14 +2319,15 @@ void tls_cleanup(TLS_CONNECT *conn) int tls_set_socket(TLS_CONNECT *conn, tls_socket_t sock) { - int flags = 0; -#ifdef WIN32 - if( ioctlsocket(sock, FIONBIO, &flags) != 0) { +#ifdef _WIN32 + u_long flags = 0; + if (ioctlsocket(sock, FIONBIO, &flags) != 0) { error_puts("socket in non-blocking mode"); //nginx will pass a socket in non-blocking mode //return -1; } #else + int flags = 0; if ((flags = fcntl(sock, F_GETFL)) == -1) { error_print(); perror("fcntl error"); diff --git a/tools/tlcp_client.c b/tools/tlcp_client.c index 873774351..91b3b0da8 100644 --- a/tools/tlcp_client.c +++ b/tools/tlcp_client.c @@ -256,7 +256,7 @@ int tlcp_client_main(int argc, char *argv[]) FD_SET(conn.sock, &fds); if (read_stdin) { -#ifdef WIN32 +#ifdef _WIN32 if (fgets(buf, sizeof(buf), stdin)) { if (tls_send(&conn, (uint8_t *)buf, strlen(buf), &len) != 1) { fprintf(stderr, "%s: send error\n", prog); @@ -266,9 +266,9 @@ int tlcp_client_main(int argc, char *argv[]) if (!feof(stdin)) { fprintf(stderr, "%s: length of input line exceeds buffer size\n", prog); goto end; - } + } read_stdin = 0; - } + } #else FD_SET(STDIN_FILENO, &fds); // in POSIX, first arg type is int #endif @@ -278,7 +278,7 @@ int tlcp_client_main(int argc, char *argv[]) goto end; } -#ifdef WIN32 +#ifdef _WIN32 #else if (read_stdin && FD_ISSET(STDIN_FILENO, &fds)) { diff --git a/tools/tls12_client.c b/tools/tls12_client.c index 5041dea27..2983ab218 100644 --- a/tools/tls12_client.c +++ b/tools/tls12_client.c @@ -159,7 +159,7 @@ int tls12_client_main(int argc, char *argv[]) FD_ZERO(&fds); FD_SET(conn.sock, &fds); -#ifdef WIN32 +#ifdef _WIN32 #else FD_SET(fileno(stdin), &fds); #endif @@ -178,14 +178,13 @@ int tls12_client_main(int argc, char *argv[]) fwrite(buf, 1, len, stdout); fflush(stdout); - // FIXME: change `tls_recv` API or functions + // FIXME: change `tls_recv` API or functions if (conn.datalen == 0) { break; } } - } -#ifdef WIN32 +#ifdef _WIN32 #else if (FD_ISSET(fileno(stdin), &fds)) { memset(send_buf, 0, sizeof(send_buf)); diff --git a/tools/tls13_client.c b/tools/tls13_client.c index ee94ed79d..4150138eb 100644 --- a/tools/tls13_client.c +++ b/tools/tls13_client.c @@ -93,7 +93,7 @@ int tls13_client_main(int argc, char *argv[]) return -1; } if (!(hp = gethostbyname(host))) { - //herror("tls13_client: '-host' invalid"); + //herror("tls13_client: '-host' invalid"); goto end; } @@ -157,7 +157,7 @@ int tls13_client_main(int argc, char *argv[]) FD_ZERO(&fds); FD_SET(conn.sock, &fds); -#ifdef WIN32 +#ifdef _WIN32 #else FD_SET(fileno(stdin), &fds); #endif @@ -177,14 +177,13 @@ int tls13_client_main(int argc, char *argv[]) fwrite(buf, 1, len, stdout); fflush(stdout); - // FIXME: change tls13_recv API + // FIXME: change tls13_recv API if (conn.datalen == 0) { break; } } - } -#ifdef WIN32 +#ifdef _WIN32 #else if (FD_ISSET(fileno(stdin), &fds)) { memset(send_buf, 0, sizeof(send_buf));