What is a zero-knowledge proof?

History of Zero-knowledge proofs

Recent Zero-Knowledge proving systems

Implementations of proving systems

Name Language Curves Proving systems
libsnark C++ BN254 Groth16, BCTV14a, BCTV14b, CTV15
bellman Rust BLS12-381 Groth16
dalek bulletproofs Rust ristretto255 BBBPWM17
adjoint-io bulletproofs Haskell secp256k1 BBBPWM17
DIZK Java BN254 Groth16
snarkjs JavaScript BN254 Groth16, BCTV14a
websnark WebAssembly BN254 Groth16

Other implementations:

Generating structured reference strings

Some proving systems require a structured reference string (SRS). The following works discuss secure SRS generation.

Libraries for writing circuits

Name DSL Host Language Backed by Description
libsnark’s gadgetlib1/2   C++ libsnark Libraries for building circuits for preprocessing zk-SNARKs
bellman   Rust bellman Library for building circuits; various gadgets in sapling-crypto
jsnark   Java libsnark Library for building circuits for preprocessing zk-SNARKs
ZoKrates Python subset Rust libsnark, bellman Toolbox for zk-SNARKs on Ethereum
Snarky Embedded OCaml OCaml libsnark Front-end for writing R1CS SNARKs
Circom Typed JS JavaScript snarkjs Language for writing R1CS SNARKs
Circomlib Typed JS JavaScript   Library of basic circuits for Circom
ZEXE’s snark-gadgets   Rust ZEXE Module for building circuits, comes with pre-built algebra circuits

General-purpose compilers from high-level languages

Example circuits

Circuit optimization

Standardization efforts

So are they fast yet?

Stay tuned! 😁

Improve this page

Additions, corrections and other suggestions are welcome! You can propose an edit to this page here. (Note that after making your edits, there are 3 confirmations to click through in order to create the “pull request” in the Git repository underlying this page.)

For more broad changes, you can make a pull request here!