simple.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. use bellman::{
  2. gadgets::{
  3. boolean,
  4. boolean::{AllocatedBit, Boolean},
  5. multipack,
  6. },
  7. groth16, Circuit, ConstraintSystem, SynthesisError,
  8. };
  9. use bls12_381::Bls12;
  10. use ff::{Field, PrimeField};
  11. use group::Curve;
  12. mod simple_circuit;
  13. use simple_circuit::InputSpend;
  14. fn main() {
  15. use core::ops::{Mul, MulAssign};
  16. use ff::PrimeField;
  17. use group::{Group, GroupEncoding};
  18. use jubjub::SubgroupPoint;
  19. use jubjub::*;
  20. use rand::rngs::OsRng;
  21. //let ak = jubjub::SubgroupPoint::random(&mut OsRng);
  22. let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
  23. let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
  24. let params = {
  25. let c = InputSpend { secret: None };
  26. groth16::generate_random_parameters::<Bls12, _, _>(c, &mut OsRng).unwrap()
  27. };
  28. let pvk = groth16::prepare_verifying_key(&params.vk);
  29. let c = InputSpend {
  30. secret: Some(secret),
  31. };
  32. let proof = groth16::create_random_proof(c, &params, &mut OsRng).unwrap();
  33. let mut public_input = [bls12_381::Scalar::zero(); 2];
  34. {
  35. let result = jubjub::ExtendedPoint::from(public);
  36. let affine = result.to_affine();
  37. //let (u, v) = (affine.get_u(), affine.get_v());
  38. let u = affine.get_u();
  39. let v = affine.get_v();
  40. public_input[0] = u;
  41. public_input[1] = v;
  42. }
  43. assert!(groth16::verify_proof(&pvk, &proof, &public_input).is_ok());
  44. }