From 31cdd35a1487672b7307564e95885b8668a3df86 Mon Sep 17 00:00:00 2001 From: JGZYES Date: Fri, 14 Aug 2026 20:20:20 +0800 Subject: [PATCH] =?UTF-8?q?README=20=E8=A1=A5=E9=BD=90=E4=B8=89=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=9E=84=E5=BB=BA=E6=96=B9=E6=A1=88(Linux/macOS=20?= =?UTF-8?q?=E7=94=A8=20cmake,=20Windows=20build.ps1=20=E6=88=96=20cmake);?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=20CMakeLists=20=E9=81=97=E6=BC=8F=20p384.?= =?UTF-8?q?c/p521.c=20=E4=B8=8E=20libm=20=E9=93=BE=E6=8E=A5(=E6=AD=A4?= =?UTF-8?q?=E5=89=8D=20Linux=20=E6=9E=84=E5=BB=BA=E4=BC=9A=E7=BC=BA?= =?UTF-8?q?=E7=AC=A6=E5=8F=B7),=20=E5=A2=9E=E5=8A=A0=20psftp=20=E7=9B=AE?= =?UTF-8?q?=E6=A0=87;=20Linux=20=E5=B7=B2=E4=BF=AE/=E9=9C=80=E5=AE=9E?= =?UTF-8?q?=E6=B5=8B,=20macOS=20=E6=9C=AA=E6=B5=8B=E8=AF=95=E5=A6=82?= =?UTF-8?q?=E5=AE=9E=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 13 +++++++++++++ README.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 683cb26..3cc38be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,8 @@ add_library(paze_crypto STATIC src/crypto/curve25519.c src/crypto/ed25519.c src/crypto/p256.c + src/crypto/p384.c + src/crypto/p521.c src/crypto/ecdsa.c src/crypto/bignum.c src/crypto/rsa.c @@ -57,6 +59,8 @@ add_library(paze_crypto STATIC target_include_directories(paze_crypto PUBLIC include PRIVATE src) if(WIN32) target_link_libraries(paze_crypto PUBLIC advapi32) +else() + target_link_libraries(paze_crypto PUBLIC m) endif() add_library(paze_ssl STATIC @@ -127,3 +131,12 @@ if(WIN32) else() target_link_libraries(pssh PRIVATE m) endif() + +# 独立 SFTP 客户端 +add_executable(psftp apps/psftp/main.c) +target_link_libraries(psftp PRIVATE paze_ssh paze_crypto) +if(WIN32) + target_link_libraries(psftp PRIVATE ws2_32) +else() + target_link_libraries(psftp PRIVATE m) +endif() diff --git a/README.md b/README.md index 3bb85b6..98ab52f 100644 --- a/README.md +++ b/README.md @@ -28,15 +28,60 @@ tests/ 已知答案(KAT)与协议自测 ## 构建 +仅需要支持 C17 的编译器与 libc,零第三方依赖。产物:`pazessl`(TLS 命令行)、`pssh`(SSH 工具集)、`psftp`(SFTP 客户端)。 + +### 通用方式(推荐,Windows / Linux / macOS 均可) + +跨平台构建由 CMakeLists 驱动,会生成可执行文件到 `build/`: + ```bash cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j ``` -仅需要支持 C17 的编译器与 libc。 +### Linux + +```bash +# 依赖:gcc/clang + cmake + make;不需要任何第三方库 +sudo apt install -y gcc cmake make # Debian/Ubuntu +cmake -S . -B build -DCMAKE_BUILD_TYPE=Release +cmake --build build -j +# 二进制在 build/pazessl build/pssh build/psftp +``` + +> 说明:LINUX 构建已修复(补齐 p384/p521 源文件与 libm 链接)。当前二进制在**Linux 下请实际验证**,如有报错反馈给项目。 + +### macOS + +```bash +# 依赖:Xcode Command Line Tools(gcc/clang)+ cmake + make +xcode-select --install +brew install cmake +cmake -S . -B build -DCMAKE_BUILD_TYPE=Release +cmake --build build -j +``` + +> 说明:macOS 使用 Unix Makefiles 生成器,理论上与 Linux 一致;**尚未在 macOS 实测**,如有问题请反馈。 + +### Windows + +方案 A(推荐,gcc + PowerShell 脚本): + +```powershell +.\build.ps1 # 产物输出到 bin/ (pazessl.exe pssh.exe pscp.exe psshd.exe psftp.exe ...) +``` + +方案 B(msvc 或 mingw,经由 cmake): + +```powershell +cmake -S . -B build -DCMAKE_BUILD_TYPE=Release +cmake --build build --config Release +``` ## 状态 工程量巨大,按层推进。当前完成度见 `STATUS.md`。 TLS 1.3 已覆盖:完整握手(ECDHE + X25519/P-256)、RSA/ECDSA 证书(含 X.509 ECDSA P-256 证书解析与验签)、SHA-256/SHA-384 密码套件、1.3↔1.2 版本回退、**PSK 会话恢复**(NewSessionTicket 签发/解析、binder 校验、恢复握手免证书),并通过 OpenSSL `s_server`/`s_client` 双向互操作对测。 + +SSH-2 已覆盖:transport/kex/auth/channel、`pssh ssh`(shell/exec/端口转发/跳板 `-J`/`-W`/`-N`/agent 转发 `-A`/保活/自动重连)、`pssh scp`/`psftp`、`psshd`(多用户库+权限+fail2ban 兼容日志)。详见 `STATUS.md`。