22个不稳定版本 (9个破坏性版本)
新版本 0.10.0 | 2024年8月7日 |
---|---|
0.9.3 | 2024年4月24日 |
0.9.0 | 2024年3月24日 |
0.7.1 | 2023年10月10日 |
0.1.0 | 2022年12月2日 |
#1 in #miden
5,247 每月下载量
在 23 个crate中使用 (2个直接使用)
715KB
15K SLoC
Miden Crypto
本crate包含Polygon Miden中使用的密码学原语。
哈希
哈希模块提供了一组Miden VM和Miden rollup使用的密码学哈希函数。目前,这些函数包括
- BLAKE3 哈希函数,输出为256位、192位或160位。192位和160位输出是通过截断标准BLAKE3的256位输出获得的。
- RPO 哈希函数,输出为256位。这是一个适合递归STARKs的代数哈希函数。
- RPX 哈希函数,输出为256位。与RPO类似,这个哈希函数适合递归STARKs,但比RPO快约2倍。
有关这些哈希函数的性能基准和与其他流行哈希函数的比较,请参阅此处。
Merkle
Merkle模块提供了一组与Merkle树相关的数据结构。所有这些数据结构都使用上述描述的RPO哈希函数实现。数据结构包括
MerkleStore
:不同高度的Merkle树集合,旨在高效存储具有共同子树的树。当与RecordingMap
一起实例化时,Merkle存储记录原始数据的所有访问。MerkleTree
:一个常规的完全平衡的二叉Merkle树。此树的深度最多为64。Mmr
:一个Merkle山脉结构,设计为只追加日志。PartialMerkleTree
:Merkle树的部分视图,其中某些子树可能未知。这类似于所有解析到同一根的Merkle路径集合。路径长度最多为64。PartialMmr
:Merkle山脉结构的部分视图。SimpleSmt
:稀疏Merkle树(无压缩),将64位键映射到4元素值。Smt
:一种稀疏默克尔树(深度压缩至64层),将4元素键映射到4元素值。
该模块还包含一些附加的支持组件,如NodeIndex
、MerklePath
和MerkleError,以协助树索引、开启证明和报告不一致的论证/状态。
签名
DSA模块提供了Miden虚拟机默认支持的数字签名方案。目前,这些方案包括
RPO Falcon512
:Falcon签名方案的一种变体。这种变体与标准方案的不同之处在于,在“散列到点”算法中,我们使用RPO256代替SHAKE256哈希函数。这使得签名在Miden虚拟机中更容易验证。
对于上述签名,键生成、签名和签名验证在std
和no_std
上下文中都可用(请参阅下面的crate功能)。然而,在no_std
上下文中,用户负责为键生成和签名过程提供一个随机数生成器。
伪随机元素生成器
伪随机元素生成器模块提供了一套特性和数据结构,有助于在Miden虚拟机和Miden汇总上下文中生成伪随机元素。该模块目前包括
FeltRng
:一个用于生成随机域元素和随机4域元素的特质。RpoRandomCoin
:一个结构体,实现了FeltRng
以及使用RPO哈希函数的RandomCoin
特质。RpxRandomCoin
:一个结构体,实现了FeltRng
以及使用RPX哈希函数的RandomCoin
特质。
包功能
此包可以使用以下功能进行编译
std
- 默认启用,并依赖于Rust标准库。no_std
不依赖于Rust标准库,并启用将代码编译为WebAssembly。
这两个功能都意味着使用alloc来支持堆分配的集合。
要使用no_std
编译,请启用avx2
目标功能。例如
AVX2加速
在支持AVX2的平台,可以使用向量处理单元加速RPO和RPX哈希函数。要启用AVX2加速,需要将代码编译为带有avx2
目标功能的代码。例如
cargo make build-avx2
SVE加速
在支持SVE的平台,可以使用向量处理单元加速RPO和RPX哈希函数。要启用SVE加速,需要将代码编译为带有sve
目标功能的代码。例如
cargo make build-sve
测试
测试库的最佳方式是使用我们的Makefile.toml
和cargo-make,这将使您能够使用我们预定义的优化测试命令
cargo make test-all
例如,一些函数较重,如果仅使用cargo test
进行测试,可能需要较长时间才能完成。为了在发布和优化模式下进行测试,我们必须复制开发模式的测试条件,以便验证所有调试断言。
我们通过启用编译的一些特殊标志(我们在Makefile.toml中将其设置为默认值)来实现这一点。
RUSTFLAGS="-C debug-assertions -C overflow-checks -C debuginfo=2" cargo test --release
许可证
本项目采用MIT许可证。
依赖项
~5.5MB
~99K SLoC