Zerokit
A collection of Zero Knowledge modules written in Rust and designed to be used in other system programming environments.
Overview
Zerokit provides zero-knowledge cryptographic primitives with a focus on performance, security, and usability. The current focus is on Rate-Limiting Nullifier RLN implementation.
Current implementation is based on the following specification and focused on RLNv2 which allows to set a rate limit for the number of messages that can be sent by a user.
Features
- RLN Implementation: Efficient Rate-Limiting Nullifier using zkSNARKs
- Circom Compatibility: Uses Circom-based circuits for RLN
- Cross-Platform: Support for multiple architectures (see compatibility note below)
- FFI-Friendly: Easy to integrate with other languages
Architecture
Zerokit currently focuses on RLN (Rate-Limiting Nullifier) implementation using Circom circuits through ark-circom, providing an alternative to existing native Rust implementations.
Build and Test
Important
For WASM support or x32 architecture builds, use version
0.6.1. The current version has dependency issues for these platforms. WASM support will return in a future release.
Install Dependencies
make installdeps
Use Nix to install dependencies
nix develop
Build and Test All Crates
make build
make test
Release Assets
We use cross-rs to cross-compile and generate release assets:
# Example: Build for specific target
cross build --target x86_64-unknown-linux-gnu --release -p rln
Used By
Zerokit powers zero-knowledge functionality in:
Acknowledgements
- Inspired by Applied ZKP group work, including zk-kit
- Uses ark-circom for zkey and Groth16 proof generation
- Witness calculation based on circom-witnesscalc by iden3. The execution graph file used by this code has been generated by means of the same iden3 software.
Important
The circom-witnesscalc code fragments have been borrowed instead of depending on this crate, because its types of input and output data were incompatible with the corresponding zerokit code fragments, and circom-witnesscalc has some dependencies, which are redundant for our purpose.
Documentation
For detailed documentation on each module:
cargo doc --open