项目简介
本项目是优化后的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】