main.rs 1.5 KB

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