p_ot.rs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
  2. use oram::p_ot::{POTIndexParty, POTKeyParty, POTReceiverParty};
  3. use rand::{thread_rng, Rng};
  4. use utils::field::Fp;
  5. use utils::permutation::FisherYatesPermutation;
  6. const LOG_DOMAIN_SIZES: [u32; 4] = [8, 12, 16, 20];
  7. pub fn bench_pot(c: &mut Criterion) {
  8. let mut group = c.benchmark_group("POT");
  9. for log_domain_size in LOG_DOMAIN_SIZES {
  10. group.bench_with_input(
  11. BenchmarkId::new("init", log_domain_size),
  12. &log_domain_size,
  13. |b, &log_domain_size| {
  14. let mut key_party = POTKeyParty::<Fp, FisherYatesPermutation>::new(log_domain_size);
  15. let mut index_party =
  16. POTIndexParty::<Fp, FisherYatesPermutation>::new(log_domain_size);
  17. let mut receiver_party = POTReceiverParty::<Fp>::new(log_domain_size);
  18. b.iter(|| {
  19. key_party.reset();
  20. index_party.reset();
  21. receiver_party.reset();
  22. let (msg_to_index_party, msg_to_receiver_party) = key_party.init();
  23. index_party.init(msg_to_index_party.0, msg_to_index_party.1);
  24. receiver_party.init(msg_to_receiver_party);
  25. });
  26. },
  27. );
  28. group.bench_with_input(
  29. BenchmarkId::new("expand", log_domain_size),
  30. &log_domain_size,
  31. |b, &log_domain_size| {
  32. let mut key_party = POTKeyParty::<Fp, FisherYatesPermutation>::new(log_domain_size);
  33. key_party.init();
  34. b.iter(|| {
  35. black_box(key_party.expand());
  36. });
  37. },
  38. );
  39. group.bench_with_input(
  40. BenchmarkId::new("access", log_domain_size),
  41. &log_domain_size,
  42. |b, &log_domain_size| {
  43. let mut key_party = POTKeyParty::<Fp, FisherYatesPermutation>::new(log_domain_size);
  44. let mut index_party =
  45. POTIndexParty::<Fp, FisherYatesPermutation>::new(log_domain_size);
  46. let mut receiver_party = POTReceiverParty::<Fp>::new(log_domain_size);
  47. let (msg_to_index_party, msg_to_receiver_party) = key_party.init();
  48. index_party.init(msg_to_index_party.0, msg_to_index_party.1);
  49. receiver_party.init(msg_to_receiver_party);
  50. let index: u64 = thread_rng().gen_range(0..1 << log_domain_size);
  51. b.iter(|| {
  52. let msg_to_receiver_party = index_party.access(index);
  53. let output =
  54. receiver_party.access(msg_to_receiver_party.0, msg_to_receiver_party.1);
  55. black_box(output);
  56. });
  57. },
  58. );
  59. }
  60. group.finish();
  61. }
  62. criterion_group!(
  63. name = benches;
  64. config = Criterion::default().sample_size(10);
  65. targets = bench_pot
  66. );
  67. criterion_main!(benches);