Skip to content

Commit bb599e2

Browse files
authored
Merge pull request #25 from privacy-ethereum/feat/v1-spartan2
Add Spartan2 Fork Integration
2 parents 2c6220a + 536d537 commit bb599e2

51 files changed

Lines changed: 349 additions & 8238 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.vscode/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"rust-analyzer.linkedProjects": [
33
"./wallet-unit-poc/ecdsa-spartan2/Cargo.toml",
4-
"./wallet-unit-poc/forks/Spartan2/Cargo.toml"
54
]
65
}

wallet-unit-poc/ecdsa-spartan2/Cargo.lock

Lines changed: 28 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wallet-unit-poc/ecdsa-spartan2/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ edition = "2021"
55

66
[dependencies]
77
circom-scotia = "0.2.0"
8-
spartan2 = { path = "../forks/Spartan2", default-features = false }
8+
spartan2 = { git = "https://github.com/therealyingtong/Spartan2.git", branch = "zk", default-features = false }
99
bellpepper = "0.4.0"
1010
bellpepper-core = "0.4.0"
1111
ff = { version = "0.13.0", features = ["derive"] }
@@ -15,3 +15,7 @@ tracing = "0.1"
1515
tracing-subscriber = { version = "0.3.18", features = ["env-filter", "time"] }
1616
sha2 = "0.10.7"
1717
bincode = "1.3.3"
18+
memmap2 = "0.9.8"
19+
20+
[profile.release]
21+
debug = true
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
use std::time::Instant;
2+
3+
use crate::{
4+
ecdsa_circuit::ECDSACircuit,
5+
jwt_circuit::JWTCircuit,
6+
setup::{load_keys, load_proving_key},
7+
E,
8+
};
9+
10+
use spartan2::{traits::snark::R1CSSNARKTrait, zk_spartan::R1CSSNARK};
11+
use tracing::info;
12+
13+
pub fn prove_ecdsa() {
14+
let circuit = ECDSACircuit;
15+
let pk_path = "keys/ecdsa_proving.key";
16+
let vk_path = "keys/ecdsa_verifying.key";
17+
18+
let (pk, _vk) = match load_keys(pk_path, vk_path) {
19+
Ok(keys) => keys,
20+
Err(e) => {
21+
eprintln!("Failed to load keys: {}", e);
22+
panic!("Could not load keys: {}", e);
23+
}
24+
};
25+
26+
let t0 = Instant::now();
27+
let mut prep_snark =
28+
R1CSSNARK::<E>::prep_prove(&pk, circuit.clone(), false).expect("prep_prove failed");
29+
let prep_ms = t0.elapsed().as_millis();
30+
info!("ECDSA prep_prove: {} ms", prep_ms);
31+
32+
let t0 = Instant::now();
33+
R1CSSNARK::<E>::prove(&pk, circuit.clone(), &mut prep_snark, false).expect("prove failed");
34+
let sumcheck_ms = t0.elapsed().as_millis();
35+
36+
info!("ECDSA prove: {} ms", sumcheck_ms);
37+
38+
let total_ms = prep_ms + sumcheck_ms;
39+
info!(
40+
"ECDSA ZK-Spartan prove TOTAL: {} ms (~{:.1}s)",
41+
total_ms,
42+
total_ms as f64 / 1000.0
43+
);
44+
}
45+
46+
pub fn prove_jwt() {
47+
let circuit = JWTCircuit;
48+
let pk_path = "keys/jwt_proving.key";
49+
50+
// load_proving_chunked_key also can be used here
51+
let pk = load_proving_key(pk_path).expect("load proving key failed");
52+
53+
let t0 = Instant::now();
54+
let mut prep_snark =
55+
R1CSSNARK::<E>::prep_prove(&pk, circuit.clone(), false).expect("prep_prove failed");
56+
let prep_ms = t0.elapsed().as_millis();
57+
info!("JWT ZK-Spartan prep_prove: {} ms", prep_ms);
58+
59+
let t0 = Instant::now();
60+
R1CSSNARK::<E>::prove(&pk, circuit.clone(), &mut prep_snark, false).expect("prove failed");
61+
let sumcheck_ms = t0.elapsed().as_millis();
62+
63+
info!("JWT ZK-Spartan prove: {} ms", sumcheck_ms);
64+
65+
let total_ms = prep_ms + sumcheck_ms;
66+
info!(
67+
"JWT ZK-Spartan prove TOTAL: {} ms (~{:.1}s)",
68+
total_ms,
69+
total_ms as f64 / 1000.0
70+
);
71+
}

0 commit comments

Comments
 (0)