You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.2 KiB

1 year ago
1 year ago
1 year ago
  1. # ipa-rs [![Test](https://github.com/arnaucube/ipa-rs/workflows/Test/badge.svg)](https://github.com/arnaucube/ipa-rs/actions?query=workflow%3ATest)
  2. Inner Product Argument (IPA) version from Halo paper (https://eprint.iacr.org/2019/1021.pdf) implementation done to get familiar with [arkworks](https://arkworks.rs) and the modified IPA scheme.
  3. > Warning: do not use this code in production.
  4. ### Example
  5. ```rust
  6. let mut ipa = IPA::new(8);
  7. let a = vec![
  8. F::from(1 as u32),
  9. F::from(2 as u32),
  10. F::from(3 as u32),
  11. F::from(4 as u32),
  12. F::from(5 as u32),
  13. F::from(6 as u32),
  14. F::from(7 as u32),
  15. F::from(8 as u32),
  16. ];
  17. let r = F::rand(&mut ipa.rng);
  18. // prover commits
  19. let P = ipa.commit(&a, r).unwrap();
  20. // verifier sets challenges
  21. let U = EdwardsProjective::rand(&mut ipa.rng);
  22. let k = (f64::from(ipa.d as u32).log2()) as usize;
  23. let mut u: Vec<F> = vec![F::zero(); k];
  24. for j in 0..k {
  25. u[j] = F::rand(&mut ipa.rng);
  26. }
  27. let x = F::from(3 as u32);
  28. // prover opens at the challenges
  29. let b = powers_of(x, ipa.d);
  30. let v = inner_product_field(&a, &b).unwrap();
  31. let proof = ipa.prove(&a, &b, &u, &U).unwrap();
  32. // verifier
  33. let verif = ipa.verify(&x, &v, &P, &proof, &r, &u, &U).unwrap();
  34. assert!(verif);
  35. ```