20 releases (9 stable)
1.1.3 | Nov 9, 2024 |
---|---|
1.1.2 | Oct 3, 2024 |
1.1.1 | Sep 24, 2024 |
1.1.0-rc.3 | Aug 31, 2024 |
0.21.0 | Mar 12, 2024 |
#887 in Cryptography
22,424 downloads per month
Used in 6 crates
(via risc0-zkvm)
1MB
37K
SLoC
Groth16
This library implements a verifier for the Groth16 protocol over the BN_254 elliptic curve.
Example
use risc0_groth16::{ProofJson, PublicInputsJson, Verifier, VerifyingKeyJson};
const TEST_VERIFICATION_KEY: &str = test_data!("verification_key.json");
const TEST_PROOF: &str = test_data!("proof.json");
const TEST_PUBLIC_INPUTS: &str = test_data!("public.json");
fn verify() {
let verifying_key: VerifyingKeyJson = serde_json::from_str(TEST_VERIFICATION_KEY).unwrap();
let proof: ProofJson = serde_json::from_str(TEST_PROOF).unwrap();
let public_inputs = PublicInputsJson {
values: serde_json::from_str(TEST_PUBLIC_INPUTS).unwrap(),
};
let verifier = Verifier::from_json(proof, public_inputs, verifying_key).unwrap();
verifier.verify().unwrap();
}
STARK to SNARK
It also provides the stark_to_snark function to run a prover Groth16
recursion prover via Docker. After generating a RISC Zero STARK proof, this function can be
used to transform it into a Groth16 proof. This function becomes available when the prove
feature flag is enabled.
IMPORTANT: This feature requires an x86 architecture and Docker installed. Additionally, specific installation steps must be followed to use this functionality.
The recommended way to get a Groth16 proof is to use the Prover
trait in the risc0-zkvm
crate. With ProverOpts::groth16()
it will produce a Groth16 proof.
Dependencies
~7–18MB
~256K SLoC