openHiTLS 从源码到命令行工具构建(官方版)
01
一、环境信息
操作系统
┌──(root㉿kali)-[/home/kali/M]
└─# cat /etc/os-release
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
VERSION_ID="2026.3"
VERSION="2026.3"
VERSION_CODENAME=kali-rolling
ID=kali
ID_LIKE=debian
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"
ANSI_COLOR="1;31"
┌──(root㉿kali)-[/home/kali/M]
└─# uname -a
Linux kali 7.0.12+kali-amd64 #1 SMP PREEMPT_DYNAMIC Kali 7.0.12-2kali1 (2026-06-18) x86_64 GNU/Linux
工作目录
所有操作在 /home/kali/M 下进行。
工具链
以下为每个工具的完整检测命令与输出。本环境所有工具已预装。
1.3.1 GCC 编译器
┌──(root㉿kali)-[/home/kali/M]
└─# which gcc
/usr/bin/gcc
┌──(root㉿kali)-[/home/kali/M]
└─# gcc --version
gcc (Debian 15.3.0-2) 15.3.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
┌──(root㉿kali)-[/home/kali/M]
└─# gcc -dumpmachine
x86_64-linux-gnu
编译器架构 x86_64-linux-gnu,后续 configure.py --bits 64 --asm_type x8664 与此对应。
1.3.2 CMake 构建系统
┌──(root㉿kali)-[/home/kali/M]
└─# which cmake
/usr/bin/cmake
┌──(root㉿kali)-[/home/kali/M]
└─# cmake --version
cmake version 4.3.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).
1.3.3 Python 3
┌──(root㉿kali)-[/home/kali/M]
└─# which python3
/usr/bin/python3
┌──(root㉿kali)-[/home/kali/M]
└─# python3 --version
Python 3.13.14
configure.py 使用 python3 解释器,Python 3.6+ 即可。
1.3.4 Git
┌──(root㉿kali)-[/home/kali/M]
└─# which git
/usr/bin/git
┌──(root㉿kali)-[/home/kali/M]
└─# git --version
git version 2.53.0
1.3.5 GNU Make
┌──(root㉿kali)-[/home/kali/M]
└─# which make
/usr/bin/make
┌──(root㉿kali)-[/home/kali/M]
└─# make --version
GNU Make 4.4.1
为 x86_64-pc-linux-gnu 编译
Copyright (C) 1988-2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
1.3.6 tcpdump
┌──(root㉿kali)-[/home/kali/M]
└─# which tcpdump
/usr/bin/tcpdump
┌──(root㉿kali)-[/home/kali/M]
└─# tcpdump --version
tcpdump version 4.99.6
libpcap version 1.10.6 (64-bit time_t, with TPACKET_V3)
OpenSSL 3.6.3 9 Jun 2026
64-bit build, 64-bit time_t
1.3.7 一键安装(本环境无需执行)
如果上述任一工具缺失,执行:
sudo apt-get update && sudo apt-get install -y cmake gcc make python3 git tcpdump
预期输出:
┌──(root㉿kali)-[/home/kali/M]
└─# sudo apt-get update && sudo apt-get install -y cmake gcc make python3 git tcpdump
命中:1 https://mirrors.sjtug.sjtu.edu.cn/kali kali-rolling InRelease
命中:2 https://dl.google.com/linux/chrome-stable/deb stable InRelease
正在读取软件包列表... 完成
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
cmake 已经是最新版 (4.3.4-1)。
gcc 已经是最新版 (4:15.2.0-5)。
make 已经是最新版 (4.4.1-3)。
python3 已经是最新版 (3.13.9-3+b1)。
git 已经是最新版 (1:2.53.0-1)。
tcpdump 已经是最新版 (4.99.6-2)。
正在解析依赖... 完成
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
终端规划
| tcpdump |
每个新终端必须先执行:
export LD_LIBRARY_PATH=/home/kali/M/openhitls/build:$LD_LIBRARY_PATH
02
二、获取源码与证书体系
克隆仓库
┌──(root㉿kali)-[/home/kali/M]
└─# cd /home/kali/M
┌──(root㉿kali)-[/home/kali/M]
└─# git clone -b openhitls-0.3 https://gitcode.com/openHiTLS/openhitls
正克隆到 'openhitls'...
警告:重定向到 https://gitcode.com/openHiTLS/openhitls.git/
remote: Enumerating objects: 42727, done.
remote: Counting objects: 100% (8774/8774), done.
remote: Compressing objects: 100% (1418/1418), done.
remote: Total 42727 (delta 7945), reused 7485 (delta 7342), pack-reused 33953 (from 1)
接收对象中: 100% (42727/42727), 62.19 MiB | 10.33 MiB/s, 完成.
处理 delta 中: 100% (28358/28358), 完成.
确认分支与 HEAD
┌──(root㉿kali)-[/home/kali/M]
└─# cd /home/kali/M/openhitls
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# git checkout openhitls-0.3
已经位于 'openhitls-0.3'
您的分支与上游分支 'origin/openhitls-0.3' 一致。
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# git log --oneline -3
064ed65c (HEAD -> openhitls-0.3, origin/openhitls-0.3) fix(codecskey): preserve input buffer during PEM key decoding
e6ff6293 (tag: openhitls-0.3.4-alpha1) feat:Rename slhdsa algorithm internal interface
feda3bc5 update version to openHiTLS 0.3.4 release
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# git branch -vv
* openhitls-0.3 064ed65c [origin/openhitls-0.3] fix(codecskey): preserve input buffer during PEM key decoding
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# git describe --tags --always
openhitls-0.3.4-alpha1-1-g064ed65c
源码关键目录结构
/home/kali/M/openhitls/
├── apps/src/ # 命令行工具源码 (4 个 .c 文件)
│ ├── app_server.c # 服务端主程序
│ │ L119-159: g_serverOptions[] 参数定义表(-noverify at L133)
│ │ L241-244: HandleServerNoVerify() 设置 verifyClient=false
│ │ L299-319: g_serverOptHandleFuncMap[] 参数→处理函数映射
│ ├── app_client.c # 客户端主程序
│ ├── app_tls_common.c # 公共配置模块
│ │ L408-498: ConfCertVerification() 证书验证配置
│ │ L470: HITLS_CFG_SetVerifyNoneSupport() 无验证模式开关
│ │ L475: HITLS_CFG_SetClientVerifySupport() 客户端证书需求开关
│ │ L480-486: 条件禁止空证书 (if verifyPeer)
│ └── hitls.c # 命令行入口 (main 函数)
├── include/tls/hitls_error.h # 完整错误码枚举
│ L165: HITLS_MSG_HANDLE_NO_PEER_CERTIFIACATE (0x2040017)
│ ↑ 注意:此常量名中 "CERTIFIACATE" 系源码拼写错误(应为 CERTIFICATE),文档保留原始拼写
│ L340: HITLS_CERT_ERR_ENCODE (0x20c0029)
├── tls/
│ ├── handshake/send/src/send_server_key_exchange.c
│ │ L291-302: #ifdef HITLS_TLS_FEATURE_CERT_MODE_CLIENT_VERIFY
│ │ 常规 TLS CertificateRequest 判断(-noverify 可绕过)
│ │ L305-310: #ifdef HITLS_TLS_PROTO_TLCP11
│ │ TLCP ECDHE 强制 CertificateRequest(-noverify 无法绕过)
│ │ L311: 默认路径 → ServerHelloDone
│ ├── handshake/parse/src/parse_server_key_exchange.c
│ │ L494-498: SAL_CERT_ClntGmEncodeEncCert() 调用 + 失败 → 0x20c0029
│ ├── handshake/recv/src/recv_certificate.c
│ │ L340-354: 空证书处理 → 0x2040017
│ └── cert/cert_adapt/cert.c
│ L677-710: EncodeEncCert() 静态函数
│ L679: cert==NULL → return NULL ← 单向失败的物理根因
│ L734-736: SAL_CERT_ClntGmEncodeEncCert() 公开接口
├── testcode/testdata/tls/certificate/der/sm2_with_userid/
├── testcode/testdata/tls/certificate/der/sm2_cert/ # 备用证书(纯PKCS #8私钥)
├── platform/Secure_C/ # securec 安全 C 库(39 个源文件)
├── configure.py # 构建配置入口 Python 脚本
├── CMakeLists.txt
└── build/ # 编译输出目录
证书文件详解(sm2_with_userid)
TLCP 使用 SM2 双证书体系(签名证书 + 加密证书),对应 GM/T 0024 国密 TLS 规范。
$ cd /home/kali/M/openhitls/testcode/testdata/tls/certificate/der/sm2_with_userid
$ ls -lh
total 88K
-rw-r--r-- 1 kali kali 843 Jul 4 07:13 ca.crt
-rw-r--r-- 1 kali kali 582 Jul 4 07:13 ca.der
-rw-r--r-- 1 kali kali 241 Jul 4 07:13 ca.key
-rw-r--r-- 1 kali kali 121 Jul 4 07:13 ca.key.der
-rw-r--r-- 1 kali kali 532 Jul 4 07:13 enc.der
-rw-r--r-- 1 kali kali 2.4K Jul 4 07:13 enc.crt
-rw-r--r-- 1 kali kali 316 Jul 4 07:13 enc.key
-rw-r--r-- 1 kali kali 121 Jul 4 07:13 enc.key.der
-rw-r--r-- 1 kali kali 778 Jul 4 07:13 enc22.crt
-rw-r--r-- 1 kali kali 532 Jul 4 07:13 enc22.der
-rw-r--r-- 1 kali kali 316 Jul 4 07:13 enc22.key
-rw-r--r-- 1 kali kali 121 Jul 4 07:13 enc22.key.der
-rw-r--r-- 1 kali kali 794 Jul 4 07:13 inter.crt
-rw-r--r-- 1 kali kali 546 Jul 4 07:13 inter.der
-rw-r--r-- 1 kali kali 533 Jul 4 07:13 sign.der
-rw-r--r-- 1 kali kali 2.4K Jul 4 07:13 sign.crt
-rw-r--r-- 1 kali kali 316 Jul 4 07:13 sign.key
-rw-r--r-- 1 kali kali 121 Jul 4 07:13 sign.key.der
-rw-r--r-- 1 kali kali 782 Jul 4 07:13 sign22.crt
-rw-r--r-- 1 kali kali 535 Jul 4 07:13 sign22.der
-rw-r--r-- 1 kali kali 316 Jul 4 07:13 sign22.key
-rw-r--r-- 1 kali kali 121 Jul 4 07:13 sign22.key.der
文件分类与格式:
| ca.crt | |||
| ca.der | |||
| ca.key | |||
| ca.key.der | |||
| inter.crt | |||
| inter.der | |||
| sign.crt | |||
| sign.key | |||
| sign.der | |||
| sign.key.der | |||
| sign22.crt | |||
| sign22.der | |||
| sign22.key | |||
| enc.crt | |||
| enc.key | |||
| enc.der | |||
| enc.key.der | |||
| enc22.crt | |||
| enc22.der | |||
| enc22.key |
.crt 文件内部结构(以 sign.crt 为例):
Certificate: ← OpenSSL x509 -text 人类可读输出
Data:
Version: 3 (0x2)
Signature Algorithm: 1.2.156.10197.1.501 ← SM2 with SM3 OID
Issuer: C=CN, O=openHiTLS, OU=testsign, CN=testca
Subject: C=CN, O=openHiTLS, OU=testsign, CN=testserver
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey ← SM2 公钥
...
-----BEGIN CERTIFICATE----- ← hitls 的 PEM 解析器实际解析此部分
MIICETCCAbegAwIBAgIBAjAMBggqgR...
-----END CERTIFICATE-----
hitls 内置 PEM 解析器(hitls_bsl/pem.c),自动跳过前缀文本并解析 PEM block。
双证书用途区分:
| sign.crt | OU=testsign | ||
| enc.crt | OU=testenc |
备用证书(sm2_cert)
除 sm2_with_userid 外,源码还提供了另一套证书示例,位于 sm2_cert 目录,使用纯 PKCS #8 格式私钥,可替代前述证书进行测试。
$ cd /home/kali/M/openhitls/testcode/testdata/tls/certificate/der/sm2_cert
$ ls -1 *.pem
# 以下注释为人工添加,非 ls 命令实际输出:
root.pem # 根 CA 证书
intCa.pem # 中间 CA 证书
server_sign.pem # 服务端签名证书
server_sign.key.pem # 服务端签名私钥 (纯PKCS #8)
server_enc.pem # 服务端加密证书
server_enc.key.pem # 服务端加密私钥 (纯PKCS #8)
client_sign.pem # 客户端签名证书
client_sign.key.pem # 客户端签名私钥 (纯PKCS #8)
client_enc.pem # 客户端加密证书
client_enc.key.pem # 客户端加密私钥 (纯PKCS #8)
文件说明:
| root.pem | ||
| intCa.pem | ||
| server_sign.pem | ||
| server_sign.key.pem | ||
| server_enc.pem | ||
| server_enc.key.pem | ||
| client_sign.pem | ||
| client_sign.key.pem | ||
| client_enc.pem | ||
| client_enc.key.pem |
创建证书链文件:
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# cd /home/kali/M/openhitls/testcode/testdata/tls/certificate/der/sm2_cert
┌──(root㉿kali)-[/home/…/tls/certificate/der/sm2_cert]
└─# cat root.pem intCa.pem > chain.pem
证书链验证:
export LD_LIBRARY_PATH=/home/kali/M/openhitls/build:$LD_LIBRARY_PATH
/home/kali/M/openhitls/build/hitls verify -CAfile chain.pem -nokeyusage server_sign.pem
# 输出: OK
/home/kali/M/openhitls/build/hitls verify -CAfile chain.pem -nokeyusage server_enc.pem
# 输出: OK
私钥格式注意:
$ head -5 server_sign.key.pem
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg...
sm2_cert 目录的命令行参数对照(与 sm2_with_userid 对比):
| -CAfile | ca.crt | chain.pem |
| -chainCAfile | inter.crt | |
| -tlcp_sign_cert | sign.crt | server_sign.pem |
| -tlcp_sign_key | sign.key | server_sign.key.pem |
| -tlcp_enc_cert | enc.crt | server_enc.pem |
| -tlcp_enc_key | enc.key | server_enc.key.pem |
03
三、编译构建
克隆并编译安全函数库 Secure_C
(非子模块,需手动克隆到 platform/ 目录)
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# cd /home/kali/M/openhitls
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# git clone https://gitee.com/openeuler/libboundscheck platform/Secure_C
正克隆到 'platform/Secure_C'...
remote: Enumerating objects: 189, done.
remote: Total 189 (delta 0), reused 0 (delta 0), pack-reused 189 (from 1)
接收对象中: 100% (189/189), 113.63 KiB | 1.42 MiB/s, 完成.
处理 delta 中: 100% (113/113), 完成.
编译 Secure_C 安全库(可选)
注意:configure.py(§3.2)会自动编译 Secure_C 为静态库 libboundscheck.a(39 个 C 源文件)。以下手动编译步骤可选,产物为动态库
libboundscheck.so,两者功能等价。
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# cd /home/kali/M/openhitls/platform/Secure_C
┌──(root㉿kali)-[/home/…/M/openhitls/platform/Secure_C]
└─# make -j$(nproc) 2>&1 | tail -n 10
cc -c src/wcscpy_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wcscpy_s.o
cc -c src/wcsncat_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wcsncat_s.o
cc -c src/wcsncpy_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wcsncpy_s.o
cc -c src/wcstok_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wcstok_s.o
cc -c src/wmemcpy_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wmemcpy_s.o
cc -c src/wmemmove_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wmemmove_s.o
cc -c src/wscanf_s.c -Wall -DNDEBUG -O2 -fPIC -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -Wformat=2 -Wfloat-equal -Wshadow -Wconversion -Wformat-security -Wextra --param ssp-buffer-size=4 -Warray-bounds -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wstrict-overflow=1 -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Iinclude -o obj/wscanf_s.o
mkdir -p lib
cc -shared -o lib/libboundscheck.so obj/fscanf_s.o obj/fwscanf_s.o obj/gets_s.o obj/memcpy_s.o obj/memmove_s.o obj/memset_s.o obj/scanf_s.o obj/securecutil.o obj/secureinput_a.o obj/secureinput_w.o obj/secureprintoutput_a.o obj/secureprintoutput_w.o obj/snprintf_s.o obj/sprintf_s.o obj/sscanf_s.o obj/strcat_s.o obj/strcpy_s.o obj/strncat_s.o obj/strncpy_s.o obj/strtok_s.o obj/swprintf_s.o obj/swscanf_s.o obj/vfscanf_s.o obj/vfwscanf_s.o obj/vscanf_s.o obj/vsnprintf_s.o obj/vsprintf_s.o obj/vsscanf_s.o obj/vswprintf_s.o obj/vswscanf_s.o obj/vwscanf_s.o obj/wcscat_s.o obj/wcscpy_s.o obj/wcsncat_s.o obj/wcsncpy_s.o obj/wcstok_s.o obj/wmemcpy_s.o obj/wmemmove_s.o obj/wscanf_s.o -fPIC -s -Wl,-z,relro,-z,now,-z,noexecstack -fstack-protector-all
finish libboundscheck.so
产物:/home/kali/M/openhitls/platform/Secure_C/lib/libboundscheck.so
实际复现时可直接跳过此手动步骤,configure.py 会自动检测并编译 Secure_C。
配置 openHiTLS 构建
关键:必须显式启用 TLCP 国密协议相关编译宏,HITLS_BUILD_PROFILE=full 不足以启用国密 provider。
>
HITLS_CRYPTO_PROVIDER_DEFAULT_SM 将 SM2/SM3/SM4 集成到默认 Provider,是 0.3 版本可用性的必要条件。
┌──(root㉿kali)-[/home/…/M/openhitls/platform/Secure_C]
└─# cd /home/kali/M/openhitls
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# mkdir -p build
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# python3 configure.py --system linux --bits 64 --asm_type x8664 --build_dir build --output_dir build --enable all --executes hitls --add_options="-DHITLS_TLS_PROTO_TLCP11 -DHITLS_TLS_SUITE_ECDHE_SM4_CBC_SM3 -DHITLS_TLS_SUITE_ECC_SM4_CBC_SM3 -DHITLS_TLS_SUITE_ECDHE_SM4_GCM_SM3 -DHITLS_TLS_SUITE_ECC_SM4_GCM_SM3 -DHITLS_CRYPTO_PROVIDER_DEFAULT_SM -DHITLS_TLS_SUITE_AUTH_SM2"
======================================================================
Checking securec dependency...
======================================================================
[INFO] Securec library already built, skipping build...
参数说明:
| --system linux --bits 64 --asm_type x8664 | |
| --build_dir build --output_dir build | |
| --enable all | |
| --executes hitls | |
| --add_options="..." |
生成的 compile_config.json:
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# cd /home/kali/M/openhitls/build
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# cat compile_config.json
{
"compileFlag": {
"CC_USER_DEFINE_FLAGS": {
"CC_FLAGS_ADD": [
"-DHITLS_TLS_PROTO_TLCP11",
"-DHITLS_TLS_SUITE_ECDHE_SM4_CBC_SM3",
"-DHITLS_TLS_SUITE_ECC_SM4_CBC_SM3",
"-DHITLS_TLS_SUITE_ECDHE_SM4_GCM_SM3",
"-DHITLS_TLS_SUITE_ECC_SM4_GCM_SM3",
"-DHITLS_CRYPTO_PROVIDER_DEFAULT_SM",
"-DHITLS_TLS_SUITE_AUTH_SM2"
]
}
},
"linkFlag": {}
}
configure.py 内部执行流程:解析命令行参数 → 编译 securec 依赖库(39 个 C 文件 → libboundscheck.a)→ 生成 feature_config.json(各模块 C/ASM 源文件清单)→ 生成 compile_config.json(编译宏 -D 定义和链接参数)→ 生成 CMake 辅助模块文件。
编译宏详解
| HITLS_TLS_PROTO_TLCP11 | |||
| HITLS_TLS_SUITE_ECDHE_SM4_CBC_SM3 | |||
| HITLS_TLS_SUITE_ECC_SM4_CBC_SM3 | |||
| HITLS_CRYPTO_PROVIDER_DEFAULT_SM | |||
| HITLS_TLS_SUITE_AUTH_SM2 | |||
| HITLS_TLS_SUITE_ECDHE_SM4_GCM_SM3 | |||
| HITLS_TLS_SUITE_ECC_SM4_GCM_SM3 |
--enable all 仅启用非国密模块。国密 TLCP 需上述 5 个高优先级宏显式启用。GCM 套件(#6、#7)与 CBC 套件共用相同的密钥交换算法(ECDHE/ECC),仅 AEAD 加密模式不同,行为完全一致。
CMake 生成构建文件
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# cd /home/kali/M/openhitls/build
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# cmake .. -DCMAKE_BUILD_TYPE=Debug
-- The C compiler identification is GNU 15.3.0
-- The CXX compiler identification is GNU 15.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring securec dependency...
--
-- === Configuring libboundscheck (Secure C) ===
-- Searching for sources in: /home/kali/M/openhitls/platform/Secure_C/src
-- Found 39 securec source files
-- System: Linux
-- Compiler: GNU 15.3.0
-- Securec library configured:
-- Source dir: /home/kali/M/openhitls/platform/Secure_C/src
-- Include dir: /home/kali/M/openhitls/platform/Secure_C/include
-- Output dir: /home/kali/M/openhitls/platform/Secure_C/lib
-- Library type: STATIC
-- Library name: libboundscheck.a (Linux/macOS) / boundscheck.lib (Windows)
-- ========================================
--
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Provider library for apps: libhitls.so
-- Configuring done (1.1s)
-- Generating done (0.5s)
-- Build files have been written to: /home/kali/M/openhitls/build
Make 编译
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# cd /home/kali/M/openhitls/build
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# make -j$(nproc) hitls 2>&1 | tail -n 10
[ 98%] Building C object CMakeFiles/handshake-objs.dir/tls/handshake/send/src/send_server_hello.c.o
[ 98%] Building C object CMakeFiles/handshake-objs.dir/tls/handshake/send/src/send_server_hello_done.c.o
[100%] Building C object CMakeFiles/handshake-objs.dir/tls/handshake/send/src/send_server_key_exchange.c.o
[100%] Building C object CMakeFiles/handshake-objs.dir/tls/handshake/sm/src/hs_init.c.o
[100%] Building C object CMakeFiles/handshake-objs.dir/tls/handshake/sm/src/hs_sm.c.o
[100%] Built target handshake-objs
[100%] Linking C shared library libhitls_tls.so
[100%] Built target hitls_tls-shared
[100%] Linking C executable hitls
[100%] Built target hitls
编译耗时约 30~60 秒(8 核)。SM3/SM4 使用 x86-64 汇编优化。
编译产物验证
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# ls -lh /home/kali/M/openhitls/build/hitls
-rwxr-xr-x 1 root root 908K 7月30日 19:36 /home/kali/M/openhitls/build/hitls
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# ls -lh /home/kali/M/openhitls/build/libhitls_*.so
-rwxr-xr-x 1 root root 912K 7月30日 19:36 /home/kali/M/openhitls/build/libhitls_bsl.so
-rwxr-xr-x 1 root root 6.2M 7月30日 19:36 /home/kali/M/openhitls/build/libhitls_crypto.so
-rwxr-xr-x 1 root root 1010K 7月30日 19:36 /home/kali/M/openhitls/build/libhitls_pki.so
-rwxr-xr-x 1 root root 5.7M 7月30日 19:36 /home/kali/M/openhitls/build/libhitls_tls.so
库路径
export LD_LIBRARY_PATH=/home/kali/M/openhitls/build:$LD_LIBRARY_PATH
每个运行 hitls 的新终端必须先执行此命令。
CMake 构建
main 分支已转向纯 CMake 构建,configure.py 已为空文件,请优先使用纯 CMake 方式。如果你拉取的是旧版本/旧分支(含有效 configure.py),再使用 configure.py 方式。
配置并编译 openHiTLS(纯 CMake 方式 — 推荐)
适用于 main 分支(2026年4月后)。所有模块和特性开关现在直接通过 CMake -D 参数控制,无需 configure.py,也无需 Python。
快速开始
┌──(root㉿kali)-[/home/kali/M]
└─# cd /home/kali/M
┌──(root㉿kali)-[/home/kali/M]
└─# git clone https://gitcode.com/openhitls/openhitls.git
正克隆到 'openhitls'...
remote: Enumerating objects: 42727, done.
remote: Counting objects: 100% (8774/8774), done.
remote: Compressing objects: 100% (1418/1418), done.
remote: Total 42727 (delta 7943), reused 7485 (delta 7342), pack-reused 33953 (from 1)
接收对象中: 100% (42727/42727), 62.19 MiB | 10.94 MiB/s, 完成.
处理 delta 中: 100% (28356/28356), 完成.
正在更新文件: 100% (3880/3880), 完成.
┌──(root㉿kali)-[/home/kali/M]
└─# cd openhitls
┌──(root㉿kali)-[/home/kali/M/openhitls]
└─# mkdir -p build && cd build
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# cmake .. && make 2>&1 | tail -n 10 && make install 2>&1 | tail -n 10
-- The C compiler identification is GNU 15.3.0
-- The CXX compiler identification is GNU 15.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Loading default build profile: full
-- Loading preset: FULL (all features enabled)
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of void*
-- Check size of void* - done
--
-- ========= Platform information =========
-- Endianness: little
-- Bitness: 64
-- ASM: none
-- ========================================
--
-- Performing Test _HAS_STACK_CLASH_PROTECTION
-- Performing Test _HAS_STACK_CLASH_PROTECTION - Success
-- Performing Test _HAS_CF_PROTECTION
-- Performing Test _HAS_CF_PROTECTION - Success
-- ====== HiTLS Build Options ======
-- CMAKE_POSITION_INDEPENDENT_CODE : ON
-- HITLS_COMPILE_OPTIONS : -D_FORTIFY_SOURCE=2;-O2;-pipe;-Werror;-Wextra;-Wcast-qual;-Wall;-Wfloat-equal;-Wshadow;-Wformat=2;-fsigned-char;-fno-common;-fno-strict-aliasing;-fno-omit-frame-pointer;-fstack-protector-strong;-Wdate-time;--param=ssp-buffer-size=4;-fstack-clash-protection;-fcf-protection=full
-- HITLS_SHARED_LINKER_FLAGS : -Wl,--no-undefined;-Wl,-z,noexecstack;-Wl,-z,relro;-Wl,-z,now;-Wl,--build-id=none
-- HITLS_EXE_LINKER_FLAGS : -pie;-Wl,-z,noexecstack;-Wl,-z,relro;-Wl,-z,now;-Wl,--build-id=none
-- CMAKE_C_FLAGS :
-- CMAKE_ASM_FLAGS :
-- CMAKE_SHARED_LINKER_FLAGS :
-- CMAKE_EXE_LINKER_FLAGS :
-- =================================
--
-- === Propagating Features to Children ===
-- Auto-enabled HITLS_AUTH_PRIVPASS_TOKEN (child of HITLS_AUTH)
-- Auto-enabled HITLS_AUTH_OTP (child of HITLS_AUTH)
-- Auto-enabled HITLS_AUTH_PAKE (child of HITLS_AUTH)
-- Auto-enabled HITLS_AUTH_PAKE_CORE (child of HITLS_AUTH_PAKE)
-- Auto-enabled HITLS_AUTH_SPAKE2PLUS (child of HITLS_AUTH_PAKE)
-- Auto-enabled HITLS_BSL_SAL (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_DL (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_FILE (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_LOCK (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_MEM (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_NET (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_STR (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_THREAD (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_TIME (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_PID (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_SAL_IP (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_ASN1 (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_BASE64 (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_BUFFER (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_CONF (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_ERR (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_HASH (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_INIT (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_LIST (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_LOG (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_OBJ (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_OBJ_DEFAULT (child of HITLS_BSL_OBJ)
-- Auto-enabled HITLS_BSL_OBJ_CUSTOM (child of HITLS_BSL_OBJ)
-- Auto-enabled HITLS_BSL_PARAMS (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_PEM (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_PRINT (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_TLV (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_UI (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_UIO (child of HITLS_BSL)
-- Auto-enabled HITLS_BSL_UIO_BUFFER (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_BSL_UIO_FILE (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_BSL_UIO_MEM (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_BSL_UIO_PLT (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_BSL_UIO_SCTP (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_BSL_UIO_TCP (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_BSL_UIO_UDP (child of HITLS_BSL_UIO)
-- Auto-enabled HITLS_CRYPTO_EAL (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_EALINIT (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_MD (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_MD5 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_SM3 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_SHA1 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_SHA2 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_SHA224 (child of HITLS_CRYPTO_SHA2)
-- Auto-enabled HITLS_CRYPTO_SHA256 (child of HITLS_CRYPTO_SHA2)
-- Auto-enabled HITLS_CRYPTO_SHA384 (child of HITLS_CRYPTO_SHA2)
-- Auto-enabled HITLS_CRYPTO_SHA512 (child of HITLS_CRYPTO_SHA2)
-- Auto-enabled HITLS_CRYPTO_SHA3 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_BLAKE2 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_BLAKE2S256 (child of HITLS_CRYPTO_BLAKE2)
-- Auto-enabled HITLS_CRYPTO_MD_MB (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_SHA2_MB (child of HITLS_CRYPTO_MD_MB)
-- Auto-enabled HITLS_CRYPTO_SHA256_MB (child of HITLS_CRYPTO_SHA2_MB)
-- Auto-enabled HITLS_CRYPTO_MAC (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_HMAC (child of HITLS_CRYPTO_MAC)
-- Auto-enabled HITLS_CRYPTO_CMAC (child of HITLS_CRYPTO_MAC)
-- Auto-enabled HITLS_CRYPTO_CMAC_AES (child of HITLS_CRYPTO_CMAC)
-- Auto-enabled HITLS_CRYPTO_CMAC_SM4 (child of HITLS_CRYPTO_CMAC)
-- Auto-enabled HITLS_CRYPTO_GMAC (child of HITLS_CRYPTO_MAC)
-- Auto-enabled HITLS_CRYPTO_SIPHASH (child of HITLS_CRYPTO_MAC)
-- Auto-enabled HITLS_CRYPTO_CBC_MAC (child of HITLS_CRYPTO_MAC)
-- Auto-enabled HITLS_CRYPTO_HPKE (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_KDF (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_PBKDF2 (child of HITLS_CRYPTO_KDF)
-- Auto-enabled HITLS_CRYPTO_HKDF (child of HITLS_CRYPTO_KDF)
-- Auto-enabled HITLS_CRYPTO_KDFTLS12 (child of HITLS_CRYPTO_KDF)
-- Auto-enabled HITLS_CRYPTO_SCRYPT (child of HITLS_CRYPTO_KDF)
-- Auto-enabled HITLS_CRYPTO_DRBG (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_DRBG_HASH (child of HITLS_CRYPTO_DRBG)
-- Auto-enabled HITLS_CRYPTO_DRBG_HMAC (child of HITLS_CRYPTO_DRBG)
-- Auto-enabled HITLS_CRYPTO_DRBG_CTR (child of HITLS_CRYPTO_DRBG)
-- Auto-enabled HITLS_CRYPTO_ENTROPY (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_MODES (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_CTR (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_CBC (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_ECB (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_GCM (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_CCM (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_XTS (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_CFB (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_OFB (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_WRAP (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_CHACHA20POLY1305 (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_HCTR (child of HITLS_CRYPTO_MODES)
-- Auto-enabled HITLS_CRYPTO_CIPHER (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_AES (child of HITLS_CRYPTO_CIPHER)
-- Auto-enabled HITLS_CRYPTO_SM4 (child of HITLS_CRYPTO_CIPHER)
-- Auto-enabled HITLS_CRYPTO_CHACHA20 (child of HITLS_CRYPTO_CIPHER)
-- Auto-enabled HITLS_CRYPTO_PKEY (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_PKEY_CMP (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_RSA_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_DSA_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_DH_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_ECDSA_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_ECDH_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_SM2_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_CURVE25519_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_MLDSA_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_MLKEM_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_SM9_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_FRODOKEM_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_MCELIECE_CMP (child of HITLS_CRYPTO_PKEY_CMP)
-- Auto-enabled HITLS_CRYPTO_RSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_RSA_SIGN (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_VERIFY (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_RECOVER (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_ENCRYPT (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_DECRYPT (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_BLINDING (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_GEN (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_PAD (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_EMSA_PSS (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSA_EMSA_ISO9796_2 (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSA_EMSA_PKCSV15 (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSAES_OAEP (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSAES_PKCSV15 (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSAES_PKCSV15_TLS (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSA_NO_PAD (child of HITLS_CRYPTO_RSA_PAD)
-- Auto-enabled HITLS_CRYPTO_RSA_CHECK (child of HITLS_CRYPTO_RSA)
-- Auto-enabled HITLS_CRYPTO_RSA_BSSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_CURVE25519 (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_X25519 (child of HITLS_CRYPTO_CURVE25519)
-- Auto-enabled HITLS_CRYPTO_ED25519 (child of HITLS_CRYPTO_CURVE25519)
-- Auto-enabled HITLS_CRYPTO_X25519_CHECK (child of HITLS_CRYPTO_CURVE25519)
-- Auto-enabled HITLS_CRYPTO_ED25519_CHECK (child of HITLS_CRYPTO_CURVE25519)
-- Auto-enabled HITLS_CRYPTO_DSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_DSA_CHECK (child of HITLS_CRYPTO_DSA)
-- Auto-enabled HITLS_CRYPTO_DH (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_DH_CHECK (child of HITLS_CRYPTO_DH)
-- Auto-enabled HITLS_CRYPTO_ECC (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_CURVE_NISTP192 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_NISTP224 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_NISTP256 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_NISTP384 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_NISTP521 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_BP256R1 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_BP384R1 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_BP512R1 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_CURVE_SM2 (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_ECC_CHECK (child of HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO_ECDH (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_ECDH_CHECK (child of HITLS_CRYPTO_ECDH)
-- Auto-enabled HITLS_CRYPTO_ECDSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_ECDSA_CHECK (child of HITLS_CRYPTO_ECDSA)
-- Auto-enabled HITLS_CRYPTO_SM2 (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_SM2_SIGN (child of HITLS_CRYPTO_SM2)
-- Auto-enabled HITLS_CRYPTO_SM2_CRYPT (child of HITLS_CRYPTO_SM2)
-- Auto-enabled HITLS_CRYPTO_SM2_EXCH (child of HITLS_CRYPTO_SM2)
-- Auto-enabled HITLS_CRYPTO_SM2_CHECK (child of HITLS_CRYPTO_SM2)
-- Auto-enabled HITLS_CRYPTO_SM9 (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_SM9_SIGN (child of HITLS_CRYPTO_SM9)
-- Auto-enabled HITLS_CRYPTO_SM9_CRYPT (child of HITLS_CRYPTO_SM9)
-- Auto-enabled HITLS_CRYPTO_SM9_CHECK (child of HITLS_CRYPTO_SM9)
-- Auto-enabled HITLS_CRYPTO_PAILLIER (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_ELGAMAL (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MLKEM (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MLKEM_CHECK (child of HITLS_CRYPTO_MLKEM)
-- Auto-enabled HITLS_CRYPTO_FRODOKEM (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MCELIECE (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MLDSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MLDSA_CHECK (child of HITLS_CRYPTO_MLDSA)
-- Auto-enabled HITLS_CRYPTO_COMPOSITE (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_COMPOSITE_CHECK (child of HITLS_CRYPTO_COMPOSITE)
-- Auto-enabled HITLS_CRYPTO_HYBRIDKEM (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_SLH_DSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_SLH_DSA_CHECK (child of HITLS_CRYPTO_SLH_DSA)
-- Auto-enabled HITLS_CRYPTO_XMSS (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_XMSS_CHECK (child of HITLS_CRYPTO_XMSS)
-- Auto-enabled HITLS_CRYPTO_XMSSMT (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_XMSSMT_CHECK (child of HITLS_CRYPTO_XMSSMT)
-- Auto-enabled HITLS_CRYPTO_HSS_LMS (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_PROVIDER (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_BN (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_BN_BASIC (child of HITLS_CRYPTO_BN)
-- Auto-enabled HITLS_CRYPTO_BN_RAND (child of HITLS_CRYPTO_BN)
-- Auto-enabled HITLS_CRYPTO_BN_PRIME (child of HITLS_CRYPTO_BN)
-- Auto-enabled HITLS_CRYPTO_BN_RFC_PRIME (child of HITLS_CRYPTO_BN)
-- Auto-enabled HITLS_CRYPTO_BN_STR_CONV (child of HITLS_CRYPTO_BN)
-- Auto-enabled HITLS_CRYPTO_BN_CB (child of HITLS_CRYPTO_BN)
-- Auto-enabled HITLS_CRYPTO_CODECSKEY (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_KEY_ENCODE (child of HITLS_CRYPTO_CODECSKEY)
-- Auto-enabled HITLS_CRYPTO_KEY_DECODE (child of HITLS_CRYPTO_CODECSKEY)
-- Auto-enabled HITLS_CRYPTO_KEY_EPKI (child of HITLS_CRYPTO_CODECSKEY)
-- Auto-enabled HITLS_CRYPTO_KEY_INFO (child of HITLS_CRYPTO_CODECSKEY)
-- Auto-enabled HITLS_CRYPTO_KEY_DECODE_CHAIN (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_CODECS (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_CRYPTO_GHASH (child of HITLS_CRYPTO)
-- Auto-enabled HITLS_PKI_X509 (child of HITLS_PKI)
-- Auto-enabled HITLS_PKI_X509_CRT (child of HITLS_PKI_X509)
-- Auto-enabled HITLS_PKI_X509_CRT_GEN (child of HITLS_PKI_X509_CRT)
-- Auto-enabled HITLS_PKI_X509_CRT_PARSE (child of HITLS_PKI_X509_CRT)
-- Auto-enabled HITLS_PKI_X509_CRT_AUTH (child of HITLS_PKI_X509_CRT)
-- Auto-enabled HITLS_PKI_X509_CSR (child of HITLS_PKI_X509)
-- Auto-enabled HITLS_PKI_X509_CSR_GEN (child of HITLS_PKI_X509_CSR)
-- Auto-enabled HITLS_PKI_X509_CSR_PARSE (child of HITLS_PKI_X509_CSR)
-- Auto-enabled HITLS_PKI_X509_CSR_ATTR (child of HITLS_PKI_X509_CSR)
-- Auto-enabled HITLS_PKI_X509_CSR_GET (child of HITLS_PKI_X509_CSR)
-- Auto-enabled HITLS_PKI_X509_CRL (child of HITLS_PKI_X509)
-- Auto-enabled HITLS_PKI_X509_CRL_GEN (child of HITLS_PKI_X509_CRL)
-- Auto-enabled HITLS_PKI_X509_CRL_PARSE (child of HITLS_PKI_X509_CRL)
-- Auto-enabled HITLS_PKI_X509_VFY (child of HITLS_PKI_X509)
-- Auto-enabled HITLS_PKI_X509_VFY_DEFAULT (child of HITLS_PKI_X509_VFY)
-- Auto-enabled HITLS_PKI_X509_VFY_CB (child of HITLS_PKI_X509_VFY)
-- Auto-enabled HITLS_PKI_X509_VFY_LOCATION (child of HITLS_PKI_X509_VFY)
-- Auto-enabled HITLS_PKI_X509_VFY_IDENTITY (child of HITLS_PKI_X509_VFY)
-- Auto-enabled HITLS_PKI_CMS (child of HITLS_PKI)
-- Auto-enabled HITLS_PKI_CMS_DATA (child of HITLS_PKI_CMS)
-- Auto-enabled HITLS_PKI_CMS_DIGESTINFO (child of HITLS_PKI_CMS)
-- Auto-enabled HITLS_PKI_CMS_SIGNEDDATA (child of HITLS_PKI_CMS)
-- Auto-enabled HITLS_PKI_CMS_ENCRYPTDATA (child of HITLS_PKI_CMS)
-- Auto-enabled HITLS_PKI_PKCS12 (child of HITLS_PKI)
-- Auto-enabled HITLS_PKI_PKCS12_GEN (child of HITLS_PKI_PKCS12)
-- Auto-enabled HITLS_PKI_PKCS12_PARSE (child of HITLS_PKI_PKCS12)
-- Auto-enabled HITLS_PKI_INFO (child of HITLS_PKI)
-- Auto-enabled HITLS_PKI_INFO_DN_CONF (child of HITLS_PKI_INFO)
-- Auto-enabled HITLS_PKI_INFO_DN_HASH (child of HITLS_PKI_INFO)
-- Auto-enabled HITLS_PKI_INFO_CRT (child of HITLS_PKI_INFO)
-- Auto-enabled HITLS_PKI_INFO_CSR (child of HITLS_PKI_INFO)
-- Auto-enabled HITLS_PKI_INFO_CRL (child of HITLS_PKI_INFO)
-- Auto-enabled HITLS_TLS_PROTO_VERSION (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_PROTO_TLS12 (child of HITLS_TLS_PROTO_VERSION)
-- Auto-enabled HITLS_TLS_PROTO_TLS13 (child of HITLS_TLS_PROTO_VERSION)
-- Auto-enabled HITLS_TLS_PROTO_TLCP11 (child of HITLS_TLS_PROTO_VERSION)
-- Auto-enabled HITLS_TLS_PROTO_DTLCP11 (child of HITLS_TLS_PROTO_VERSION)
-- Auto-enabled HITLS_TLS_PROTO_DTLS12 (child of HITLS_TLS_PROTO_VERSION)
-- Auto-enabled HITLS_TLS_PROTO_DTLS13 (child of HITLS_TLS_PROTO_VERSION)
-- Auto-enabled HITLS_TLS_FEATURE_DTLS_CID (child of HITLS_TLS_PROTO_DTLS13)
-- Auto-enabled HITLS_TLS_HOST (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_HOST_SERVER (child of HITLS_TLS_HOST)
-- Auto-enabled HITLS_TLS_HOST_CLIENT (child of HITLS_TLS_HOST)
-- Auto-enabled HITLS_TLS_CALLBACK (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_FEATURE_PROVIDER (child of HITLS_TLS_CALLBACK)
-- Auto-enabled HITLS_TLS_FEATURE_PROVIDER_HARD_CODING (child of HITLS_TLS_FEATURE_PROVIDER)
-- Auto-enabled HITLS_TLS_FEATURE_PROVIDER_DYNAMIC (child of HITLS_TLS_FEATURE_PROVIDER)
-- Auto-enabled HITLS_TLS_CALLBACK_SAL (child of HITLS_TLS_CALLBACK)
-- Auto-enabled HITLS_TLS_CALLBACK_CERT (child of HITLS_TLS_CALLBACK)
-- Auto-enabled HITLS_TLS_CALLBACK_CRYPT (child of HITLS_TLS_CALLBACK)
-- Auto-enabled HITLS_TLS_FEATURE (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_FEATURE_RENEGOTIATION (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_ALPN (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_SNI (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_PHA (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_PSK (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_SECURITY (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_INDICATOR (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_SESSION (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_SESSION_TICKET (child of HITLS_TLS_FEATURE_SESSION)
-- Auto-enabled HITLS_TLS_FEATURE_SESSION_ID (child of HITLS_TLS_FEATURE_SESSION)
-- Auto-enabled HITLS_TLS_FEATURE_SESSION_CACHE_CB (child of HITLS_TLS_FEATURE_SESSION)
-- Auto-enabled HITLS_TLS_FEATURE_SESSION_CUSTOM_TICKET (child of HITLS_TLS_FEATURE_SESSION)
-- Auto-enabled HITLS_TLS_FEATURE_KEY_UPDATE (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_MODE (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_MODE_FALL_BACK_SCSV (child of HITLS_TLS_FEATURE_MODE)
-- Auto-enabled HITLS_TLS_FEATURE_MODE_AUTO_RETRY (child of HITLS_TLS_FEATURE_MODE)
-- Auto-enabled HITLS_TLS_FEATURE_MODE_ACCEPT_MOVING_WRITE_BUFFER (child of HITLS_TLS_FEATURE_MODE)
-- Auto-enabled HITLS_TLS_FEATURE_MODE_RELEASE_BUFFERS (child of HITLS_TLS_FEATURE_MODE)
-- Auto-enabled HITLS_TLS_FEATURE_KEM (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_FLIGHT (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_CERT_MODE (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_CERT_MODE_VERIFY_PEER (child of HITLS_TLS_FEATURE_CERT_MODE)
-- Auto-enabled HITLS_TLS_FEATURE_CERT_MODE_CLIENT_VERIFY (child of HITLS_TLS_FEATURE_CERT_MODE)
-- Auto-enabled HITLS_TLS_FEATURE_CLIENT_HELLO_CB (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_CERT_CB (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_MAX_SEND_FRAGMENT (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_CUSTOM_EXTENSION (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_ANTI_REPLAY (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_EXTENDED_MASTER_SECRET (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_REC_INBUFFER_SIZE (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_CERTIFICATE_AUTHORITIES (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_SM_TLS13 (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_SUITE_SM4_GCM_SM3 (child of HITLS_TLS_FEATURE_SM_TLS13)
-- Auto-enabled HITLS_TLS_SUITE_SM4_CCM_SM3 (child of HITLS_TLS_FEATURE_SM_TLS13)
-- Auto-enabled HITLS_TLS_FEATURE_MTU_QUERY (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_EXPORT_KEY_MATERIAL (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_RECORD_SIZE_LIMIT (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_DEFAULT_COOKIE (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_FEATURE_CUSTOM_REC_TYPE (child of HITLS_TLS_FEATURE)
-- Auto-enabled HITLS_TLS_PROTO (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_PROTO_DFX (child of HITLS_TLS_PROTO)
-- Auto-enabled HITLS_TLS_PROTO_DFX_CHECK (child of HITLS_TLS_PROTO_DFX)
-- Auto-enabled HITLS_TLS_PROTO_DFX_INFO (child of HITLS_TLS_PROTO_DFX)
-- Auto-enabled HITLS_TLS_PROTO_DFX_ALERT_NUMBER (child of HITLS_TLS_PROTO_DFX)
-- Auto-enabled HITLS_TLS_PROTO_DFX_SERVER_PREFER (child of HITLS_TLS_PROTO_DFX)
-- Auto-enabled HITLS_TLS_PROTO_CLOSE_STATE (child of HITLS_TLS_PROTO)
-- Auto-enabled HITLS_TLS_CONFIG (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_CONFIG_MANUAL_DH (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_CERT (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_CERT_LOAD_FILE (child of HITLS_TLS_CONFIG_CERT)
-- Auto-enabled HITLS_TLS_CONFIG_CERT_CALLBACK (child of HITLS_TLS_CONFIG_CERT)
-- Auto-enabled HITLS_TLS_CONFIG_CERT_BUILD_CHAIN (child of HITLS_TLS_CONFIG_CERT)
-- Auto-enabled HITLS_TLS_CONFIG_CERT_VERIFY_LOCATION (child of HITLS_TLS_CONFIG_CERT)
-- Auto-enabled HITLS_TLS_CONFIG_CERT_CRL (child of HITLS_TLS_CONFIG_CERT)
-- Auto-enabled HITLS_TLS_CONFIG_KEY_USAGE (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_STATE (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_RECORD_PADDING (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_USER_DATA (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_CIPHER_SUITE (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONFIG_VERSION (child of HITLS_TLS_CONFIG)
-- Auto-enabled HITLS_TLS_CONNECTION (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_CONNECTION_INFO_NEGOTIATION (child of HITLS_TLS_CONNECTION)
-- Auto-enabled HITLS_TLS_SUITE_CIPHER (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_SUITE_CIPHER_AEAD (child of HITLS_TLS_SUITE_CIPHER)
-- Auto-enabled HITLS_TLS_SUITE_CIPHER_CBC (child of HITLS_TLS_SUITE_CIPHER)
-- Auto-enabled HITLS_TLS_SUITE_KX (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_SUITE_KX_ECDHE (child of HITLS_TLS_SUITE_KX)
-- Auto-enabled HITLS_TLS_SUITE_KX_DHE (child of HITLS_TLS_SUITE_KX)
-- Auto-enabled HITLS_TLS_SUITE_KX_RSA (child of HITLS_TLS_SUITE_KX)
-- Auto-enabled HITLS_TLS_SUITE_AUTH (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_SUITE_AUTH_RSA (child of HITLS_TLS_SUITE_AUTH)
-- Auto-enabled HITLS_TLS_SUITE_AUTH_ECDSA (child of HITLS_TLS_SUITE_AUTH)
-- Auto-enabled HITLS_TLS_SUITE_AUTH_DSS (child of HITLS_TLS_SUITE_AUTH)
-- Auto-enabled HITLS_TLS_SUITE_AUTH_PSK (child of HITLS_TLS_SUITE_AUTH)
-- Auto-enabled HITLS_TLS_SUITE_AUTH_SM2 (child of HITLS_TLS_SUITE_AUTH)
-- Auto-enabled HITLS_TLS_MAINTAIN (child of HITLS_TLS)
-- Auto-enabled HITLS_TLS_MAINTAIN_KEYLOG (child of HITLS_TLS_MAINTAIN)
-- === Children Propagated ===
--
-- Auto-enabled HITLS_TLS_SUITE (required by HITLS_TLS_SUITE_AES_128_GCM_SHA256)
--
-- === Resolving Feature Dependencies ===
-- Auto-enabled HITLS_CRYPTO_CURVE_MONT_PRIME (required by HITLS_CRYPTO_CURVE_BP256R1)
-- Auto-enabled HITLS_CRYPTO_CURVE_MONT (required by HITLS_CRYPTO_CURVE_MONT_PRIME)
-- Auto-enabled HITLS_CRYPTO_PKEY_EXCH (required by HITLS_CRYPTO_DH)
-- Auto-enabled HITLS_CRYPTO_PKEY_SIGN (required by HITLS_CRYPTO_DSA)
-- Auto-enabled HITLS_CRYPTO_ECC_CMP (required by HITLS_CRYPTO_ECDH_CMP)
-- Auto-enabled HITLS_CRYPTO_PKEY_KEM (required by HITLS_CRYPTO_FRODOKEM)
-- Auto-enabled HITLS_CRYPTO_PKEY_CRYPT (required by HITLS_CRYPTO_PAILLIER)
-- Auto-enabled HITLS_TLS_PROTO_DATAGRAM (required by HITLS_TLS_PROTO_DTLCP11)
-- Auto-enabled HITLS_TLS_PROTO_DTLS (required by HITLS_TLS_PROTO_DTLS12)
-- Auto-enabled HITLS_TLS_EXTENSION_COOKIE (required by HITLS_TLS_PROTO_DTLS12)
-- Auto-enabled HITLS_TLS_PROTO_TLS13_FAMILY (required by HITLS_TLS_PROTO_DTLS13)
-- Auto-enabled HITLS_TLS_PROTO_TLS (required by HITLS_TLS_PROTO_TLCP11)
-- Auto-enabled HITLS_TLS_PROTO_TLS_BASIC (required by HITLS_TLS_PROTO_TLCP11)
-- Auto-enabled HITLS_TLS_FEATURE_ETM (required by HITLS_TLS_SUITE_CIPHER_CBC)
-- Auto-enabled HITLS_TLS_CALLBACK_CRYPT_HMAC_PRIMITIVES (required by HITLS_TLS_SUITE_CIPHER_CBC)
-- === Dependencies Resolved ===
--
-- [BSL] Configuring BSL modules
-- [BSL] BSL configuration complete
-- [HiTLS] Created shared library hitls_bsl-shared
-- [HiTLS] Created static library hitls_bsl-static
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- [Crypto] Configuring Crypto modules
-- [Crypto] Crypto configuration complete
-- [HiTLS] Created shared library hitls_crypto-shared
-- [HiTLS] Created static library hitls_crypto-static
-- [PKI] Configuring PKI modules
-- [PKI] PKI configuration complete
-- [HiTLS] Created shared library hitls_pki-shared
-- [HiTLS] Created static library hitls_pki-static
-- [TLS] Configuring TLS modules
-- [TLS] TLS configuration complete
-- [HiTLS] Created shared library hitls_tls-shared
-- [HiTLS] Created static library hitls_tls-static
-- [AUTH] Configuring AUTH modules
-- [AUTH] AUTH configuration complete
-- [HiTLS] Created shared library hitls_auth-shared
-- [HiTLS] Created static library hitls_auth-static
-- Configuring done (1.9s)
-- Generating done (0.5s)
-- Build files have been written to: /home/kali/M/openhitls/build
[ 99%] Building C object auth/privpass_token/CMakeFiles/_hitls_auth_privpass_token.dir/src/privpass_token_wrapper.c.o
[ 99%] Built target _hitls_auth_privpass_token
[ 99%] Building C object auth/otp/CMakeFiles/_hitls_auth_otp.dir/src/otp.c.o
[ 99%] Building C object auth/otp/CMakeFiles/_hitls_auth_otp.dir/src/otp_util.c.o
[ 99%] Building C object auth/otp/CMakeFiles/_hitls_auth_otp.dir/src/otp_wrapper.c.o
[ 99%] Built target _hitls_auth_otp
[100%] Linking C shared library libhitls_auth.so
[100%] Built target hitls_auth-shared
[100%] Linking C static library libhitls_auth.a
[100%] Built target hitls_auth-static
-- Installing: /usr/local/include/hitls/bsl/bsl_list.h
-- Installing: /usr/local/include/hitls/bsl/bsl_obj.h
-- Installing: /usr/local/include/hitls/bsl/bsl_log.h
-- Installing: /usr/local/include/hitls/bsl/bsl_base64.h
-- Up-to-date: /usr/local/include/hitls/auth
-- Installing: /usr/local/include/hitls/auth/auth_pake.h
-- Installing: /usr/local/include/hitls/auth/auth_errno.h
-- Installing: /usr/local/include/hitls/auth/auth_privpass_token.h
-- Installing: /usr/local/include/hitls/auth/auth_otp.h
-- Installing: /usr/local/include/hitls/auth/auth_params.h
配置(按需选择)
默认构建(启用所有特性,同时生成静态库和共享库):
cmake ..
全量构建(使用预设):
cmake .. -DHITLS_BUILD_PROFILE=full
手动选择特性:
cmake .. -DHITLS_BUILD_PROFILE=none -DHITLS_CRYPTO_SHA256=ON
启用汇编优化(自动检测平台类型):
cmake .. -DHITLS_ASM=ON
x86_64 汇编优化全量构建:
cmake .. -DHITLS_BUILD_PROFILE=full -DHITLS_ASM_X8664=ON
构建命令行工具:
cmake .. -DHITLS_BUILD_EXE=ON
打包为单个库:
cmake .. -DHITLS_BUNDLE_LIB=ON
执行构建和安装:
make && make install
构建命令行工具
┌──(root㉿kali)-[/home/kali/M/openhitls/build]
└─# cmake .. -DHITLS_BUILD_EXE=ON && make 2>&1 | tail -n 10 && make install 2>&1 | tail -n 10
-- Preset already loaded via -C or external configuration, skipping default profile loading
--
-- ========= Platform information =========
-- Endianness: little
-- Bitness: 64
-- ASM: none
-- ========================================
--
-- ====== HiTLS Build Options ======
-- CMAKE_POSITION_INDEPENDENT_CODE : ON
-- HITLS_COMPILE_OPTIONS : -D_FORTIFY_SOURCE=2;-O2;-pipe;-Werror;-Wextra;-Wcast-qual;-Wall;-Wfloat-equal;-Wshadow;-Wformat=2;-fsigned-char;-fno-common;-fno-strict-aliasing;-fno-omit-frame-pointer;-fstack-protector-strong;-Wdate-time;--param=ssp-buffer-size=4;-fstack-clash-protection;-fcf-protection=full
-- HITLS_SHARED_LINKER_FLAGS : -Wl,--no-undefined;-Wl,-z,noexecstack;-Wl,-z,relro;-Wl,-z,now;-Wl,--build-id=none
-- HITLS_EXE_LINKER_FLAGS : -pie;-Wl,-z,noexecstack;-Wl,-z,relro;-Wl,-z,now;-Wl,--build-id=none
-- CMAKE_C_FLAGS :
-- CMAKE_ASM_FLAGS :
-- CMAKE_SHARED_LINKER_FLAGS :
-- CMAKE_EXE_LINKER_FLAGS :
-- =================================
--
-- === Propagating Features to Children ===
-- Auto-enabled HITLS_CRYPTO_CMAC (child of HITLS_CRYPTO_MAC)
-- Auto-enabled HITLS_CRYPTO_BLAKE2 (child of HITLS_CRYPTO_MD)
-- Auto-enabled HITLS_CRYPTO_CURVE25519 (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_DSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_DH (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_ECC (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_ECDH (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_ECDSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MLKEM (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_MLDSA (child of HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_COMPOSITE (child of HITLS_CRYPTO_PKEY)
-- Skipping HITLS_TLS_CALLBACK_SAL (explicitly set to OFF by user, child of HITLS_TLS_CALLBACK)
-- Skipping HITLS_TLS_CALLBACK_CERT (explicitly set to OFF by user, child of HITLS_TLS_CALLBACK)
-- Skipping HITLS_TLS_CALLBACK_CRYPT (explicitly set to OFF by user, child of HITLS_TLS_CALLBACK)
-- Skipping HITLS_TLS_FEATURE_PROVIDER_HARD_CODING (explicitly set to OFF by user, child of HITLS_TLS_FEATURE_PROVIDER)
-- Auto-enabled HITLS_TLS_PROTO_DTLS13 (child of HITLS_TLS_PROTO_VERSION)
-- === Children Propagated ===
--
-- Auto-enabled HITLS_TLS_SUITE (required by HITLS_TLS_SUITE_AES_128_GCM_SHA256)
-- Auto-enabled HITLS_TLS (required by HITLS_TLS_SUITE)
-- Auto-enabled HITLS_CRYPTO_ECDH (required by HITLS_TLS_SUITE_AES_128_GCM_SHA256)
-- Auto-enabled HITLS_CRYPTO_ECC (required by HITLS_CRYPTO_ECDH)
-- Auto-enabled HITLS_CRYPTO_PKEY (required by HITLS_CRYPTO_ECC)
-- Auto-enabled HITLS_CRYPTO (required by HITLS_CRYPTO_PKEY)
-- Auto-enabled HITLS_CRYPTO_RSA (required by HITLS_TLS_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
-- Auto-enabled HITLS_CRYPTO_ECDSA (required by HITLS_TLS_SUITE_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
-- Auto-enabled HITLS_CRYPTO_PKEY_SIGN (required by HITLS_CRYPTO_ECDSA)
-- Auto-enabled HITLS_CRYPTO_MD (required by HITLS_CRYPTO_ECDSA)
-- Auto-enabled HITLS_CRYPTO_SM2 (required by HITLS_TLS_SUITE_ECDHE_SM4_GCM_SM3)
-- Auto-enabled HITLS_CRYPTO_DH (required by HITLS_TLS_SUITE_DHE_RSA_WITH_AES_128_GCM_SHA256)
-- Auto-enabled HITLS_CRYPTO_PKEY_EXCH (required by HITLS_CRYPTO_DH)
-- Auto-enabled HITLS_CRYPTO_DSA (required by HITLS_TLS_SUITE_DHE_DSS_WITH_AES_128_GCM_SHA256)
--
-- === Resolving Feature Dependencies ===
-- Auto-enabled HITLS_AUTH (required by HITLS_AUTH_OTP)
-- Auto-enabled HITLS_AUTH_PAKE (required by HITLS_AUTH_PAKE_CORE)
-- Auto-enabled HITLS_BSL (required by HITLS_BSL_ASN1)
-- Auto-enabled HITLS_BSL_OBJ (required by HITLS_BSL_OBJ_CUSTOM)
-- Auto-enabled HITLS_BSL_UIO (required by HITLS_BSL_UIO_BUFFER)
-- Auto-enabled HITLS_CRYPTO_CIPHER (required by HITLS_CRYPTO_AES)
-- Auto-enabled HITLS_CRYPTO_BLAKE2 (required by HITLS_CRYPTO_BLAKE2S256)
-- Auto-enabled HITLS_CRYPTO_BN (required by HITLS_CRYPTO_BN_BASIC)
-- Auto-enabled HITLS_CRYPTO_MODES (required by HITLS_CRYPTO_CBC)
-- Auto-enabled HITLS_CRYPTO_MAC (required by HITLS_CRYPTO_CBC_MAC)
-- Auto-enabled HITLS_CRYPTO_CMAC (required by HITLS_CRYPTO_CMAC_AES)
-- Auto-enabled HITLS_CRYPTO_COMPOSITE (required by HITLS_CRYPTO_COMPOSITE_CHECK)
-- Auto-enabled HITLS_CRYPTO_MLDSA (required by HITLS_CRYPTO_COMPOSITE)
-- Auto-enabled HITLS_CRYPTO_CURVE_MONT_PRIME (required by HITLS_CRYPTO_CURVE_BP256R1)
-- Auto-enabled HITLS_CRYPTO_CURVE_MONT (required by HITLS_CRYPTO_CURVE_MONT_PRIME)
-- Auto-enabled HITLS_CRYPTO_DRBG (required by HITLS_CRYPTO_DRBG_CTR)
-- Auto-enabled HITLS_CRYPTO_ECC_CMP (required by HITLS_CRYPTO_ECDH_CMP)
-- Auto-enabled HITLS_CRYPTO_CURVE25519 (required by HITLS_CRYPTO_ED25519)
-- Auto-enabled HITLS_CRYPTO_PKEY_KEM (required by HITLS_CRYPTO_FRODOKEM)
-- Auto-enabled HITLS_CRYPTO_KDF (required by HITLS_CRYPTO_HKDF)
-- Auto-enabled HITLS_CRYPTO_MLKEM (required by HITLS_CRYPTO_HYBRIDKEM)
-- Auto-enabled HITLS_CRYPTO_CODECSKEY (required by HITLS_CRYPTO_KEY_DECODE)
-- Auto-enabled HITLS_CRYPTO_PKEY_CRYPT (required by HITLS_CRYPTO_PAILLIER)
-- Auto-enabled HITLS_CRYPTO_RSA_PAD (required by HITLS_CRYPTO_RSAES_OAEP)
-- Auto-enabled HITLS_CRYPTO_SHA2 (required by HITLS_CRYPTO_SHA256)
-- Auto-enabled HITLS_CRYPTO_SHA2_MB (required by HITLS_CRYPTO_SHA256_MB)
-- Auto-enabled HITLS_CRYPTO_MD_MB (required by HITLS_CRYPTO_SHA2_MB)
-- Auto-enabled HITLS_CRYPTO_SLH_DSA (required by HITLS_CRYPTO_SLH_DSA_CHECK)
-- Auto-enabled HITLS_CRYPTO_XMSS (required by HITLS_CRYPTO_SLH_DSA)
-- Auto-enabled HITLS_CRYPTO_SM9 (required by HITLS_CRYPTO_SM9_CHECK)
-- Auto-enabled HITLS_CRYPTO_XMSSMT (required by HITLS_CRYPTO_XMSSMT_CHECK)
-- Auto-enabled HITLS_PKI_CMS (required by HITLS_PKI_CMS_DATA)
-- Auto-enabled HITLS_PKI (required by HITLS_PKI_CMS)
-- Auto-enabled HITLS_PKI_INFO (required by HITLS_PKI_INFO_CRL)
-- Auto-enabled HITLS_PKI_X509_CRL (required by HITLS_PKI_INFO_CRL)
-- Auto-enabled HITLS_PKI_X509 (required by HITLS_PKI_X509_CRL)
-- Auto-enabled HITLS_PKI_X509_CRT (required by HITLS_PKI_INFO_CRT)
-- Auto-enabled HITLS_PKI_X509_CSR (required by HITLS_PKI_INFO_CSR)
-- Auto-enabled HITLS_PKI_PKCS12 (required by HITLS_PKI_PKCS12_GEN)
-- Auto-enabled HITLS_PKI_X509_VFY (required by HITLS_PKI_X509_VFY_CB)
-- Auto-enabled HITLS_TLS_CONFIG_CERT (required by HITLS_TLS_CONFIG_CERT_BUILD_CHAIN)
-- Auto-enabled HITLS_TLS_CONFIG (required by HITLS_TLS_CONFIG_CERT)
-- Auto-enabled HITLS_TLS_CONNECTION (required by HITLS_TLS_CONNECTION_INFO_NEGOTIATION)
-- Auto-enabled HITLS_TLS_FEATURE (required by HITLS_TLS_FEATURE_ALPN)
-- Auto-enabled HITLS_TLS_FEATURE_CERT_MODE (required by HITLS_TLS_FEATURE_CERT_MODE_CLIENT_VERIFY)
-- Auto-enabled HITLS_TLS_FEATURE_SESSION (required by HITLS_TLS_FEATURE_EXPORT_KEY_MATERIAL)
-- Auto-enabled HITLS_TLS_FEATURE_MODE (required by HITLS_TLS_FEATURE_MODE_ACCEPT_MOVING_WRITE_BUFFER)
-- Auto-enabled HITLS_TLS_FEATURE_PROVIDER (required by HITLS_TLS_FEATURE_PROVIDER_DYNAMIC)
-- Auto-enabled HITLS_TLS_CALLBACK (required by HITLS_TLS_FEATURE_PROVIDER)
-- Auto-enabled HITLS_TLS_HOST (required by HITLS_TLS_HOST_CLIENT)
-- Auto-enabled HITLS_TLS_MAINTAIN (required by HITLS_TLS_MAINTAIN_KEYLOG)
-- Auto-enabled HITLS_TLS_PROTO (required by HITLS_TLS_PROTO_CLOSE_STATE)
-- Auto-enabled HITLS_TLS_PROTO_DFX (required by HITLS_TLS_PROTO_DFX_ALERT_NUMBER)
-- Auto-enabled HITLS_TLS_PROTO_VERSION (required by HITLS_TLS_PROTO_DTLCP11)
-- Auto-enabled HITLS_TLS_PROTO_DATAGRAM (required by HITLS_TLS_PROTO_DTLCP11)
-- Auto-enabled HITLS_TLS_PROTO_DTLS (required by HITLS_TLS_PROTO_DTLS12)
-- Auto-enabled HITLS_TLS_EXTENSION_COOKIE (required by HITLS_TLS_PROTO_DTLS12)
-- Auto-enabled HITLS_TLS_PROTO_TLS (required by HITLS_TLS_PROTO_TLCP11)
-- Auto-enabled HITLS_TLS_PROTO_TLS_BASIC (required by HITLS_TLS_PROTO_TLCP11)
-- Auto-enabled HITLS_TLS_PROTO_TLS13_FAMILY (required by HITLS_TLS_PROTO_TLS13)
-- Auto-enabled HITLS_TLS_SUITE_AUTH (required by HITLS_TLS_SUITE_AUTH_DSS)
-- Auto-enabled HITLS_TLS_SUITE_CIPHER (required by HITLS_TLS_SUITE_CIPHER_AEAD)
-- Auto-enabled HITLS_TLS_FEATURE_ETM (required by HITLS_TLS_SUITE_CIPHER_CBC)
-- Auto-enabled HITLS_TLS_CALLBACK_CRYPT_HMAC_PRIMITIVES (required by HITLS_TLS_SUITE_CIPHER_CBC)
-- Auto-enabled HITLS_TLS_SUITE_KX (required by HITLS_TLS_SUITE_KX_DHE)
-- === Dependencies Resolved ===
--
-- [BSL] Configuring BSL modules
-- [BSL] BSL configuration complete
-- [HiTLS] Created shared library hitls_bsl-shared
-- [HiTLS] Created static library hitls_bsl-static
-- [Crypto] Configuring Crypto modules
-- [Crypto] Crypto configuration complete
-- [HiTLS] Created shared library hitls_crypto-shared
-- [HiTLS] Created static library hitls_crypto-static
-- [PKI] Configuring PKI modules
-- [PKI] PKI configuration complete
-- [HiTLS] Created shared library hitls_pki-shared
-- [HiTLS] Created static library hitls_pki-static
-- [TLS] Configuring TLS modules
-- [TLS] TLS configuration complete
-- [HiTLS] Created shared library hitls_tls-shared
-- [HiTLS] Created static library hitls_tls-static
-- [AUTH] Configuring AUTH modules
-- [AUTH] AUTH configuration complete
-- [HiTLS] Created shared library hitls_auth-shared
-- [HiTLS] Created static library hitls_auth-static
-- [APPS] Configuring apps modules
-- [APPS] Created target _hitls_apps
-- [HiTLS] Created executable hitls
-- Configuring done (0.4s)
-- Generating done (1.1s)
-- Build files have been written to: /home/kali/M/openhitls/build
[ 99%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/app_server.c.o
[ 99%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/app_sm.c.o
[ 99%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/app_tls_common.c.o
[ 99%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/app_utils.c.o
[100%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/app_verify.c.o
[100%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/app_x509.c.o
[100%] Building C object apps/CMakeFiles/_hitls_apps.dir/src/hitls.c.o
[100%] Built target _hitls_apps
[100%] Linking C executable hitls
[100%] Built target hitls
-- Up-to-date: /usr/local/include/hitls/bsl/bsl_list.h
-- Up-to-date: /usr/local/include/hitls/bsl/bsl_obj.h
-- Up-to-date: /usr/local/include/hitls/bsl/bsl_log.h
-- Up-to-date: /usr/local/include/hitls/bsl/bsl_base64.h
-- Up-to-date: /usr/local/include/hitls/auth
-- Up-to-date: /usr/local/include/hitls/auth/auth_pake.h
-- Up-to-date: /usr/local/include/hitls/auth/auth_errno.h
-- Up-to-date: /usr/local/include/hitls/auth/auth_privpass_token.h
-- Up-to-date: /usr/local/include/hitls/auth/auth_otp.h
-- Up-to-date: /usr/local/include/hitls/auth/auth_params.h
资源汇总
openHiTLS
openHiTLS架构高度模块化,可通过模块和特性配置。RAM/ROM尺寸取决于所选的特性。openHiTLS为密码算法提供最佳性能优化。当前已支持5个组件和算法特性可按需配置,已经通过ISO19790认证,支持ARM、x86架构CPU上的算法性能优化,更多架构和特性待规划。
功能特性
协议:
TLS: 支持TLS1.3,TLS1.3-Hybrid-Key-Exchange,TLS-Provider,TLS-Multi-KeyShare,TLS-Custom-Extension,TLCP,DTLCP,TLS1.2,DTLS1.2;
认证:支持 Privacy Pass token,HOTP,TOTP,SPAKE2+ 等认证协议;
算法:
后量子算法:ML-DSA,ML-KEM,SLH-DSA,XMSS,Classic McEliece,FrodoKEM;
对称算法:AES,SM4,Chacha20 以及各类对称加密模式;
传统非对称算法:RSA,RSA-Bind,DSA,ECDSA,EDDSA,ECDH,DH,SM2,SM9,Paillier,ElGamal;
随机数:DRBG,GM-DRBG;
密钥派生:HKDF,SCRYPT,PBKDF2;
哈希算法:SHA系列,MD5,SM3;
消息认证码:HMAC,CMAC;
其他:HPKE;
PKI:
后量子能力:支持XMSS,ML-DSA,ML-KEM,SLH-DSA证书能力,ML-DSA CMS SignedData能力;
传统证书能力:支持X509解析验证,CRL解析验证,CSR请求生成,证书链生成,部分/全部证书链验证
PKCS7,PKCS8,PKCS12等;
命令行:支持基础命令,随机数,加解密,密钥和参数管理,证书等;
DFX特性
特性高度模块化,支持按需裁剪特性;
基于ARMv8、ARMv7、x86_64 CPU算法性能优化;
支持基于日志和错误堆栈功能维测;
官网:
https://www.openhitls.net/zh/
项目:
https://gitcode.com/openhitls
源码:
https://gitcode.com/openHiTLS/openhitls
分支:
https://gitcode.com/openHiTLS/openhitls/tree/openhitls-0.2
https://gitcode.com/openHiTLS/openhitls/tree/openhitls-0.3
发行版:
https://gitcode.com/openHiTLS/openhitls/releases
https://gitcode.com/openHiTLS/openhitls/releases/openhitls-0.2.2
https://gitcode.com/openHiTLS/openhitls/releases/openhitls-0.3.3
SDFX - 软件密码设备框架:
SDFX 是 GM/T 0018-2023 SDF(软件开发框架)标准的纯软件实现,使用 openHiTLS 作为底层密码库。该项目采用客户端-服务器架构,实现了完整的链路:SDK → 守护进程 → openHiTLS。
https://gitcode.com/openHiTLS/sdfx
CryptoKit SoftHSM:
CryptoKit SoftHSM 是一套基于 SDFX 和 openHiTLS 的 GM/T 0018-2023 SDF 接口兼容软件密码设备模拟器。项目提供 Linux Docker 服务端、内置 Web 管理端,以及通过 TCP 调用服务端的 Windows x64 SDF C SDK。
https://github.com/sawanolin/cryptokit-soft-hsm
我是利刃信安,网络安全和密码安全、数据安全领域的小白。
如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见
如有疑问,请联系:Mannix6
夜雨聆风