Przeglądaj źródła

add missing jubjub.rs

narodnik 5 lat temu
rodzic
commit
b82f1d5e44
1 zmienionych plików z 71 dodań i 0 usunięć
  1. 71 0
      src/bin/jubjub.rs

+ 71 - 0
src/bin/jubjub.rs

@@ -0,0 +1,71 @@
+use sapvi::{BlsStringConversion, Decodable, ZKSupervisor};
+use std::fs::File;
+use std::time::Instant;
+
+use bls12_381::Scalar;
+use ff::{Field, PrimeField};
+use group::{Curve, Group, GroupEncoding};
+use rand::rngs::OsRng;
+
+type Result<T> = std::result::Result<T, failure::Error>;
+
+fn main() -> Result<()> {
+    let start = Instant::now();
+    let file = File::open("jubjub.zcd")?;
+    let mut visor = ZKSupervisor::decode(file)?;
+    println!("{}", visor.name);
+    //ZKSupervisor::load_contract(bytes);
+    println!("Finished: [{:?}]", start.elapsed());
+
+    println!("Stats:");
+    println!("    Constants: {}", visor.vm.constants.len());
+    println!("    Alloc: {}", visor.vm.alloc.len());
+    println!("    Operations: {}", visor.vm.ops.len());
+    println!(
+        "    Constraint Instructions: {}",
+        visor.vm.constraints.len()
+    );
+
+    visor.vm.setup();
+
+    visor.set_param(
+        "x1",
+        Scalar::from_string("15a36d1f0f390d8852a35a8c1908dd87a361ee3fd48fdf77b9819dc82d90607e"),
+    )?;
+    visor.set_param(
+        "y1",
+        Scalar::from_string("015d8c7f5b43fe33f7891142c001d9251f3abeeb98fad3e87b0dc53c4ebf1891"),
+    )?;
+    visor.set_param(
+        "x2",
+        Scalar::from_string("15a36d1f0f390d8852a35a8c1908dd87a361ee3fd48fdf77b9819dc82d90607e"),
+    )?;
+    visor.set_param(
+        "y2",
+        Scalar::from_string("015d8c7f5b43fe33f7891142c001d9251f3abeeb98fad3e87b0dc53c4ebf1891"),
+    )?;
+
+    visor.vm.initialize(&visor.params.into_iter().collect());
+
+    let proof = visor.vm.prove();
+
+    let public = visor.vm.public();
+
+    assert_eq!(public.len(), 2);
+    // 0x66ced46f14e5616d12b993f60a6e66558d6b6afe4c321ed212e0b9cfbd81061a
+    assert_eq!(
+        public[0],
+        Scalar::from_string("66ced46f14e5616d12b993f60a6e66558d6b6afe4c321ed212e0b9cfbd81061a")
+    );
+    // 0x4731570fdd57cf280eadc8946fa00df81112502e44e497e794ab9a221f1bcca
+    assert_eq!(
+        public[1],
+        Scalar::from_string("04731570fdd57cf280eadc8946fa00df81112502e44e497e794ab9a221f1bcca")
+    );
+    println!("u = {:?}", public[0]);
+    println!("v = {:?}", public[1]);
+
+    assert!(visor.vm.verify(&proof, &public));
+
+    Ok(())
+}