A Rust library for constructing non-interactive witness-indistinguishable and zero-knowledge proofs about the satisfiability of equations over bilinear groups [1] [2]. This project was inspired by the Java implementation of the Groth-Sahai protocol, written by Gijs Van Laer.
This library is distributed under the MIT License and the Apache v2 License (see License).
- Arkworks - A Rust ecosystem for developing and programming with zkSNARKs as well as finite field and elliptic curve arithmetic.
- Rayon - A data parallelism library for Rust.
-
This library, as well as the Arkworks ecosystem itself, is a (currently incomplete) academic proof-of-concept only, and has NOT been thoroughly reviewed for production use. Do NOT use this implementation in production code.
-
Your choice of bilinear group (G1, G2, GT, e) MUST be secure under the SXDH assumption, must be equipped with a Type-III pairing, and must be implemented in Arkworks. For example, Bls12_381 is amenable to this implementation.
First, install the latest version of Rust using rustup
:
rustup install stable
After that, use cargo
, the standard Rust build tool, to build the library:
git clone https://github.com/jdwhite88/groth-sahai-rs.git
cd groth-sahai-rs
cargo build
To run the unit tests (in each source file) and integration tests (in tests
):
cargo test
To run the benchmark tests (in benches
):
cargo bench
While this library is not yet published, a first draft of the documentation can be viewed by running the following command (this will open a local copy in your default web browser):
cargo doc --open
The API is subject to change, and is still very much a work in progress.
If you notice a bug, would like to ask a question, or want to propose a new feature, feel free to open an issue!
If you would like to contribute, but have not been invited as a direct collaborator to the project, follow the procedure below (keeping in mind these instructions if you are attempting to resolve an open issue):
- Fork the project
- Create your feature branch (
git checkout -b feature-branch main
) - Commit your changes (
git commit -m 'Resolves #i; commit message'
) - Push to the branch (
git push origin feature-branch
) - Open a pull request to merge with this repo (preferably linked to an issue)
[1] Jens Groth and Amit Sahai. Efficient Non-interactive Proof Systems for Bilinear Groups, Advances in Cryptology -- EUROCRYPT 2008: 27th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Istanbul, Turkey. Springer Berlin Heidelberg, vol 4965: 415–432, 2008.
[2] Essam Ghadafi, Nigel P. Smart, and Bogdan Warinschi. Groth-Sahai proofs revisited. In Phong Q. Nguyen and David Pointcheval, editors, PKC 2010, volume 6056 of LNCS, pages 177–192. Springer, Heidelberg, May 2010.
This library is distributed under either of the following licenses:
- Apache License v2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
Unless explicitly stated otherwise, any contribution made to this library shall be dual-licensed as above (as defined in the Apache v2 License), without any additional terms or conditions.
- Jacob White - white570@purdue.edu