shine.rs 1.5 KB

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