#benchmark #scalar #ecdh #field #different #key #hash

bitcoinsecp256k1-bench

secp256k1子系统的基准测试

2个版本

0.1.16-alpha.02023年4月2日
0.1.12-alpha.02023年3月4日

#12 in #ecdh

MIT许可证

2MB
6K SLoC

Rust 5K SLoC // 0.8% comments GNU Style Assembly 741 SLoC // 0.1% comments

bitcoinsecp256k1-bench crate描述

该crate是比特币系统的一部分,是C++比特币核心的Rust翻译。它为各种secp256k1函数提供基准测试工具。

注意:“该crate是比特币核心从C++直接翻译到Rust的结果。因此,一些函数体可能仍在翻译过程中。请注意,翻译完成后,此系统将可进行测试。”

以下是该crate的令牌列表及其用途的简要描述

  • BenchEcdhData:表示用于基准测试ECDH的数据的结构。

  • bench_ecdh:基准测试ECDH。

  • bench_ecdh_setup:为ECDH基准测试做准备。

  • secp256k1_bench_ecdh_main:ECDH基准测试的主函数。

  • BenchSignData:表示用于基准测试签名的数据的结构。

  • bench_sign_run:运行签名基准测试。

  • bench_sign_setup:为签名基准测试做准备。

  • secp256k1_bench_sign_main:签名基准测试的主函数。

  • BenchVerifyData:表示用于基准测试签名验证的数据的结构。

  • bench_verify:基准测试签名验证。

  • bench_verify_openssl:使用OpenSSL基准测试签名验证。

  • secp256k1_bench_verify_main:签名验证基准测试的主函数。

  • BenchData:表示用于各种基准测试的数据的结构。

  • bench_ecmult_1:基准测试恒时标量乘法。

  • bench_ecmult_1_teardown:恒时标量乘法基准测试后的清理。

  • bench_ecmult_1g:基准测试恒时乘以生成器。

  • bench_ecmult_1g_teardown:恒时乘以生成器基准测试后的清理。

  • bench_ecmult_2g:基准测试恒时乘以2倍的生成器。

  • bench_ecmult_2g_teardown:恒时乘以2倍的生成器基准测试后的清理。

  • bench_ecmult_const:基准测试可变时标量乘法。

  • bench_ecmult_const_teardown:可变时标量乘法基准测试后的清理。

  • bench_ecmult_gen:基准测试乘以生成器。

  • bench_ecmult_gen_teardown:乘以生成器基准测试后的清理。

  • bench_ecmult_multi:基准测试多个标量乘法。

  • bench_ecmult_multi_callback:基准测试多个标量乘法的辅助函数。

  • bench_ecmult_multi_setup:为多个标量乘法基准测试做准备。

  • bench_ecmult_multi_teardown:多个标量乘法基准测试后的清理。

  • bench_ecmult_setup:为标量乘法基准测试做准备。

  • bench_ecmult_teardown_helper:标量乘法基准测试后的清理辅助函数。

  • generate_scalar:生成随机标量。

  • hash_into_offset:将哈希转换为偏移量。

  • help:显示帮助信息。

  • run_ecmult_bench:运行标量乘法基准测试。

  • run_ecmult_multi_bench:运行多个标量乘法基准测试。

  • secp256k1_bench_ecmult_main:标量乘法基准测试的主函数。

  • BenchInv:基准反转。

  • bench_context_sign:基准测试secp256k1_context_create_signing()函数。

  • bench_context_verify:基准测试secp256k1_context_create_verify()函数。

  • bench_ecmult_wnaf:基准测试w-NAF常量时间标量乘法。

  • bench_field_inverse:基准测试字段元素的求逆。

  • bench_field_inverse_var:基准测试字段元素的可变时间求逆。

  • bench_field_mul:基准测试两个字段元素的乘法。

  • bench_field_normalize:基准测试字段元素的归一化。

  • bench_field_normalize_weak:基准测试字段元素的弱归一化。

  • bench_field_sqr:基准测试字段元素的平方。

  • bench_field_sqrt:基准测试字段的平方根。

125> 如何基准测试ECDH?有哪些技术?

一般来说,基准测试ECDH涉及测量两个当事人之间进行大量密钥交换所需的时间。目标是评估ECDH算法在不同条件下的实现性能,例如不同的密钥大小、不同的消息大小和不同的硬件配置。

基准测试ECDH的一个常见技术是使用一组固定的参数,例如固定的密钥大小和固定的消息大小,并测量进行固定次数密钥交换所需的时间。这允许在相同条件下比较不同的实现。

另一种技术是改变密钥大小或消息大小,并测量进行单次密钥交换所需的时间。这允许评估随着输入大小变化实现的性能。

除了测量密钥交换所需的时间外,还可以使用其他指标来评估ECDH的性能,例如内存使用量和代码大小。

仔细选择用于评估ECDH的基准测试非常重要,因为不同的基准测试可以产生不同的结果,并且可能无法准确反映在实际场景中实现的性能。

126> 有其他技术吗?

是的,还有其他基准测试ECDH的技术。一个常见的技术是使用预计算的点表,称为预计算表。此表可以通过显著方式加速标量乘法操作。另一种技术是使用缓存来存储标量乘法操作的中间值,这也可以提高性能。此外,优化底层椭圆曲线算术的实现也可以带来性能提升。

依赖关系

~92MB
~851K SLoC