main.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. use curve25519_dalek::constants as dalek_constants;
  2. use rand::RngCore;
  3. use std::env;
  4. use std::time::Instant;
  5. mod lagrange;
  6. pub mod shine;
  7. fn main() {
  8. let args: Vec<String> = env::args().collect();
  9. if args.len() < 4 || args.len() > 5 {
  10. println!("Usage: {} n t wlen [reps]", args[0]);
  11. return;
  12. }
  13. let n: u32 = args[1].parse().unwrap();
  14. let t: u32 = args[2].parse().unwrap();
  15. let wlen: usize = args[3].parse().unwrap();
  16. let mut reps = 1usize;
  17. if args.len() > 4 {
  18. reps = args[4].parse().unwrap();
  19. }
  20. let mut wvec: Vec<u8> = Vec::new();
  21. let mut rng = rand::thread_rng();
  22. wvec.resize(wlen, 0);
  23. let generator = dalek_constants::RISTRETTO_BASEPOINT_TABLE;
  24. let rk = shine::PreprocKey::rand(n, t);
  25. let delta = rk.delta();
  26. let mut evaltotdur = 0u128;
  27. let mut commtotdur = 0u128;
  28. for _ in 0..reps {
  29. rng.fill_bytes(&mut wvec);
  30. let evalstart = Instant::now();
  31. let evaluation = rk.partialeval(&wvec);
  32. let evaldur = evalstart.elapsed().as_micros();
  33. evaltotdur += evaldur;
  34. let commstart = Instant::now();
  35. let _commitment = &evaluation * &generator;
  36. let commdur = commstart.elapsed().as_micros();
  37. commtotdur += commdur;
  38. }
  39. println!(
  40. "{} {} {} {} {} {} {} {}",
  41. n,
  42. t,
  43. wlen,
  44. reps,
  45. delta,
  46. (evaltotdur as usize) / reps,
  47. (commtotdur as usize) / reps,
  48. (evaltotdur as f64) / ((reps as f64) * (delta as f64))
  49. );
  50. }