Created
November 14, 2022 19:05
-
-
Save Gonzih/8765bf2f565d02bedd5015f93f6b2b07 to your computer and use it in GitHub Desktop.
zkdoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate libspartan; | |
extern crate merlin; | |
use libspartan::{Instance, SNARKGens, SNARK}; | |
use merlin::Transcript; | |
use std::io::prelude::*; | |
// read file into Transcript | |
fn file_transcript(filename: &str) -> Transcript { | |
let mut transcript = Transcript::new(b"spartan"); | |
let mut file = std::fs::File::open(filename).unwrap(); | |
let mut buffer = Vec::new(); | |
file.read_to_end(&mut buffer).unwrap(); | |
transcript.append_message(b"file", &buffer); | |
transcript | |
} | |
fn main() { | |
// specify the size of an R1CS instance | |
let num_vars = 1024; | |
let num_cons = 1024; | |
let num_inputs = 10; | |
let num_non_zero_entries = 1024; | |
// produce public parameters | |
let gens = SNARKGens::new(num_cons, num_vars, num_inputs, num_non_zero_entries); | |
// ask the library to produce a synthentic R1CS instance | |
let (inst, vars, inputs) = Instance::produce_synthetic_r1cs(num_cons, num_vars, num_inputs); | |
// create a commitment to the R1CS instance | |
let (comm, decomm) = SNARK::encode(&inst, &gens); | |
// produce a proof of satisfiability | |
let mut prover_transcript = file_transcript("src/main.rs"); | |
let proof = SNARK::prove( | |
&inst, | |
&comm, | |
&decomm, | |
vars, | |
&inputs, | |
&gens, | |
&mut prover_transcript, | |
); | |
// verify the proof of satisfiability | |
let mut verifier_transcript = file_transcript("src/main.rs"); | |
assert!(proof | |
.verify(&comm, &inputs, &mut verifier_transcript, &gens) | |
.is_ok()); | |
println!("proof verification successful!"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment