针对 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