Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
9de7966
Add matter-labs Plonk solidity verifier
georgwiese Nov 23, 2022
7c27642
Write basic code to return static verifier
georgwiese Nov 23, 2022
b95f98e
Update solidity version, format, add dummy verifyTx()
georgwiese Nov 23, 2022
d7adaf7
Get dummy proof working
georgwiese Nov 23, 2022
f351605
Move inputs outside of proof struct, run actual verification
georgwiese Nov 23, 2022
98d432b
Pass correct proof
georgwiese Nov 23, 2022
037ec0a
Replace plonk verifier template with one from solidity_plonk_verifier…
georgwiese Nov 25, 2022
ff999c5
Update solidity version
georgwiese Nov 25, 2022
d8df138
Rename verifier
georgwiese Nov 25, 2022
f44ff73
Plonk solidity verifier: Move inputs outside prove, add verifyTx() fu…
georgwiese Nov 25, 2022
c06a21c
Add solidity renderer
georgwiese Nov 25, 2022
ff4736d
Beginn moving plonk proving scheme
georgwiese Nov 25, 2022
35fcbe7
Implement Plonk proving scheme in zokrates_bellamn, fix verifier temp…
georgwiese Nov 30, 2022
77afc6d
Enable more tests
georgwiese Nov 30, 2022
8517c29
Clean up integration test
georgwiese Nov 30, 2022
944429e
Clean up
georgwiese Nov 30, 2022
28c0029
Clean up
georgwiese Nov 30, 2022
fdf2132
Clean up
georgwiese Nov 30, 2022
9dfd51c
Refactor solidity renderer to not depend on bellman
georgwiese Nov 30, 2022
195f9af
Move Plonk proving system to zokrates_proof_systems
georgwiese Nov 30, 2022
58e248a
Add zokrates_proof_system files
georgwiese Nov 30, 2022
254dbf6
Remove unused imports
georgwiese Nov 30, 2022
d09d5db
Cleanup
georgwiese Nov 30, 2022
d7d2fc5
Duplicate bellman crates
georgwiese Dec 8, 2022
ac4e6cf
Reset zokrates_bellman back to state in develop branch
georgwiese Dec 8, 2022
5f328d3
Fix some compilation errors
georgwiese Dec 8, 2022
1318c2f
zokrates_field: Depend on both bellman versions
georgwiese Dec 8, 2022
87a67ff
Fix compile errors
georgwiese Dec 13, 2022
092b4e3
Review feedback
georgwiese Dec 21, 2022
759a4a0
Add universal setup for marlin
georgwiese Dec 21, 2022
f9db990
Merge branch 'plonk-add-verifier' of github.com:georgwiese/ZoKrates i…
georgwiese Dec 21, 2022
bbc0aa7
Update bellman crate to most recent dev branch
georgwiese Dec 21, 2022
37a92a0
minimize diff between lib.rs of zokrates_bellman and zokrates_bellman…
georgwiese Dec 21, 2022
25a7e4e
Improve imports
georgwiese Dec 21, 2022
5bda4f1
Undo changes to zokrates_ark/src/lib.rs
georgwiese Dec 21, 2022
f0aaac8
Undo changes in zokrates_cli::mpc
georgwiese Dec 21, 2022
bc9f7a2
Make clippy happy
georgwiese Dec 21, 2022
0805383
Make clippy happy (2)
georgwiese Dec 21, 2022
8469f4b
Fix syntax error
georgwiese Dec 21, 2022
d5042ca
Make clippy happy (3)
georgwiese Dec 21, 2022
dbf7fea
Fix rendered solidity verifiers
georgwiese Dec 21, 2022
a03984c
Turn on rust backtrace for tests
georgwiese Dec 21, 2022
44a43d2
Turn on rust backtrace for tests
georgwiese Dec 21, 2022
928bb54
Hard-code 4 threads
georgwiese Dec 28, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
- run:
name: Run tests
no_output_timeout: 1h
command: RUSTFLAGS="-D warnings" ./test.sh
command: RUSTFLAGS="-D warnings" RUST_BACKTRACE=1 ./test.sh
- save-sccache-cache
wasm_test:
docker:
Expand Down Expand Up @@ -79,7 +79,7 @@ jobs:
- run:
name: Run integration tests
no_output_timeout: "30m"
command: RUSTFLAGS="-D warnings" ./integration_test.sh
command: RUSTFLAGS="-D warnings" RUST_BACKTRACE=1 ./integration_test.sh
- save-sccache-cache
deploy:
docker:
Expand Down
73 changes: 52 additions & 21 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ members = [
"zokrates_interpreter",
"zokrates_embed",
"zokrates_bellman",
"zokrates_bellman_plonk",
"zokrates_proof_systems",
"zokrates_js",
"zokrates_circom"
Expand Down
2 changes: 1 addition & 1 deletion zokrates_ark/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ mod parse {
use super::*;
use ark_ff::ToBytes;
use zokrates_field::G2Type;
use zokrates_proof_systems::{Fq2, Fr, G1Affine, G2Affine, G2AffineFq, G2AffineFq2, GAffine};
use zokrates_proof_systems::{Fq2, Fr, G1Affine, G2Affine, G2AffineFq, GAffine};

pub fn parse_g1<T: Field + ArkFieldExtensions>(
e: &<T::ArkEngine as PairingEngine>::G1Affine,
Expand Down
8 changes: 4 additions & 4 deletions zokrates_bellman/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ version = "0.1.0"
edition = "2021"

[features]
wasm = ["bellman_ce/nolog", "bellman_ce/wasm"]
multicore = ["bellman_ce/multicore", "phase2/multicore"]
wasm = ["bellman/nolog", "bellman/wasm"]
multicore = ["bellman/multicore", "phase2/multicore"]

[dependencies]
zokrates_field = { version = "0.5", path = "../zokrates_field", default-features = false }
zokrates_ast = { version = "0.1", path = "../zokrates_ast", default-features = false }
zokrates_proof_systems = { version = "0.1", path = "../zokrates_proof_systems", default-features = false }

bellman_ce = { git = "https://github.com/georgwiese/bellman", rev="b356c7001f30da23bfad2b43eb0b7ca9804c8252", default-features = false, features = ["plonk", "multicore"] }
# pairing = { package = "pairing_ce", version = "^0.21" }
bellman = { package = "bellman_ce", version = "^0.3", default-features = false }
pairing = { package = "pairing_ce", version = "^0.21" }
phase2 = { git = "https://github.com/Zokrates/phase2", default-features = false }
rand_0_4 = { version = "0.4", package = "rand" }#
getrandom = { version = "0.2", features = ["js", "wasm-bindgen"] }
Expand Down
110 changes: 55 additions & 55 deletions zokrates_bellman/src/groth16.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use bellman::groth16::{
prepare_verifying_key, verify_proof, Parameters, PreparedVerifyingKey, Proof as BellmanProof,
VerifyingKey,
};
use bellman::pairing::{ff::to_hex, CurveAffine, Engine};
use pairing::{ff::to_hex, CurveAffine, Engine};

use zokrates_field::BellmanFieldExtensions;
use zokrates_field::Field;
Expand Down Expand Up @@ -100,60 +100,60 @@ impl<T: Field + BellmanFieldExtensions> NonUniversalBackend<T, G16> for Bellman
}
}

// impl<T: Field + BellmanFieldExtensions> MpcBackend<T, G16> for Bellman {
// fn initialize<R: Read, W: Write, I: IntoIterator<Item = Statement<T>>>(
// program: ProgIterator<T, I>,
// phase1_radix: &mut R,
// output: &mut W,
// ) -> Result<(), String> {
// let circuit = Computation::without_witness(program);
// let params = MPCParameters::new(circuit, phase1_radix).map_err(|e| e.to_string())?;
// params.write(output).map_err(|e| e.to_string())?;
// Ok(())
// }

// fn contribute<R: Read, W: Write, G: Rng>(
// params: &mut R,
// rng: &mut G,
// output: &mut W,
// ) -> Result<[u8; 64], String> {
// let mut params =
// MPCParameters::<T::BellmanEngine>::read(params, true).map_err(|e| e.to_string())?;

// let hash = params.contribute(rng);
// params.write(output).map_err(|e| e.to_string())?;

// Ok(hash)
// }

// fn verify<P: Read, R: Read, I: IntoIterator<Item = Statement<T>>>(
// params: &mut P,
// program: ProgIterator<T, I>,
// phase1_radix: &mut R,
// ) -> Result<Vec<[u8; 64]>, String> {
// let params =
// MPCParameters::<T::BellmanEngine>::read(params, true).map_err(|e| e.to_string())?;

// let circuit = Computation::without_witness(program);
// let hashes = params
// .verify(circuit, phase1_radix)
// .map_err(|_| "parameters malformed".to_string())?;

// Ok(hashes)
// }

// fn export_keypair<R: Read>(params: &mut R) -> Result<SetupKeypair<T, G16>, String> {
// let params =
// MPCParameters::<T::BellmanEngine>::read(params, true).map_err(|e| e.to_string())?;

// let params = params.get_params();
// let mut pk: Vec<u8> = Vec::new();
// params.write(&mut pk).map_err(|e| e.to_string())?;

// let vk = serialization::parameters_to_verification_key::<T>(params);
// Ok(SetupKeypair::new(vk, pk))
// }
// }
impl<T: Field + BellmanFieldExtensions> MpcBackend<T, G16> for Bellman {
fn initialize<R: Read, W: Write, I: IntoIterator<Item = Statement<T>>>(
program: ProgIterator<T, I>,
phase1_radix: &mut R,
output: &mut W,
) -> Result<(), String> {
let circuit = Computation::without_witness(program);
let params = MPCParameters::new(circuit, phase1_radix).map_err(|e| e.to_string())?;
params.write(output).map_err(|e| e.to_string())?;
Ok(())
}

fn contribute<R: Read, W: Write, G: Rng>(
params: &mut R,
rng: &mut G,
output: &mut W,
) -> Result<[u8; 64], String> {
let mut params =
MPCParameters::<T::BellmanEngine>::read(params, true).map_err(|e| e.to_string())?;

let hash = params.contribute(rng);
params.write(output).map_err(|e| e.to_string())?;

Ok(hash)
}

fn verify<P: Read, R: Read, I: IntoIterator<Item = Statement<T>>>(
params: &mut P,
program: ProgIterator<T, I>,
phase1_radix: &mut R,
) -> Result<Vec<[u8; 64]>, String> {
let params =
MPCParameters::<T::BellmanEngine>::read(params, true).map_err(|e| e.to_string())?;

let circuit = Computation::without_witness(program);
let hashes = params
.verify(circuit, phase1_radix)
.map_err(|_| "parameters malformed".to_string())?;

Ok(hashes)
}

fn export_keypair<R: Read>(params: &mut R) -> Result<SetupKeypair<T, G16>, String> {
let params =
MPCParameters::<T::BellmanEngine>::read(params, true).map_err(|e| e.to_string())?;

let params = params.get_params();
let mut pk: Vec<u8> = Vec::new();
params.write(&mut pk).map_err(|e| e.to_string())?;

let vk = parameters_to_verification_key::<T>(params);
Ok(SetupKeypair::new(vk, pk))
}
}

pub fn parameters_to_verification_key<T: Field + BellmanFieldExtensions>(
parameters: &Parameters<T::BellmanEngine>,
Expand Down
9 changes: 3 additions & 6 deletions zokrates_bellman/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
pub mod groth16;
pub mod plonk;

extern crate bellman_ce as bellman;

use bellman::groth16::Proof;
use bellman::groth16::{
Expand Down Expand Up @@ -200,7 +197,7 @@ impl<T: BellmanFieldExtensions + Field, I: IntoIterator<Item = Statement<T>>> Co

pub mod serialization {
use super::*;
use bellman::{pairing::from_hex, CurveAffine, Engine};
use bellman::{pairing::from_hex, pairing::CurveAffine, pairing::Engine};
use zokrates_proof_systems::{G1Affine, G2Affine};

pub fn to_g1<T: BellmanFieldExtensions>(
Expand Down Expand Up @@ -243,7 +240,7 @@ pub mod serialization {

mod parse {
use super::*;
use bellman::{pairing::CurveAffine, PrimeField};
use bellman::{pairing::ff::PrimeField, pairing::CurveAffine};
use zokrates_proof_systems::{Fq2, Fr, G1Affine, G2Affine, GAffine};

fn to_hex(bytes: &[u8]) -> String {
Expand Down Expand Up @@ -277,7 +274,7 @@ mod parse {
pub fn parse_fr<T: BellmanFieldExtensions>(
e: &<T::BellmanEngine as bellman::pairing::ff::ScalarEngine>::Fr,
) -> Fr {
use crate::bellman::PrimeFieldRepr;
use bellman::pairing::ff::PrimeFieldRepr;
let mut bytes: Vec<u8> = Vec::new();
e.into_repr().write_le(&mut bytes).unwrap();
bytes.reverse();
Expand Down
27 changes: 27 additions & 0 deletions zokrates_bellman_plonk/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[package]
name = "zokrates_bellman_plonk"
version = "0.1.0"
edition = "2021"

[features]
wasm = ["bellman_ce/nolog", "bellman_ce/wasm"]
multicore = ["bellman_ce/multicore", "phase2/multicore"]

[dependencies]
zokrates_field = { version = "0.5", path = "../zokrates_field", default-features = false }
zokrates_ast = { version = "0.1", path = "../zokrates_ast", default-features = false }
zokrates_proof_systems = { version = "0.1", path = "../zokrates_proof_systems", default-features = false }

bellman_ce = { git = "https://github.com/georgwiese/bellman", rev="dbed83d1971c29e8fdb07d341e8593fef8ba5eab", default-features = false, features = ["plonk", "multicore"] }
phase2 = { git = "https://github.com/Zokrates/phase2", default-features = false }
rand_0_4 = { version = "0.4", package = "rand" }#
getrandom = { version = "0.2", features = ["js", "wasm-bindgen"] }
hex = "0.4.2"

[dev-dependencies]
zokrates_interpreter = { version = "0.1", path = "../zokrates_interpreter", features = ["bellman"] }





Loading