A Rust library containing wrappers that facilitate the construction of non-interactive witness-indistinguishable and zero-knowledge proofs about various equations over bilinear groups [1]. See the corresponding Groth-Sahai library for more details about how Groth-Sahai has been implemented.
This library is distributed under the MIT License and the Apache v2 License (see License).
- This library, including many dependencies it relies on, are academic proof-of-concepts only that have 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 Rust's cargo
to compile the library:
git clone https://github.com/jdwhite88/groth-sahai-wrappers.git
cd groth-sahai-wrappers
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
- Groth16 -- For constructing variants of GS-over-Groth16 proofs, given a
Proof
and other components of the zk-SNARK's circuit [3].
- Groth-Sahai - An implementation of the Groth-Sahai proof system in Rust.
- Arkworks - A Rust ecosystem for developing and programming with zkSNARKs as well as finite field and elliptic curve arithmetic.
If you notice a bug, would like to ask a question, or want to propose a new wrapper, 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.
[3] Jens Groth. On the size of pairing-based non-interactive arguments. In Marc Fischlin and Jean-Sébastien Coron, editors, EUROCRYPT 2016, Part II, volume 9666 of LNCS, pages 305-326. Springer, Heidelberg, May 2016.
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