Crate risc0_groth16

Source
Expand description

§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.

Modules§

  • dockerprove
    This module contains functions for running a Groth16 prover using Docker.

Structs§

  • Verifying key for Groth16 proofs.
  • Groth16 Proof encoded as JSON.
  • Groth16 Public witness encoded as JSON.
  • Groth16 seal object encoded in big endian.
  • Groth16 Verifier instance over the BN_254 curve encoded in little endian.
  • Verifying key for Groth16 proofs.
  • Groth16 Verifying Key encoded as JSON.

Functions§

  • Creates an Fr from a hex string
  • Splits the digest in half returning a scalar for each halve.
  • to_jsonprove
    Convert a recursion VM seal (i.e. succinct receipt) into a JSON format compatible with the stark_verify witness generator.
  • Default verifying key for RISC Zero recursive verification.