Two versions of the MAYA implementation are public.
Version 2 — current (August 2026)
One hash function. Version 1 used three primitives: a Merlin transcript for Fiat–Shamir, SHA3-512 for the Pedersen generators, and SHAKE256 for the Bulletproof generators. Version 2 uses HMAC-SHA-256 for all three. HMAC-SHA-256 is in the standard library of every mainstream language, so a verifier can be written in any of them without reproducing a Rust-specific transcript construction.
Extensions. This repository also contains the five MAYAsk protocols. Plain MAYA is Π1 with a single block.
Benchmarks. The performance table on the
home page was produced by this
repository, by the Π1 benchmark in pi1_pi2_pi3/benches/pi1.rs.
Each configuration is a triple (k, B, b): folding factor, number of blocks,
block size. The table uses a single block, so b is the number of ciphertexts.
The configurations are set in the configs list in custom_benchmark:
(4, 1, 1_000), (4, 1, 10_000), (4, 1, 100_000), (4, 1, 1_000_000)
cd pi1_pi2_pi3
cargo bench --bench pi1 --features yoloproofs,parallel # multi-threaded
cargo bench --bench pi1 --features yoloproofs # single-threaded
Version 1 — CCS ‘26 artifact (May 2026)
The code evaluated in the Paper. It reproduces the measurements reported there. Ristretto255 and P-256.
Which version to use
- Reproducing the paper’s tables: version 1.
- Blocks, multiple keys, or decryption mixnets: version 2.