Noir Adapter
Mopro supports the integration of Noir circuits, enabling zero-knowledge proofs in native mobile applications with ease. This adapter builds upon foundational work from the zkPassport team and streamlines cross-platform integration with performance, reliability, and developer experience in mind.
Samples
You can explore real examples of how the Noir adapter works in these projects:
Setting Up the Rust Project
To get started, follow the Rust Setup Guide and activate the noir feature in your Cargo.toml:
[features]
default = ["mopro-ffi/noir"]
[dependencies]
mopro-ffi = { version = "0.2" }
# ...
The Noir adapter depends on zkmopro/noir-rs. Please checkout the usage and the version here.
Proving and Verifying Functions
Preparing SRS
Please follow this guide to generate the SRS for your Noir circuit: Downloading SRS (Structured Reference String)
Proving Function
The proving function is responsible for loading the circuit, loading the SRS, converting the inputs into a witness map, and generating the proof using the Barretenberg backend.
pub fn generate_noir_proof(
circuit_path: String,
srs_path: Option<String>,
inputs: Vec<String>,
) -> Vec<u8>;
circuit_path: Path to the compiled Noir .acir circuit.srs_path: Optional path to the structured reference string.inputs: A list of strings representing public/private inputs.- Returns a serialized proof (
Vec<u8>).
Verifying Function
The verification function loads the circuit and derives the verification key, then verifies the proof.
pub fn verify_noir_proof(circuit_path: String, proof: Vec<u8>) -> bool;
circuit_path: Path to the compiled Noir .acir circuit.proof: The serialized proof to verify.- Returns
trueif the proof is valid.
Using the Library
iOS API
generateNoirProof(circuitPath: String, srsPath: String?, inputs: [String])throws -> Data
verifyNoirProof(circuitPath: String, proof: Data)throws -> Bool
Android API
fun generateNoirProof(
circuitPath: kotlin.String,
srsPath: kotlin.String?,
inputs: List<kotlin.String>,
): kotlin.ByteArray
fun verifyNoirProof(
circuitPath: kotlin.String,
proof: kotlin.ByteArray,
): kotlin.Boolean
The Noir adapter exposes the equivalent functions and types to be used in the Android project.
Platform Support
| Platform | Target Triple | Status |
|---|---|---|
| iOS Device | aarch64-apple-ios | ✅ |
| iOS aarch64 Simulator | aarch64-apple-ios-sim | ✅ |
| iOS x86_64 Simulator | x86_64-apple-ios | ✅ |
| Android aarch64 Device | aarch64-linux-android | ✅ |
| Android x86_64 Emulator | x86_64-linux-android | ✅ |
| macOS (M1/M2) | aarch64-apple-darwin | ✅ |
| Linux Desktop | x86_64-unknown-linux-gnu | ✅ |