mpz is a collection of multi-party computation libraries written in Rust 🦀.
The scope of this project is currently limited to being used to implement TLSNotary. It is not intended for general public use.
See our design doc for information on design choices, standards and project structure.
This project is currently under active development and should not be used in production. Expect bugs and regular major breaking changes. Use at your own risk.
Many protocol crates follow a -core / high-level split: the -core crate contains
the cryptographic internals without any I/O, while the parent crate adds async
networking on top. See Core vs IO for rationale.
clmul- Carry-less multiplication.matrix-transpose- Bit-wise matrix transposition.
mpz-core- Core cryptographic primitives (AES, PRG, GGM tree, LPN, commitment).mpz-common- Protocol execution runtime, I/O, multiplexing, and threading. No cryptography.mpz-fields- Finite-field arithmetic.
mpz-circuits(-core,-data) - Boolean circuit DSL, builder, and pre-compiled circuits (AES, SHA-2, etc.).
mpz-cointoss(-core) - 2-party coin-toss protocol.mpz-ot(-core) - Oblivious transfer (Chou-Orlandi, KOS, Ferret).mpz-ole(-core) - Oblivious linear evaluation.mpz-share-conversion(-core) - Multiplicative-to-additive and additive-to-multiplicative share conversion.
mpz-memory-core- Memory abstraction for the MPC virtual machine.mpz-vm-core- VM traits and interfaces (Vm,Execute).mpz-ideal-vm- Ideal (plaintext) VM for testing.
mpz-garble(-core) - Half-gate garbled circuit protocols.mpz-zk(-core) - QuickSilver zero-knowledge proofs.mpz-hash- MPC-friendly hash functions (SHA-2, Blake3, Keccak) built on the circuit and VM layers.
The -core suffix is omitted for brevity; see the crate list above for the
full split. Arrows point from dependent to dependency.
graph LR
mpz-share-conversion --> mpz-ole
mpz-ole --> mpz-fields
mpz-ole --> mpz-ot
mpz-garble --> mpz-ot
mpz-garble --> mpz-vm-core
mpz-garble --> mpz-circuits
mpz-hash --> mpz-vm-core
mpz-hash --> mpz-circuits
mpz-zk --> mpz-ot
mpz-zk --> mpz-vm-core
mpz-ot --> mpz-cointoss
mpz-ot --> mpz-core
mpz-ot --> mpz-common
mpz-cointoss --> mpz-core
mpz-cointoss --> mpz-common
mpz-vm-core --> mpz-circuits
mpz-vm-core --> mpz-memory-core
mpz-vm-core --> mpz-common
mpz-ideal-vm --> mpz-vm-core
mpz-memory-core --> mpz-core
mpz-circuits --> mpz-core
mpz-fields --> mpz-core
mpz-core --> clmul
mpz-core --> matrix-transpose
All crates in this repository are licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
See CONTRIBUTING.md.
mpz is pronounced "em-peasy".
