Skip to content

Instantly share code, notes, and snippets.

@Michael-Qedit
Created November 30, 2021 20:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Michael-Qedit/1a67176cb4c31dfb23027e66670d8e9d to your computer and use it in GitHub Desktop.
Save Michael-Qedit/1a67176cb4c31dfb23027e66670d8e9d to your computer and use it in GitHub Desktop.
ZKHack - Puzzle 6 - Solution
#![allow(dead_code)]
#![allow(non_snake_case)]
#![allow(unused_variables)]
#![allow(unreachable_code)]
#![allow(unused_imports)]
use ark_ff::{One, Zero};
use prompt::{puzzle, welcome};
use soundness_of_music::data::puzzle_data;
use soundness_of_music::prover;
use soundness_of_music::verifier;
use soundness_of_music::PUZZLE_DESCRIPTION;
use soundness_of_music::prover::prove;
use ark_ec::ProjectiveCurve;
use ark_ec::AffineCurve;
use itertools::izip;
type Fr = <ark_bls12_381::Bls12_381 as ark_ec::PairingEngine>::Fr;
fn main() {
welcome();
puzzle(PUZZLE_DESCRIPTION);
let (circuit, setup) = puzzle_data();
/* Your solution here! */
let public_inputs = [Fr::one(), Fr::one()];
let two = Fr::one() + Fr::one();
let four = two + two;
let valid_public_inputs = [Fr::one(), four];
let valid_private_inputs = [two];
let mut proof = prover::prove(&valid_public_inputs, &valid_private_inputs, &circuit, &setup);
let mut pk = <ark_bls12_381::Bls12_381 as ark_ec::PairingEngine>::G1Projective::zero();
for (valid_public_input, public_input, public_input_polynomial) in izip!(valid_public_inputs.iter().skip(1), public_inputs.iter().skip(1), setup.inputs.iter().skip(1),)
{
pk += public_input_polynomial.mul(*valid_public_input - public_input);
}
let pk = pk.into_affine();
let mut pk_prime = <ark_bls12_381::Bls12_381 as ark_ec::PairingEngine>::G1Projective::zero();
for (valid_public_input, public_input, public_input_polynomial) in izip!(valid_public_inputs.iter().skip(1), public_inputs.iter().skip(1), setup.inputs_prime.iter().skip(1),)
{
pk_prime += public_input_polynomial.mul(*valid_public_input - public_input);
}
let pk_prime = pk_prime.into_affine();
proof.pi_input += &pk;
proof.pi_input_prime += &pk_prime;
// Replace unimplmented!() with your proof
assert!(verifier::verify(&public_inputs, &setup, &proof));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment