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 allow 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
. Current version has dependency issues for these platforms. WASM support will return in a future release.
Install Dependencies
make installdeps
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