项目简介
本项目是优化后的C语言库libsecp256k1,用于在secp256k1曲线上开展ECDSA签名、秘密/公钥操作等密码学运算。目标是成为secp256k1曲线上最高质量的公开密码学库,虽最初为比特币系统开发,但也适用于其他类似场景。
项目的主要特性和功能
- 基础功能:支持secp256k1 ECDSA签名、验证与密钥生成,能对秘密/公钥进行加性和乘性调整,可对秘密密钥、公钥、签名进行序列化和解析。
- 性能优势:采用恒定时间和恒定内存访问进行签名和公钥生成,运算高效,适用于嵌入式系统。
- 随机化处理:支持通过RFC6979或调用者提供的函数进行去随机化ECDSA。
- 可选模块:提供公钥恢复、ECDH密钥交换、根据BIP - 340的Schnorr签名等可选模块。
安装使用步骤
编译安装
- 运行
./autogen.sh脚本。 - 执行
./configure进行配置,若编译可选模块,需添加额外标志,如--enable-module-schnorrsig,可运行./configure --help查看完整标志列表。 - 执行
make进行编译。 - 运行
make check执行测试套件。 - (可选)执行
sudo make install进行安装。
使用示例
使用示例可在examples目录中找到,编译示例需使用--enable-examples进行配置:
- ECDSA示例:examples/ecdsa.c
- Schnorr签名示例:examples/schnorr.c,编译此示例还需配置--enable-module-schnorrsig。
- 推导共享密钥(ECDH)示例:examples/ecdh.c,编译此示例还需配置--enable-module-ecdh。
测试覆盖
若要创建测试覆盖报告,需使用--enable-coverage进行配置(需使用GCC):
1. 执行./configure --enable-coverage。
2. 运行make check。
3. 推荐使用gcovr生成报告,可执行gcovr --exclude 'src/bench*' --print-summary。
4. 若要生成带有颜色和注释源代码的HTML报告,可执行mkdir -p coverage和gcovr --exclude 'src/bench*' --html --html-details -o coverage/coverage.html。
基准测试
若使用--enable-benchmark进行配置(默认开启),构建后根目录将存在用于对libsecp256k1函数进行基准测试的二进制文件:
- 若要将基准测试结果打印到命令行,可执行./bench_name。
- 若要创建基准测试结果的CSV文件,可执行./bench_name | sed '2d;s/ \{1,\}//g' > bench_name.csv。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】