4个版本
0.1.16-alpha.0 | 2023年3月31日 |
---|---|
0.1.13-alpha.0 | 2023年3月17日 |
0.1.12-alpha.0 | 2023年1月19日 |
0.1.10-alpha.0 | 2023年1月18日 |
#32 in #scratch
617 每月下载量
用于 91 个crate(直接使用3个)
270KB
660 代码行
bitcoinsecp256k1-scratch
这个Rust包提供了一个Scratch
类型及其相关函数,用于管理bitcoinsecp256k1库中的内存分配。这个库是直接从C++到Rust的bitcoin核心的翻译的一部分,因此,一些函数体可能仍在翻译过程中。请注意,一旦翻译过程完成,此系统将成为可测试的。
Scratch
类型用于在bitcoinsecp256k1库内部部计算中分配临时内存。这很重要,因为某些计算可能非常消耗内存,而通过使用scratch空间,库可以最小化内存分配和释放的开销。
scratch_create
函数用于创建新的scratch空间,而scratch_destroy
则用于在不再需要时释放为scratch空间分配的内存。使用scratch_alloc
函数在scratch空间内分配内存块,而scratch_max_allocation
返回可以在scratch空间内分配的最大内存量。
scratch_checkpoint
和scratch_apply_checkpoint
函数用于将scratch空间管理为内存分配的堆栈。 scratch_checkpoint
在scratch空间内创建一个新的检查点,而scratch_apply_checkpoint
释放自上次检查点以来分配的所有内存。
这些函数没有直接相关的数学概念,因为它们主要关注内存管理。然而,高效的内存管理对于加密操作的性能至关重要,因此,scratch空间的使用对secp256k1曲线上的椭圆曲线密码学的效率有重要影响。
26> 计算所涉及的内存占用是多少?
在secp256k1曲线上进行椭圆曲线密码学计算涉及的内存占用量会因具体执行的操作而大相径庭。一些操作,如点加法和标量乘法,可以相对节省内存,仅需要少量临时变量进行中间计算。而其他操作,如点乘法和签名验证,可能需要更多的内存,尤其是在同时处理多个点或签名时。
使用如Scratch
类型所提供的临时空间,可以在bitcoinsecp256k1-scratch
包中,通过重复使用中间计算的内存分配来最小化这些计算的内存占用。这可以带来显著的性能提升,尤其是在处理大量点或签名时。
27> 让我们逐一分析这些操作,以了解它们的内存性能。
当然,我很乐意帮助!以下是在secp256k1曲线上的椭圆曲线密码学中一些常见操作的内存需求简要概述。
-
点加法:这个操作涉及将曲线上的两个点相加以获得第三个点。这个操作的内存需求相对较低,因为它仅涉及几个用于中间计算的临时变量。通常,只需一个临时空间即可完成此操作。
-
标量乘法:这个操作涉及将标量值与曲线上的一个点相乘以获得曲线上的另一个点。这个操作的内存需求也相对较低,因为它仅涉及几个用于中间计算的临时变量。通常,只需一个临时空间即可完成此操作。
-
点乘法:这个操作涉及将曲线上的一个点与标量值相乘以获得曲线上的另一个点。这个操作的内存需求可能比标量乘法高,因为它通常涉及处理多个点并需要更多的中间计算。可能需要多个临时空间来高效地执行此操作。
-
签名验证:这个操作涉及使用曲线上的公钥验证消息上的签名的有效性。这个操作的内存需求可能相当高,尤其是在同时处理多个签名或公钥时。可能需要多个临时空间来高效地执行此操作。
-
签名生成:这个操作涉及使用曲线上的私钥生成消息的签名。这个操作的内存需求通常较低,因为它仅涉及几个用于中间计算的临时变量。通常,只需一个临时空间即可完成此操作。
总的来说,在secp256k1曲线上的椭圆曲线密码学操作对内存的需求会因具体操作、处理数据的规模以及同时处理的点或签名的数量而大相径庭。有效地使用临时空间可以帮助最小化这些操作的内存占用并提升整体性能。
28> 当你说“多个临时空间”时,是多少个?每个临时空间需要多少内存?
所需临时空间的数量以及每个临时空间的大小取决于具体操作以及系统的内存限制。一般来说,简单操作如点加法或标量乘法可以使用单个临时空间,而复杂操作如点乘法或签名验证可能需要多个临时空间。
每个刮擦空间的大小也取决于正在执行的具体操作和可用内存。例如,bitcoinsecp256k1-scratch
包提供了一个 scratch_max_allocation
函数,该函数返回单个刮擦空间可以分配的最大内存量。根据包的文档,此值目前设置为 262,144 字节(256 KiB),但这可能因具体系统和配置而异。
在实际应用中,刮擦空间的数量和大小将取决于具体的应用程序和可用资源。对于内存有限的系统,可能需要使用较小的刮擦空间,或者对多个操作重复使用刮擦空间以节省内存。通常,在进行加密操作时,仔细管理内存使用对于确保敏感数据不被泄露或破坏非常重要。
依赖项
~89MB
~851K SLoC