shrec/UltrafastSecp256k1
GitHub: shrec/UltrafastSecp256k1
一个用 C++20 编写的超高性能 secp256k1 椭圆曲线加密库,通过 CUDA、Metal、OpenCL、ROCm 等 GPU 后端将签名速度提升到百万级每秒,同时覆盖从服务器到嵌入式设备的 12 个以上平台。
Stars: 16 | Forks: 9
# UltrafastSecp256k1 -- 最快的开源 secp256k1 库
**零依赖、多后端 secp256k1 椭圆曲线加密库** -- GPU 加速 ECDSA 与 Schnorr 签名,恒定时间侧信道防护,支持 12+ 平台目标,包括 CUDA、Metal、OpenCL、ROCm、WebAssembly、RISC-V、ESP32 和 STM32。
### 为什么选择 UltrafastSecp256k1?
- **最快的开源 GPU 签名** -- 没有其他库能在 CUDA、OpenCL 和 Metal 上提供 secp256k1 ECDSA + Schnorr 签名/验证([可复现基准测试套件和原始日志](docs/BENCHMARKS.md))
- **零依赖** -- 纯 C++20,无 Boost,无 OpenSSL,只要有符合标准的编译器即可在任何地方编译
- **双层安全** -- 可变时间 FAST 路径用于吞吐量,恒定时间 CT 路径用于私钥操作
- **12+ 平台** -- x86-64、ARM64、RISC-V、WASM、iOS、Android、ESP32、STM32、CUDA、Metal、OpenCL、ROCm
**快速链接:** [Discord](https://discord.gg/sUmW7cc5) * [基准测试](docs/BENCHMARKS.md) * [构建指南](docs/BUILDING.md) * [API 参考](docs/API_REFERENCE.md) * [安全策略](SECURITY.md) * [威胁模型](THREAT_MODEL.md) * [移植指南](PORTING.md)
[](https://github.com/shrec/UltrafastSecp256k1/stargazers)
[](https://github.com/shrec/UltrafastSecp256k1/network/members)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/ci.yml)
[](https://shrec.github.io/UltrafastSecp256k1/dev/bench/)
[](https://github.com/shrec/UltrafastSecp256k1/releases/latest)
[](https://opensource.org/licenses/MIT)
[](https://en.cppreference.com/w/cpp/20)
[](https://scorecard.dev/viewer/?uri=github.com/shrec/UltrafastSecp256k1)
[](https://www.bestpractices.dev/projects/12011)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/codeql.yml)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/security-audit.yml)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/ct-arm64.yml)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/ct-verif.yml)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/valgrind-ct.yml)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/bench-regression.yml)
[](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/clang-tidy.yml)
[](https://sonarcloud.io/summary/overall?id=shrec_UltrafastSecp256k1)
[](https://codecov.io/gh/shrec/UltrafastSecp256k1)
[](https://discord.gg/sUmW7cc5)
**支持的区块链(基于 secp256k1):**
[](https://bitcoin.org)
[](https://ethereum.org)
[](https://litecoin.org)
[](https://dogecoin.com)
[](https://bitcoincash.org)
[](https://z.cash)
[](https://dash.org)
[](https://www.bnbchain.org)
[](https://polygon.technology)
[](https://avax.network)
[](https://arbitrum.io)
[](https://optimism.io)
[](#secp256k1-supported-coins-27-blockchains)
**GPU 与平台支持:**
[](https://developer.nvidia.com/cuda-toolkit)
[](https://www.khronos.org/opencl/)
[](metal/)
[](metal/)
[](cuda/README.md)
[](wasm/)
[](https://developer.android.com/ndk)
[](https://riscv.org/)
[](android/)
[](cmake/ios.toolchain.cmake)
[](https://www.espressif.com/en/products/socs/esp32-s3)
[](https://www.espressif.com/en/products/socs/esp32)
[](https://www.st.com/en/microcontrollers-microprocessors/stm32f103ze.html)
## [!] 安全声明
**研究与开发项目 -- 尚未审计**
本库**未经过独立安全审计**。仅供研究、教育和实验目的使用。
- [失败] 不建议在未进行独立加密审计的情况下用于生产环境
- [通过] 所有自检通过(76/76,包括所有后端)
- [通过] 双层恒定时间架构(FAST + CT 始终激活)
- [通过] 稳定的 C ABI (`ufsecp`) 包含 45 个导出函数
- [通过] 核心算术经过模糊测试(libFuzzer + ASan)
通过 [GitHub Security Advisories](https://github.com/shrec/UltrafastSecp256k1/security/advisories/new) 或电子邮件 [payysoon@gmail.com](mailto:payysoon@gmail.com) **报告漏洞**。
对于生产环境加密系统,建议使用经过审计的库,如 [libsecp256k1](https://github.com/bitcoin-core/secp256k1)。
## secp256k1 功能概览
功能按**成熟度层级**组织(详见 [SUPPORTED_GUARANTEES.md](include/ufsecp/SUPPORTED_GUARANTEES.md)):
| 层级 | 类别 | 组件 | 状态 |
|------|----------|-----------|--------|
| **1 -- 核心** | 域 / 标量 / 点 | GLV, 预计算, 批量求逆 | [通过] |
| **1 -- 核心** | 汇编 | x64 MASM/GAS, BMI2/ADX, ARM64, RISC-V RV64GC | [通过] |
| **1 -- 核心** | SIMD | AVX2/AVX-512 批量操作, Montgomery 批量求逆 | [通过] |
| **1 -- 核心** | 恒定时间 | CT 域/标量/点 -- 无秘密相关分支 | [通过] |
| **1 -- 核心** | ECDSA | 签名/验证, RFC 6979, DER/Compact, low-S, 恢复 | [通过] |
| **1 -- 核心** | Schnorr | BIP-340 签名/验证, 标签哈希, x-only 公钥 | [通过] |
| **1 -- 核心** | ECDH | 密钥交换(raw, xonly, SHA-256) | [通过] |
| **1 -- 核心** | 多标量 | Strauss/Shamir 双标量乘法 | [通过] |
| **1 -- 核心** | 批量验证 | ECDSA + Schnorr 批量验证 | [通过] |
| **1 -- 核心** | 哈希 | SHA-256 (SHA-NI), SHA-512, HMAC, Keccak-256 | [通过] |
| **1 -- 核心** | C ABI | `ufsecp` 稳定 FFI(45 个导出) | [通过] |
| **2 -- 协议** | BIP-32/44 | HD 派生, 路径解析, xprv/xpub, 币种类型 | [通过] |
| **2 -- 协议** | Taproot | BIP-341/342, 调整, Merkle 树 | [通过] |
| **2 -- 协议** | MuSig2 | BIP-327, 密钥聚合, 2 轮签名 | [通过] |
| **2 -- 协议** | FROST | 门限签名, t-of-n | [通过] |
| **2 -- 协议** | 适配器 | Schnorr + ECDSA 适配器签名 | [通过] |
| **2 -- 协议** | Pedersen | 承诺, 同态, 切换承诺 | [通过] |
| **3 -- 便捷** | 地址 | P2PKH, P2WPKH, P2TR, Base58, Bech32/m, EIP-55 | [通过] |
| **3 -- 便捷** | 币种 | 27 条区块链, 自动分发 | [通过] |
| -- | GPU | CUDA, Metal, OpenCL, ROCm 内核 | [通过] |
| -- | 平台 | x64, ARM64, RISC-V, ESP32, STM32, WASM, iOS, Android | [通过] |
### BIP-340 严格编码
所有公共 API 函数均强制执行 BIP-340 和 Bitcoin 共识要求的**规范输入编码**:
- `r >= p` 或 `s >= n` 的签名将被**拒绝,而非规约**
- `x >= p` 的公钥将被**拒绝,而非规约**
- 私钥必须满足 `1 <= sk < n`
C ABI (`ufsecp_*`) 返回不同的错误代码:`UFSECP_ERR_BAD_SIG`(非规范签名)与 `UFSECP_ERR_VERIFY_FAIL`(有效编码,数学错误)。详见 [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md)。
## 60 秒快速入门
一分钟内运行自检:
**选项 A -- Linux (apt)**
```
sudo apt install libufsecp3
ufsecp_selftest # Expected: "OK (version 3.x, backend CPU)"
```
**选项 B -- npm (任意操作系统)**
```
npm i ufsecp
node -e "require('ufsecp').selftest()" # Expected: "OK"
```
**选项 C -- Python (任意操作系统)**
```
pip install ufsecp
python -c "import ufsecp; ufsecp.selftest()" # Expected: "OK"
```
**选项 D -- 从源码构建**
```
git clone https://github.com/shrec/UltrafastSecp256k1.git && cd UltrafastSecp256k1
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release && cmake --build build -j
./build/selftest # Expected: "ALL TESTS PASSED"
```
## 平台支持矩阵
| 目标 | 后端 | 安装 / 入口 | 状态 |
|--------|---------|----------------------|--------|
| **Linux x64** | CPU | `apt install libufsecp3` | [通过] 稳定 |
| **Windows x64** | CPU | NuGet `UltrafastSecp256k1` / [Release .zip](https://github.com/shrec/UltrafastSecp256k1/releases) | [通过] 稳定 |
| **macOS (x64/ARM64)** | CPU + Metal | `brew install ufsecp` / 从源码构建 | [通过] 稳定 |
| **Android ARM64** | CPU | `implementation 'io.github.shrec:ufsecp'` (Maven) | [通过] 稳定 |
| **iOS ARM64** | CPU | Swift Package / CocoaPods / XCFramework | [通过] 稳定 |
| **浏览器 / Node.js** | WASM | `npm i ufsecp` | [通过] 稳定 |
| **ESP32-S3 / ESP32** | CPU | PlatformIO / IDF 组件 | [通过] 已测试 |
| **STM32 (Cortex-M)** | CPU | CMake 交叉编译 | [通过] 已测试 |
| **NVIDIA GPU** | CUDA 12+ | 使用 `-DSECP256K1_BUILD_CUDA=ON` 构建 | [通过] 稳定 |
| **AMD GPU** | ROCm/HIP | 使用 `-DSE256K1_BUILD_ROCM=ON` 构建 | [!] Beta |
| **Apple GPU** | Metal | 使用 Metal 后端构建 | [通过] 稳定 |
| **任意 GPU** | OpenCL | 使用 `-DSECP256K1_BUILD_OPENCL=ON` 构建 | [!] Beta |
| **RISC-V (RV64GC)** | CPU | 交叉编译 | [通过] 已测试 |
## 安装
### Linux (APT -- Debian / Ubuntu)
```
# 添加仓库
curl -fsSL https://shrec.github.io/UltrafastSecp256k1/apt/KEY.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/ultrafastsecp256k1.gpg
echo "deb [signed-by=/etc/apt/keyrings/ultrafastsecp256k1.gpg] https://shrec.github.io/UltrafastSecp256k1/apt stable main" \
| sudo tee /etc/apt/sources.list.d/ultrafastsecp256k1.list
sudo apt update
# 安装 (仅运行时)
sudo apt install libufsecp3
# 安装 (开发 -- 头文件、静态库、cmake/pkgconfig)
sudo apt install libufsecp-dev
```
### Linux (RPM -- Fedora / RHEL)
```
# 从 GitHub Releases 下载
curl -LO https://github.com/shrec/UltrafastSecp256k1/releases/latest/download/UltrafastSecp256k1-*.rpm
sudo dnf install ./UltrafastSecp256k1-*.rpm
```
### Arch Linux (AUR)
```
# 使用 yay
yay -S libufsecp
# 或手动
git clone https://aur.archlinux.org/libufsecp.git
cd libufsecp && makepkg -si
```
### 从源码构建(任意平台)
```
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DSECP256K1_BUILD_SHARED=ON \
-DSECP256K1_INSTALL=ON \
-DSECP256K1_USE_ASM=ON
cmake --build build -j$(nproc)
sudo cmake --install build
sudo ldconfig
```
### 在你的 CMake 项目中使用
```
find_package(ufsecp 3 REQUIRED)
target_link_libraries(myapp PRIVATE ufsecp::ufsecp)
```
### 配合 pkg-config 使用
```
g++ myapp.cpp $(pkg-config --cflags --libs ufsecp) -o myapp
```
## secp256k1 GPU 加速 (CUDA / OpenCL / Metal / ROCm)
UltrafastSecp256k1 是**唯一**在四种后端上提供完整 secp256k1 ECDSA + Schnorr 签名/验证的**开源库**(截至 2026 年 2 月;如果你知道其他的,[请告诉我们](https://github.com/shrec/UltrafastSecp256k1/issues)):
| 后端 | 硬件 | kG/s | ECDSA 签名 | ECDSA 验证 | Schnorr 签名 | Schnorr 验证 |
|---------|----------|------|------------|--------------|--------------|----------------|
| **CUDA** | RTX 5060 Ti | 4.59 M/s | 4.88 M/s | 2.44 M/s | 3.66 M/s | 2.82 M/s |
| **OpenCL** | RTX 5060 Ti | 3.39 M/s | -- | -- | -- | -- |
| **Metal** | Apple M3 Pro | 0.33 M/s | -- | -- | -- | -- |
| **ROCm (HIP)** | AMD GPU | 可移植 | -- | -- | -- | -- |
*CUDA 12.0, sm_86;sm_89, 批量=16K 签名。Metal 2.4, 8x32 位 Comba limbs, 18 个 GPU 核心。*
### CUDA 核心 ECC 操作(仅内核吞吐量)
| 操作 | 耗时/操作 | 吞吐量 |
|-----------|---------|------------|
| 域乘法 | 0.2 ns | 4,142 M/s |
| 域加法 | 0.2 ns | 4,130 M/s |
| 域求逆 | 10.2 ns | 98.35 M/s |
| 点加法 | 1.6 ns | 619 M/s |
| 点倍乘 | 0.8 ns | 1,282 M/s |
| 标量乘法 (Pxk) | 225.8 ns | 4.43 M/s |
| 生成元乘法 (Gxk) | 217.7 ns | 4.59 M/s |
| 批量求逆 | 2.9 ns | 340 M/s |
| Jac->Affine (每点) | 14.9 ns | 66.9 M/s |
### GPU 签名操作 (ECDSA + Schnorr)
| 操作 | 耗时/操作 | 吞吐量 | 协议 |
|-----------|---------|------------|----------|
| **ECDSA 签名** | **204.8 ns** | **4.88 M/s** | RFC 6979 + low-S |
| **ECDSA 验证** | **410.1 ns** | **2.44 M/s** | Shamir + GLV |
| **ECDSA 签名+recid** | **311.5 ns** | **3.21 M/s** | 可恢复 (EIP-155) |
| **Schnorr 签名** | **273.4 ns** | **3.66 M/s** | BIP-340 |
| **Schnorr 验证** | **354.6 ns** | **2.82 M/s** | BIP-340 + GLV |
### CUDA 与 OpenCL 对比 (RTX 5060 Ti)
| 操作 | CUDA | OpenCL | 胜出 |
|-----------|------|--------|--------|
| 域乘法 | 0.2 ns | 0.2 ns | 平局 |
| 域求逆 | 10.2 ns | 14.3 ns | **CUDA 1.40 倍** |
| 点倍乘 | 0.8 ns | 0.9 ns | **CUDA 1.13 倍** |
| 点加法 | 1.6 ns | 1.6 ns | 平局 |
| kG (生成元乘法) | 217.7 ns | 295.1 ns | **CUDA 1.36 倍** |
*基准测试:2026-02-14, Linux x86_64, NVIDIA 驱动 580.126.09。均为仅内核(无缓冲区分配/复制开销)。*
### Apple Metal (M3 Pro) -- 仅内核
| 操作 | 耗时/操作 | 吞吐量 |
|-----------|---------|------------|
| 域乘法 | 1.9 ns | 527 M/s |
| 域求逆 | 106.4 ns | 9.40 M/s |
| 点加法 | 10.1 ns | 98.6 M/s |
| 点倍乘 | 5.1 ns | 196 M/s |
| 标量乘法 (Pxk) | 2.94 us | 0.34 M/s |
| 生成元乘法 (Gxk) | 3.00 us | 0.33 M/s |
*Metal 2.4, 8x32 位 Comba limbs, Apple M3 Pro (18 个 GPU 核心, 统一内存 18 GB)*
## secp256k1 ECDSA 与 Schnorr 签名 (BIP-340, RFC 6979)
跨 CPU 和 GPU 的完整签名支持:
- **ECDSA**:RFC 6979 确定性 nonce,low-S 标准化,DER/Compact 编码,公钥恢复
- **Schnorr**:符合 BIP-340 -- 标签哈希,x-only 公钥
- **批量验证**:ECDSA 和 Schnorr 批量验证
- **多标量**:Shamir 技巧 (k_1xG + k_2xQ) 用于快速验证
### CPU 签名基准测试 (x86-64, Clang 19, AVX2, Release)
| 操作 | 耗时 | 吞吐量 |
|-----------|------:|----------:|
| ECDSA 签名 (RFC 6979) | 8.5 us | 118,000 op/s |
| ECDSA 验证 | 23.6 us | 42,400 op/s |
| Schnorr 签名 (BIP-340) | 6.8 us | 146,000 op/s |
| Schnorr 验证 (BIP-340) | 24.0 us | 41,600 op/s |
| 密钥生成 (CT) | 9.5 us | 105,500 op/s |
| 密钥生成 | 5.5 us | 182,000 op/s |
| ECDH | 23.9 us | 41,800 op/s |
*由于 nonce 派生更简单(无需模逆),Schnorr 签名比 ECDSA 签名快约 25%。单核、绑核测量,2026-02-21。*
## 恒定时间 secp256k1(侧信道防护)
`ct::` 命名空间为私钥材料提供恒定时间操作 -- 无秘密相关分支或内存访问模式:
| 操作 | Fast | CT | 开销 |
|-----------|------:|------:|--------:|
| 域乘法 | 17 ns | 23 ns | 1.08x |
| 域求逆 | 0.8 us | 1.7 us | 2.05x |
| 完整加法 | -- | 276 ns | -- |
| 标量乘法 | 23.6 us | 26.6 us | 1.13x |
| 生成元乘法 | 5.3 us | 9.9 us | 1.86x |
**CT 层提供:** `ct::field_mul`, `ct::field_inv`, `ct::scalar_mul`, `ct::point_add_complete`, `ct::point_dbl`
**CT 层用途**:私钥操作、签名、nonce 生成、ECDH。
**FAST 层用途**:验证、公钥派生、批处理、基准测试。
详见 [THREAT_MODEL.md](THREAT_MODEL.md) 的完整分层风险评估。
### CT 证据与方法论
| 证据 | 范围 | 状态 |
|----------|-------|--------|
| **无秘密相关分支** | 所有 `ct::` 函数 | [通过] 设计强制,通过 Clang-Tidy 检查验证 |
| **无秘密相关内存访问** | 所有 `ct::` 表查找使用恒定索引 cmov | [通过] |
| **ASan + UBSan CI** | 每次提交 -- 捕获 CT 路径中的未定义行为 | [通过] CI |
| **计时测试** | CPU 域/标量操作 | 🔜 计划中(见 [路线图](ROADMAP.md)) |
| **形式化 CT 验证** | Fiat-Crypto 风格 | 🔜 计划中 |
**假设**:CT 保证依赖于编译器在优化期间不引入秘密相关分支。构建使用带 Clang 的 `-O2`;MSVC 可能需要额外标志。微架构侧信道(Spectre、功耗分析)不在当前范围内 -- 见 [THREAT_MODEL.md](THREAT_MODEL.md)。
## secp256k1 基准测试 -- 跨平台对比
### CPU:x86-64 vs ARM64 vs RISC-V
| 操作 | x86-64 (Clang 21, AVX2) | ARM64 (Cortex-A76) | RISC-V (Milk-V Mars) |
|-----------|-------------------------:|--------------------:|---------------------:|
| 域乘法 | 17 ns | 74 ns | 95 ns |
| 域平方 | 14 ns | 50 ns | 70 ns |
| 域加法 | 1 ns | 8 ns | 11 ns |
| 域求逆 | 1 us | 2 us | 4 us |
| 点加法 | 159 ns | 992 ns | 1 us |
| 生成元乘法 | 5 us | 14 us | 33 us |
| 标量乘法 | 25 us | 131 us | 154 us |
### GPU:CUDA vs OpenCL vs Metal
| 操作 | CUDA (RTX 5060 Ti) | OpenCL (RTX 5060 Ti) | Metal (M3 Pro) |
|-----------|--------------------:|---------------------:|---------------:|
| 域乘法 | 0.2 ns | 0.2 ns | 1.9 ns |
| 域求逆 | 10.2 ns | 14.3 ns | 106.4 ns |
| 点加法 | 1.6 ns | 1.6 ns | 10.1 ns |
| 生成元乘法 | 217.7 ns | 295.1 ns | 3.00 us |
### 嵌入式:ESP32-S3 vs ESP32 vs STM32
| 操作 | ESP32-S3 LX7 (240 MHz) | ESP32 LX6 (240 MHz) | STM32F103 (72 MHz) |
|-----------|-------------------:|-------------------:|-------------------:|
| 域乘法 | 6,105 ns | 6,993 ns | 15,331 ns |
| 域平方 | 5,020 ns | 6,247 ns | 12,083 ns |
| 域加法 | 850 ns | 985 ns | 4,139 ns |
| 域求逆 | 2,524 us | 609 us | 1,645 us |
| **Fast** 标量 x G | 5,226 us | 6,203 us | 37,982 us |
| **CT** 标量 x G | 15,527 us | -- | -- |
| **CT** 生成元 x k | 4,951 us | -- | -- |
### 域表示:5x52 vs 4x64
| 操作 | 4x64 | 5x52 | 加速比 |
|-----------|------:|------:|--------:|
| 乘法 | 42 ns | 15 ns | **2.76x** |
| 平方 | 31 ns | 13 ns | **2.44x** |
| 加法 | 4.3 ns | 1.6 ns | **2.69x** |
| 加法链 (32 ops) | 286 ns | 57 ns | **5.01x** |
*5x52 使用 `__int128` 延迟规 -- 适合 64 位平台。*
完整基准测试结果见 [docs/BENCHMARKS.md](docs/BENCHMARKS.md)。
## secp256k1 嵌入式应用 (ESP32 / STM32 / ARM Cortex-M)
UltrafastSecp256k1 可在资源受限的微控制器上运行,采用**可移植 C++(无需 `__int128`,无需汇编)**:
- **ESP32-S3** (Xtensa LX7 @ 240 MHz):Fast 标量 x G 为 5.2 ms,**CT 生成元 x k 为 4.9 ms**
- **ESP32-PICO-D4** (Xtensa LX6 @ 240 MHz):标量 x G 为 6.2 ms,CT 层可用(44.8 ms CT)
- **STM32F103** (ARM Cortex-M3 @ 72 MHz):带 ARM 内联汇编的标量 x G 为 38 ms (UMULL/ADDS/ADCS)
- **Android ARM64** (RK3588, Cortex-A76 @ 2.256 GHz):标量 x G 为 14 us,标量 x P 为 131 us,ECDSA 签名 30 us
所有 37 个库测试在每个嵌入式目标上均通过。见 [examples/esp32_test/](examples/esp32_test/) 和 [examples/stm32_test/](examples/stm32_test/)。
### 移植到新平台
添加新 CPU 架构、嵌入式目标或 GPU 后端的分步检查清单,见 [PORTING.md](PORTING.md)。
## WASM secp256k1(浏览器与 Node.js)
通过 Emscripten 构建 WebAssembly -- 在任何现代浏览器或 Node.js 中运行 secp256k1:
```
./scripts/build_wasm.sh # -> build/wasm/dist/
```
输出:`secp256k1_wasm.wasm` + `secp256k1.mjs`(带 TypeScript 声明的 ES6 模块)。
JavaScript/TypeScript 集成见 [wasm/README.md](wasm/README.md)。
## secp256k1 批量模逆(Montgomery 技巧)
所有后端均包含**批量模逆** -- Jacobian->Affine 转换的关键构建块:
| 后端 | 函数 | 备注 |
|---------|----------|-------|
| **CPU** | `fe_batch_inverse(FieldElement*, size_t)` | 带 scratch buffer 的 Montgomery 技巧 |
| **CUDA** | `batch_inverse_montgomery` / `batch_inverse_kernel` | GPU Montgomery 技巧内核 |
| **Metal** | `batch_inverse` | 分块并行线程组 |
| **OpenCL** | 内联 PTX 求逆 | 通过 host 编排批量操作 |
**算法**:Montgomery 批量求逆仅使用 **1 次模逆 + 3(N-1) 次乘法**计算 N 次域求逆,将昂贵的求逆分摊到整个批次。
对于 N=1024:比单独求逆便宜约 500 倍。单次域求逆约 3.5 us(费马法),而批量分摊后每元素约 7 ns。
### 混合加法(Jacobian + Affine)
无分支混合加法(`add_mixed_inplace`)使用 **madd-2007-bl** 公式:**7M + 4S**(完整 Jacobian 加法为 11M + 5S)。
```
#include
using namespace secp256k1::fast;
Point P = Point::generator();
FieldElement gx = P.x(), gy = P.y();
// Compute 2G using mixed add (7M + 4S)
Point Q = Point::generator();
Q.add_mixed_inplace(gx, gy); // Q = G + G = 2G
// Batch walk: P, P+G, P+2G, ...
Point walker = P;
for (int i = 0; i < 1000; ++i) {
walker.add_mixed_inplace(gx, gy); // walker += G each step
}
```
### GPU 模式:H-Product 串行求逆
生产级 GPU 应用使用一种内存高效变体:`jacobian_add_mixed_h` 不存储完整 Z 坐标,而是单独返回 **H = U2 - X1**。由于 Z_k = Z_0 * H_0 * H_1 * … * H_{k-1},整个 Z 链可从 H 值 + 初始 Z_0 求逆。
**代价**:每线程 1 次费马求逆 + 2N 次乘法(相比朴素 N 次费马求逆)。
## secp256k1 稳定 C ABI (`ufsecp`) -- FFI 绑定
从 **v3.4.0** 开始,UltrafastSecp256k1 提供稳定的 C ABI -- `ufsecp` -- 专用于 FFI 绑定(C#、Python、Rust、Go、Java、Node.js 等):
```
+--------------------------------------------------+
| Your Application |
| (C, C#, Python, Go, Rust, …) |
+------------------+-------------------------------+
| ufsecp C ABI (45 functions)
+------------------▼-------------------------------+
| ufsecp.dll / libufsecp.so |
| Opaque ctx | Error model | ABI versioning |
+--------------+---------------+-------------------+
| FAST layer (variable-time public ops) |
+--------------------------------------------------+
| CT layer (constant-time secret-key ops) |
+--------------------------------------------------+
```
**默认行为:**
- **C ABI (`ufsecp`)**:默认为安全行为 -- 所有私钥操作(签名、派生、ECDH)内部使用 CT。无需配置。
- **C++ API**:同时暴露 `fast::` 和 `ct::` 命名空间 -- 开发者在每个调用点显式选择。
### 快速入门 (C)
```
#include "ufsecp.h"
ufsecp_ctx* ctx = NULL;
ufsecp_ctx_create(&ctx);
// Generate keypair
unsigned char seckey[32], pubkey[33];
ufsecp_keygen(ctx, seckey, pubkey);
// ECDSA sign
unsigned char msg[32] = { /* SHA-256 hash */ };
unsigned char sig[64];
ufsecp_ecdsa_sign(ctx, seckey, msg, sig);
// Verify
int valid = 0;
ufsecp_ecdsa_verify(ctx, pubkey, 33, msg, sig, &valid);
ufsecp_ctx_destroy(ctx);
```
### API 覆盖
| 类别 | 函数 |
|----------|-----------|
| **上下文** | `ctx_create`, `ctx_destroy`, `selftest`, `last_error` |
| **密钥** | `keygen`, `seckey_verify`, `pubkey_create`, `pubkey_parse`, `pubkey_serialize` |
| **ECDSA** | `ecdsa_sign`, `ecdsa_verify`, `ecdsa_sign_der`, `ecdsa_verify_der`, `ecdsa_recover` |
| **Schnorr** | `schnorr_sign`, `schnorr_verify` |
| **SHA-256** | `sha256` (SHA-NI 加速) |
| **ECDH** | `ecdh_compressed`, `ecdh_xonly`, `ecdh_raw` |
| **BIP-32** | `bip32_from_seed`, `bip32_derive_child`, `bip32_serialize` |
| **地址** | `address_p2pkh`, `address_p2wpkh`, `address_p2tr` |
| **WIF** | `wif_encode`, `wif_decode` |
| **Tweak** | `pubkey_tweak_add`, `pubkey_tweak_mul` |
| **版本** | `version`, `abi_version`, `version_string` |
第 1/2/3 层稳定性保证见 [SUPPORTED_GUARANTEES.md](include/ufsecp/SUPPORTED_GUARANTEES.md)。
## secp256k1 用例
- **交易签名与验证** -- Bitcoin、Ethereum 及 25+ 条区块链交易签名,支持 CPU 或 GPU 规模
- **批量签名验证** -- 每秒验证数千个 ECDSA/Schnorr 签名,用于区块验证
- **HD 钱包密钥派生** -- BIP-32/44 分层确定性派生,支持 27 种币地址生成
- **嵌入式物联网签名** -- ESP32 和 STM32 设备端密钥生成与交易签名
- **高吞吐量索引** -- GPU 加速公钥派生,用于地址索引服务
- **零知识证明系统** -- Pedersen 承诺、适配器签名,用于 ZK 协议
- **多方计算** -- MuSig2 (BIP-327) 和 FROST 门限签名
- **跨平台加密服务** -- 单一代码库跨服务器、桌面、移动端 (ARM64)、浏览器 (WASM) 和嵌入式 (ESP32/STM32)
- **加密研究与基准测试** -- 域/群操作微基准测试、算法变体比较
## 从源码构建 secp256k1 (CMake)
### 前置条件
- CMake 3.18+
- C++20 编译器(GCC 11+, Clang/LLVM 15+, MSVC 2022+ 带 `-DSECP256K1_ALLOW_MSVC=ON`)
- CUDA Toolkit 12.0+(可选,用于 GPU)
- Ninja(推荐)
### 仅 CPU 构建
```
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
```
### 含 CUDA GPU 支持
```
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DSECP256K1_BUILD_CUDA=ON
cmake --build build -j
```
### WebAssembly (Emscripten)
```
./scripts/build_wasm.sh # -> build/wasm/dist/
```
### iOS (XCFramework)
```
./scripts/build_xcframework.sh # -> build/xcframework/output/
```
通用 XCFramework(arm64 设备 + arm64 模拟器)。也可通过 **Swift Package Manager** 和 **CocoaPods** 获取。
### 构建选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `SECP256K1_USE_ASM` | ON | 汇编优化 (x64/ARM64/RISC-V) |
| `SECP256K1_BUILD_CUDA` | OFF | CUDA GPU 支持 |
| `SECP256K1_BUILD_OPENCL` | OFF | OpenCL GPU 支持 |
| `SECP256K1_BUILD_ROCM` | OFF | ROCm/HIP GPU 支持 (AMD) |
| `SECP256K1_BUILD_TESTS` | ON | 测试套件 |
| `SECP256K1_BUILD_BENCH` | ON | 基准测试 |
| `SECP256K1_RISCV_FAST_REDUCTION` | ON | 快速模约简 (RISC-V) |
| `SECP256K1_RISCV_USE_VECTOR` | ON | RVV 向量扩展 (RISC-V) |
详细构建说明见 [docs/BUILDING.md](docs/BUILDING.md)。
## secp256k1 快速入门(C++ 示例)
### 基本点操作
```
#include
#include
#include
#include
using namespace secp256k1::fast;
int main() {
// Public key derivation: private_key x G = public_key
auto generator = Point::generator();
auto private_key = Scalar::from_hex(
"E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262"
);
auto public_key = generator * private_key;
std::cout << "Public Key X: " << public_key.x().to_hex() << "\n";
std::cout << "Public Key Y: " << public_key.y().to_hex() << "\n";
return 0;
}
```
```
g++ -std=c++20 example.cpp -lufsecp -o example && ./example
```
### GPU 批量乘法
```
#include
#include
#include
using namespace secp256k1::fast;
int main() {
std::vector base_points(1'000'000, Point::generator());
std::vector scalars(1'000'000);
for (auto& s : scalars) s = Scalar::random();
cuda::BatchConfig config{.device_id = 0, .threads_per_block = 256, .streams = 4};
auto results = cuda::batch_multiply(base_points, scalars, config);
std::cout << "Processed " << results.size() << " point multiplications\n";
return 0;
}
```
## secp256k1 安全模型 (FAST vs CT)
两个安全配置**始终处于活动状态** -- 无基于标志的选择:
### FAST 配置(默认)
- 最大吞吐量,可变时间算法
- 用于:验证、批处理、公钥派生、基准测试
- [!] **不适用于私钥操作** -- 可能存在计时侧信道
### CT / 加固配置(`ct::` 命名空间)
- 恒定时间算术 -- 无秘密相关分支或内存访问
- 相比 FAST 约 5-7 倍性能损失
- 用于:签名、私钥处理、nonce 生成、ECDH
**根据用例选择合适的配置。** 对秘密数据使用 FAST 是安全漏洞。
详见 [THREAT_MODEL.md](THREAT_MODEL.md)。
## secp256k1 支持的币种(27 条区块链)
| # | 币种 | 代码 | 地址类型 | BIP-44 |
|---|------|--------|---------------|--------|
| 1 | **Bitcoin** | BTC | P2PKH, P2WPKH (Bech32), P2TR (Bech32m) | m/86'/0' |
| 2 | **Ethereum** | ETH | EIP-55 校验和 | m/44'/60' |
| 3 | **Litecoin** | LTC | P2PKH, P2WPKH | m/84'/2' |
| 4 | **Dogecoin** | DOGE | P2PKH | m/44'/3' |
| 5 | **Bitcoin Cash** | BCH | P2PKH | m/44'/145' |
| 6 | **Bitcoin SV** | BSV | P2PKH | m/44'/236' |
| 7 | **Zcash** | ZEC | P2PKH (透明) | m/44'/133' |
| 8 | **Dash** | DASH | P2PKH | m/44'/5' |
| 9 | **DigiByte** | DGB | P2PKH, P2WPKH | m/44'/20' |
| 10 | **Namecoin** | NMC | P2PKH | m/44'/7' |
| 11 | **Peercoin** | PPC | P2PKH | m/44'/6' |
| 12 | **Vertcoin** | VTC | P2PKH, P2WPKH | m/44'/28' |
| 13 | **Viacoin** | VIA | P2PKH | m/44'/14' |
| 14 | **Groestlcoin** | GRS | P2PKH, P2WPKH | m/44'/17' |
| 15 | **Syscoin** | SYS | P2PKH | m/44'/57' |
| 16 | **BNB Smart Chain** | BNB | EIP-55 | m/44'/60' |
| 17 | **Polygon** | MATIC | EIP-55 | m/44'/60' |
| 18 | **Avalanche** | AVAX | EIP-55 (C-Chain) | m/44'/60' |
| 19 | **Fantom** | FTM | EIP-55 | m/44'/60' |
| 20 | **Arbitrum** | ARB | EIP-55 | m/44'/60' |
| 21 | **Optimism** | OP | EIP-55 | m/44'/60' |
| 22 | **Ravencoin** | RVN | P2PKH | m/44'/175' |
| 23 | **Flux** | FLUX | P2PKH | m/44'/19167' |
| 24 | **Qtum** | QTUM | P2PKH | m/44'/2301' |
| 25 | **Horizen** | ZEN | P2PKH | m44'/121' |
| 26 | **Bitcoin Gold** | BTG | P2PKH | m/44'/156' |
| 27 | **Komodo** | KMD | P2PKH | m/44'/141' |
所有 EVM 链(ETH、BNB、MATIC、AVAX、FTM、ARB、OP)共享相同的地址格式(EIP-55 带校验和的十六进制)。
## secp256k1 架构
```
UltrafastSecp256k1/
+-- cpu/ # CPU-optimized implementation
| +-- include/ # Public headers (field.hpp, scalar.hpp, point.hpp, ecdsa.hpp, schnorr.hpp)
| +-- src/ # Implementation (field_asm_x64.asm, field_asm_riscv64.S, ...)
| +-- fuzz/ # libFuzzer harnesses
| +-- tests/ # Unit tests
+-- cuda/ # CUDA GPU acceleration
+-- opencl/ # OpenCL GPU acceleration
+-- metal/ # Apple Metal GPU acceleration
+-- wasm/ # WebAssembly (Emscripten)
+-- android/ # Android NDK (ARM64)
+-- include/ufsecp/ # Stable C ABI
+-- examples/
| +-- esp32_test/ # ESP32-S3 Xtensa LX7 port
| +-- stm32_test/ # STM32F103 ARM Cortex-M3 port
+-- docs/ # Documentation
```
## secp256k1 测试与验证
### 内置自检
每个可执行文件在启动时运行确定性的**已知答案测试 (KAT)**,覆盖所有算术操作:
| 模式 | 耗时 | 时机 | 内容 |
|------|------|------|------|
| **smoke** | ~1-2s | 应用启动, 嵌入式 | 核心 KAT(10 次标量乘,域/标量恒等式,边界向量) |
| **ci** | ~30-90s | 每次提交 (CI) | Smoke + 交叉检查, 双线性, NAF/wNAF, 批量扫描, 代数压力 |
| **stress** | ~10-60min | 每日 / 手动 | CI + 1000 次随机标量乘, 500 个域三元组, 批量求逆至 8192 |
```
#include "secp256k1/selftest.hpp"
using namespace secp256k1::fast;
Selftest(true, SelftestMode::smoke); // Fast startup check
Selftest(true, SelftestMode::ci); // Full CI suite
Selftest(true, SelftestMode::stress, 0xDEADBEEF); // Nightly with custom seed
```
### 消毒剂构建
```
cmake --preset cpu-asan && cmake --build build/cpu-asan -j # ASan + UBSan
cmake --preset cpu-tsan && cmake --build build/cpu-tsan -j # TSan (data races)
ctest --test-dir build/cpu-asan --output-on-failure
```
### 模糊测试
libFuzzer 覆盖核心算术 (`cpu/fuzz/`):
| 目标 | 测试内容 |
|--------|---------------|
| `fuzz_field` | 加/减往返, 乘法恒等, 平方, 求逆 |
| `fuzz_scalar` | 加/减, 乘法恒等, 分配律 |
| `fuzz_point` | 曲线上检查, 取反, 压缩往返, 倍乘 vs 加法 |
### 平台 CI 覆盖
| 平台 | 后端 | 编译器 | 状态 |
|----------|---------|----------|--------|
| Linux x64 | CPU | GCC 13 / Clang 17 | [通过] CI |
| Linux x64 | CPU | Clang 17 (ASan+UBSan) | [通过] CI |
| Linux x64 | CPU | Clang 17 (TSan) | [通过] CI |
| Windows x64 | CPU | MSVC 2022 | [通过] CI |
| macOS ARM64 | CPU + Metal | AppleClang | [通过] CI |
| iOS ARM64 | CPU | Xcode | [通过] CI |
| Android ARM64 | CPU | NDK r27c | [通过] CI |
| WebAssembly | CPU | Emscripten | [通过] CI |
| ROCm/HIP | CPU + GPU | ROCm 6.3 | [通过] CI |
### 跨平台审计结果
`unified_audit_runner` 执行 **49 个审计模块**,涵盖 8 个部分
(数学不变量、恒定时间分析、差分测试、标准向量、模糊测试、协议安全、ABI 安全、性能验证)。
| 平台 | 操作系统 | 编译器 | 模块数 | 结论 | 耗时 |
|----------|----|----------|---------|---------|------|
| Windows (本地) | Windows x86-64 | Clang 21.1.0 | 48/49 | 审计就绪 | 39 s |
| Linux Docker | Linux x86-64 | GCC 13.3.0 | 48/49 | 审计就绪 | 46 s |
| Linux CI | Linux x86-64 | Clang 17.0.6 | 46/46 | 审计就绪 | 44 s |
| Linux CI | Linux x86-64 | GCC 13.3.0 | 46/46 | 审计就绪 | 48 s |
| Windows CI | Windows x86-64 | MSVC 1944 | 45/45 | 审计就绪 | 139 s |
## secp256k1 基准测试目标
| 目标 | 描述 |
|--------|-------------|
| `bench_comprehensive` | 完整的域/点/批量/签名套件 |
| `bench_scalar_mul` | kxG 和 kxP 及 wNAF 分析 |
| `bench_ct` | Fast-vs-CT 开销对比 |
| `bench_atomic_operations` | 单个 ECC 构建块延迟 |
| `bench_field_52` | 4x64 vs 5x52 域表示 |
| `bench_ecdsa_multiscalar` | k_1xG + k_2xQ (Shamir vs 分开) |
| `bench_jsf_vs_shamir` | JSF vs 窗口 Shamir 对比 |
| `bench_adaptive_glv` | GLV 窗口大小扫描 (8-20) |
| `bench_comprehensive` | 跨平台基准测试套件(所有操作) |
## 研究声明
本库探索 **secp256k1 在 CPU 架构(x64、ARM64、RISC-V、Cortex-M、Xtensa)和 GPU(CUDA、OpenCL、Metal、ROCm)上的性能极限**。零外部依赖。纯 C++20。
## API 稳定性
**C++ API**:尚未稳定。**v4.0** 之前可能会发生破坏性更改。核心层(域、标量、点、ECDSA、Schnorr)已成熟。实验层(MuSig2、FROST、适配器、Pedersen、Taproot、HD、币种)可能会更改。
**C ABI (`ufsecp`)**:从 v3.4.0 起稳定。ABI 版本单独追踪。见 [SUPPORTED_GUARANTEES.md](include/ufsecp/SUPPORTED_GUARANTEES.md)。
## 发布签名与验证
从 **v3.15.0** 开始,所有发布版本均使用
[Sigstore cosign](https://docs.sigstore.dev/)(无密钥,GitHub OIDC 身份)进行加密签名。
较旧的历史版本未签名,但保持原样保留。
每次发布包含:
| 制品 | 用途 |
|----------|---------|
| `SHA256SUMS` | 所有发布归档的校验和 |
| `SHA256SUMS.sig` | 清单的 Cosign 签名 |
| `SHA256SUMS.pem` | 签名证书 |
| `sbom.cdx.json` | CycloneDX 软件物料清单 |
| 每个归档的 `.sig` + `.pem` | 单独的制品签名 |
### 验证校验和
**Linux:**
```
curl -LO https://github.com/shrec/UltrafastSecp256k1/releases/latest/download/SHA256SUMS
sha256sum -c SHA256SUMS
```
**macOS:**
```
shasum -a 256 -c SHA256SUMS
```
**Windows (PowerShell):**
```
Get-Content SHA256SUMS | ForEach-Object {
$parts = $_ -split ' '
$expected = $parts[0]; $file = $parts[1]
$actual = (Get-FileHash $file -Algorithm SHA256).Hash.ToLower()
if ($actual -eq $expected) { "[OK] $file" } else { "[FAIL] $file" }
}
```
### 验证签名
```
cosign verify-blob SHA256SUMS \
--signature SHA256SUMS.sig \
--certificate SHA256SUMS.pem \
--certificate-identity-regexp "github.com/shrec/UltrafastSecp256k1" \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
```
| 供应链 | 状态 |
|-------------|--------|
| 所有制品的 SHA256SUMS | [通过] 每次发布 |
| Cosign / Sigstore 清单签名 | [通过] v3.15.0+ |
| 每个制品的 Cosign 签名 | [通过] v3.15.0+ |
| SLSA 构建来源 | [通过] 每次发布 |
| CycloneDX SBOM | [通过] 每次发布 |
| 可复现构建文档 | [通过] Dockerfile.reproducible |
## 常见问题
**UltrafastSecp256k1 是 libsecp256k1 的直接替代品吗?**
**API 稳定吗?**
**恒定时间的范围是什么?**
**哪些部分目前在生产环境中是安全的?**
**如何复现基准测试?**
## 文档
| 文档 | 描述 |
|----------|-------------|
| [API 参考](docs/API_REFERENCE.md) | 完整 C++ 和 C ABI 参考 |
| [构建指南](docs/BUILDING.md) | 所有平台的详细构建说明 |
| [基准测试](docs/BENCHMARKS.md) | 完整的基准测试结果和方法论 |
| [威胁模型](THREAT_MODEL.md) | 分层安全风险评估 |
| [安全策略](SECURITY.md) | 漏洞报告和审计状态 |
| [移植指南](PORTING.md) | 添加新平台、架构、GPU 后端 |
| [RISC-V 优化](RISCV_OPTIMIZATIONS.md) | RISC-V 汇编细节 |
| [ESP32 设置](docs/ESP32_SETUP.md) | ESP32 嵌入式开发指南 |
| [贡献](CONTRIBUTING.md) | 开发指南 |
| [更新日志](CHANGELOG.md) | 版本历史 |
## 贡献
欢迎贡献!请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
```
git clone https://github.com/shrec/UltrafastSecp256k1.git
cd UltrafastSecp256k1
cmake -S . -B build/dev -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build/dev -j
ctest --test-dir build/dev --output-on-failure
```
## 许可证
**MIT License**
本项目采用 MIT 许可证授权。
之前的发布版本(至 v3.14.x)采用 AGPL-3.0。
从 v3.15.0 起,许可证改为 MIT -- 以便与更广泛的 Bitcoin 生态系统保持一致
并减少采用阻力。
详见 [LICENSE](LICENSE)。
## 联系与社区
| 渠道 | 链接 |
|---------|------|
| 问题 | [GitHub Issues](https://github.com/shrec/UltrafastSecp256k1/issues) |
| 讨论 | [GitHub Discussions](https://github.com/shrec/UltrafastSecp256k1/discussions) |
| Wiki | [文档 Wiki](https://github.com/shrec/UltrafastSecp256k1/wiki) |
| 基准测试 | [实时仪表板](https://shrec.github.io/UltrafastSecp256k1/dev/bench/) |
| 安全 | [报告漏洞](https://github.com/shrec/UltrafastSecp256k1/security/advisories/new) |
| 商业 | [payysoon@gmail.com](mailto:payysoon@gmail.com) |
## 致谢
UltrafastSecp256k1 是一个独立实现 -- 从头编写,拥有自己的架构、GPU 管线、嵌入式移植和优化技术。同时,没有项目存在于真空中。更广泛加密社区的公开研究、规范和开放讨论帮助我们完善了自己的想法并验证了我们的结果。
我们要感谢那些公开工作为我们部分旅程提供参考的团队:
- **[bitcoin-core/secp256k1](https://github.com/bitcoin-core/secp256k1)** -- 参考性 C 库,其关于恒定时间域算术和基于自同态的标量乘法(GLV、Strauss、Pippenger)的公开研究帮助我们基准测试和验证了自己在 GPU 和嵌入式目标上的独立实现。
- **[Bitcoin Core](https://github.com/bitcoin/bitcoin)** 贡献者 -- 感谢开放规范(BIP-340 Schnorr、BIP-341 Taproot、RFC 6979)和以正确性为先的工程文化,这惠及了在此领域构建的所有人。
- **Pieter Wuille, Jonas Nick, Tim Ruffing** 和 libsecp256k1 维护者 -- 感谢公开分享他们关于侧信道防护、穷举测试和域表示权衡的研究。他们发表的发现帮助我们在设计自己的架构时做出了更好的决策。
我们自由分享我们的优化、GPU 内核、嵌入式移植和跨平台技术 -- 因为当知识自由流动时,开源加密技术会变得更强大。
特别感谢 [Stacker News](https://stacker.news) 和 [Delving Bitcoin](https://delvingbitcoin.org) 社区的早期支持和技术反馈。
额外感谢 [@0xbitcoiner](https://stacker.news/0xbitcoiner) 的初步联系以及帮助项目与更广泛的 Bitcoin 开发者生态系统建立桥梁。
## ⚡ 支持项目
如果你觉得 **UltrafastSecp256k1** 有用,请考虑支持其开发!
[](https://stacker.news/shrec)
**Lightning 地址:** `shrec@stacker.news` -- 通过任意 Lightning 钱包或 [stacker.news/shrec](https://stacker.news/shrec) 发送 sats
[](https://github.com/sponsors/shrec)
[](https://paypal.me/IChkheidze)
**UltrafastSecp256k1** -- 最快的开源 secp256k1 库。为 Bitcoin、Ethereum 和 25+ 条区块链提供 GPU 加速的 ECDSA 与 Schnorr 签名。零依赖。恒定时间层。12+ 平台。
标签:AI工具, Apple Silicon, ARM架构, Bash脚本, C++20, CSV导出, CUDA, CVE, DNS 反向解析, ECDSA, ESP32, M1, M2, M3, M4, Metal, OpenCL, RISC-V, ROCm, Schnorr签名, secp256k1, STM32, Vectored Exception Handling, Veh, WASM, WebAssembly, Web报告查看器, 区块链, 密码学, 嵌入式系统, 开源库, 异构计算, 恒定时间编程, 手动系统调用, 抗侧信道攻击, 搜索引擎爬虫, 数字签名, 椭圆曲线加密, 比特币, 零依赖