Awesome
Noir Android
Description
This library lets you generate and verify proofs with Noir on Android.
Installation
In your settings.gradle
file or in your root build.gradle
file, add the following in your repositories
block:
maven { url 'https://jitpack.io' }
Then, in your app level build.gradle
file, add the following in your dependencies
block:
implementation("com.github.madztheo:noir_android:0.36.0-1")
After this your project should be able to use the library.
Usage
Initialize your circuit
To start generating proofs, you first need to initialize your circuit. You can do this by creating a new instance of the Circuit
class, using the fromJsonManifest
function and passing it the stringified JSON of the compiled circuit (obtained by running nargo compile
).
import com.noirandroid.lib.Circuit
val path = "path/to/compiled/circuit.json"
val circuitData = File(path).readText()
val circuit = Circuit.fromJsonManifest(circuitData)
Setup the SRS
Before you can generate proofs, you need to setup the SRS for the circuit. You can do so by calling the setupSrs
function.
circuit.setupSrs()
This will download the SRS from Aztec's server and initialize the SRS for the circuit.
If you want to use a local SRS, you can pass a path to a local SRS file as an argument to the setupSrs
function.
val srsPath = "path/to/local/srs"
circuit.setupSrs(srsPath)
Generate a proof
To generate a proof, you can call the prove
method and pass in the inputs for the proof and the proof type. It will return a Proof
object containing the proof with its public inputs and the verification key.
import com.noirandroid.lib.Proof
import java.util.HashMap
import android.util.Log
val inputs: HashMap<String, Any> = HashMap()
inputs["a"] = 5
inputs["b"] = 3
inputs["result"] = 15
// For UltraPlonk proofs
val proof: Proof = circuit.prove(inputs, "plonk")
Log.d("Proof", proof.proof)
Log.d("Verification key", proof.vk)
// For Honk proofs
val proof: Proof = circuit.prove(inputs, "honk")
Verify a proof
To verify a proof, you can call the verify
method and pass in the proof object and the proof type. It will return a boolean indicating whether the proof is valid or not.
// For UltraPlonk proofs
val isValid = circuit.verify(proof, "plonk")
// For Honk proofs
val isValid = circuit.verify(proof, "honk")