miden-crypto/README.md
README.mdRaw
1# Miden Crypto
2This crate contains cryptographic primitives used in Polygon Miden.
3
4## Hash
5[Hash module](./src/hash) provides a set of cryptographic hash functions which are used by the Miden VM and the Miden rollup. Currently, these functions are:
6
7* [BLAKE3](https://github.com/BLAKE3-team/BLAKE3) hash function with 256-bit, 192-bit, or 160-bit output. The 192-bit and 160-bit outputs are obtained by truncating the 256-bit output of the standard BLAKE3.
8* [RPO](https://eprint.iacr.org/2022/1577) hash function with 256-bit output. This hash function is an algebraic hash function suitable for recursive STARKs.
9
10For performance benchmarks of these hash functions and their comparison to other popular hash functions please see [here](./benches/).
11
12## Merkle
13[Merkle module](./src/merkle/) provides a set of data structures related to Merkle trees. All these data structures are implemented using the RPO hash function described above. The data structures are:
14
15* `MerkleTree`: a regular fully-balanced binary Merkle tree. The depth of this tree can be at most 64.
16* `MerklePathSet`: a collection of Merkle authentication paths all resolving to the same root. The length of the paths can be at most 64.
17
18## Crate features
19This crate can be compiled with the following features:
20
21* `std` - enabled by default and relies on the Rust standard library.
22* `no_std` does not rely on the Rust standard library and enables compilation to WebAssembly.
23
24Both of these features imply the use of [alloc](https://doc.rust-lang.org/alloc/) to support heap-allocated collections.
25
26To compile with `no_std`, disable default features via `--no-default-features` flag.
27
28## License
29This project is [MIT licensed](./LICENSE).