libsecp256k1

Build Status

针对 secp256k1 曲线上的 ECDSA 签名和密钥操作优化的 C 语言库。

该库旨在成为公开可用的、针对 secp256k1 曲线密码学的最高质量的库。 然而,其开发的主要重点是在比特币系统中的使用,并且不同于比特币的用法可能测试、验证不足,或者接口设计不够周全。 正确使用需要一些谨慎和考虑,以确保该库适合您的应用程序用途。

特性

实验性特性尚未经过足够的审查以满足此库的质量标准,但可用于社区的测试和审查。 这些特性的 API 不应被认为是稳定的。

实现细节

构建步骤

libsecp256k1 使用 autotools 构建

$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install  # optional

详尽的测试

$ ./exhaustive_tests

使用 valgrind 时,您可能需要增加最大堆栈大小

$ valgrind --max-stackframe=2500000 ./exhaustive_tests

测试覆盖率

该库旨在完全覆盖可访问的行和分支。

要创建测试覆盖率报告,请使用 --enable-coverage 进行配置(必须使用 GCC)

$ ./configure --enable-coverage

运行测试

$ make check

要创建报告,建议使用 gcovr,因为它包括分支覆盖率报告

$ gcovr --exclude 'src/bench*' --print-summary

要创建带有彩色和注释源代码的 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

报告漏洞

请参见 SECURITY.md