Jamie-Cui/yacl-r

GitHub: Jamie-Cui/yacl-r

yacl-r 是一个用于密码学和安全计算研究的 C++ 基础库,提供了从底层加密原语到高层 MPC 协议的全栈实现。

Stars: 10 | Forks: 2

# 另一个用于研究的密码学库 ``` ██╗ ██╗ █████╗ ██████╗██╗ ██████╗ ╚██╗ ██╔╝██╔══██╗██╔════╝██║ ██╔══██╗ ╚████╔╝ ███████║██║ ██║ █████╗██████╔╝ ╚██╔╝ ██╔══██║██║ ██║ ╚════╝██╔══██╗ ██║ ██║ ██║╚██████╗███████╗ ██║ ██║ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═╝ ╚═╝ ``` Yacl-r 是 C++ 密码学库 [secretflow/yacl](https://github.com/secretflow/yacl) 的一个分支和扩展。它提供了 密码学和安全计算构建块的研究实现, 包括 OT、VOLE、TPRE、DPF、PRG、RO、AES、哈希、公钥加密、 签名,以及辅助的数学/通信(link)工具。 目标平台:Linux x86_64、Linux aarch64 和 macOS Apple Silicon。 ## 仓库结构 - [aead](yacl/aead/)、[aes](yacl/aes/)、 [block_cipher](yacl/block_cipher/)、[hash](yacl/hash/)、[hmac](yacl/hmac/): 对称加密、哈希和认证原语。 - [pke](yacl/pke/)、[sign](yacl/sign/)、[envelope](yacl/envelope/)、 [tpre](yacl/tpre/):公钥、签名、数字信封和门限代理 重加密代码。 - [ot](yacl/ot/):基础 OT、OT 扩展、OT 存储和 SimplestOT 后端。 - [vole](yacl/vole/):基础 VOLE、MP-VOLE、MPFSS 和无声 VOLE 代码。 - [mpc](yacl/mpc/):更高层的 MPC 内核和明文/秘密共享 执行器。 - [dpf](yacl/dpf/)、[oprf](yacl/oprf/)、[snark](yacl/snark/):额外的 协议实现。 - [io](yacl/io/):流式 I/O 和 Bristol Fashion 电路解析。 - [link](yacl/link/):RPC 风格的 SPMD 通信工具。 - [math](yacl/math/):大整数、有限域、ECC 和配对支持。 - [rand](yacl/rand/):随机性、DRBG、熵源和 OpenSSL provider 代码。 - [utils](yacl/utils/):通用类型、缓冲区、异常、序列化和 辅助工具。 - [theoretical_tools](yacl/theoretical_tools/):协议实现所使用的 PRG/RO/代码工具。 - [experimental](yacl/experimental/):不属于 稳定模块布局的实验性组件。 - [cmake](cmake/):CMake 模块、依赖脚本和依赖补丁。 ## 前置条件 - GCC >= 11 或 Clang >= 12,需支持 C++20 - CMake >= 3.20 - Ninja 或 Make - Perl 5 及其核心模块,OpenSSL 需要 - `patch`,用于应用依赖补丁 - 系统上可用的 GMP 开发文件 Ubuntu 示例: ``` sudo apt install -y git cmake ninja-build gcc g++ patch libgmp-dev ``` ## 构建 Yacl-r 使用 CMake。 ``` # 配置 Release 构建。 cmake -S . -B build -G Ninja # 配置 Debug 构建。 cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug # 构建。 cmake --build build -j$(nproc) ``` 使用 Clang/libFuzzer 构建 fuzz 目标: ``` cmake -S . -B build-fuzz -G Ninja \ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ -DBUILD_FUZZ=On cmake --build build-fuzz -j$(nproc) ``` ## 测试 在构建目录中运行测试: ``` cd build ctest --output-on-failure ctest -R plaintext_executor_test --output-on-failure ./bin/buffer_test ``` ## 格式化与检查 此仓库未配置 pre-commit 或自动的许可证头检查。 请改用常规的构建、测试以及专门的格式化/lint 命令: ``` clang-format -i path/to/file.cc clang-tidy path/to/file.cc -- -p build cmake --build build -j$(nproc) ctest --output-on-failure ``` ## 安装 Yacl-r 支持 `cmake --install`。 ``` cmake -S . -B build cmake --build build -j$(nproc) cmake --install build # 或者安装到自定义 prefix。 cmake --install build --prefix /path/to/prefix ``` 第三方内置依赖会被安装到安装前缀内的私有子目录中, 而不是被复制到系统范围的 include/library 路径中: - 公共头文件:`include/yacl-r/yacl/...` - 私有内置头文件:`include/yacl-r/deps/...` - 私有内置库:`lib*/yacl-r/deps/...` 这使得 Yacl-r 的内置依赖项与系统工具链和 不相关的项目保持隔离。在包使用阶段,GMP 仍然被解析为系统依赖项。 使用者可以通过 CMake 使用已安装的包: ``` find_package(Yacl CONFIG REQUIRED) target_link_libraries(your_target PRIVATE Yacl::yacl) ``` 导出的 target 会将 `include/yacl-r` 添加到 include 路径中,因此安装后的 使用者可以使用 `#include "yacl/..."` 来包含公共头文件。 ## 许可证 参见 [LICENSE](LICENSE)。
标签:Bash脚本, C++, 安全多方计算, 安全测试工具, 密码学, 密码学库, 底层原语, 手动系统调用, 数据擦除, 隐私计算