PrePIRReshuffle.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package pir.precomputation;
  2. import communication.Communication;
  3. import crypto.Crypto;
  4. import oram.Forest;
  5. import oram.Metadata;
  6. import protocols.Protocol;
  7. import protocols.struct.Party;
  8. import protocols.struct.PreData;
  9. import util.M;
  10. import util.P;
  11. import util.Timer;
  12. import util.Util;
  13. public class PrePIRReshuffle extends Protocol {
  14. private int pid = P.RSF;
  15. public PrePIRReshuffle(Communication con1, Communication con2) {
  16. super(con1, con2);
  17. }
  18. public void runE(PreData predata, Timer timer) {
  19. timer.start(pid, M.offline_comp);
  20. predata.reshuffle_pi = Util.inversePermutation(predata.access_sigma);
  21. timer.start(pid, M.offline_read);
  22. predata.pir_reshuffle_r = con1.readDoubleByteArray();
  23. timer.stop(pid, M.offline_read);
  24. timer.stop(pid, M.offline_comp);
  25. }
  26. public void runD(PreData predata, int[] tupleParam, Timer timer) {
  27. timer.start(pid, M.offline_comp);
  28. predata.reshuffle_pi = Util.inversePermutation(predata.access_sigma);
  29. int numTuples = predata.reshuffle_pi.length;
  30. predata.pir_reshuffle_p = new byte[numTuples][];
  31. predata.pir_reshuffle_r = new byte[numTuples][];
  32. byte[][] a = new byte[numTuples][];
  33. for (int i = 0; i < numTuples; i++) {
  34. predata.pir_reshuffle_p[i] = Util.nextBytes(1, Crypto.sr);
  35. predata.pir_reshuffle_r[i] = Util.nextBytes(1, Crypto.sr);
  36. a[i] = Util.xor(predata.pir_reshuffle_p[i], predata.pir_reshuffle_r[i]);
  37. }
  38. predata.pir_reshuffle_a_prime = Util.permute(a, predata.reshuffle_pi);
  39. timer.start(pid, M.offline_write);
  40. con2.write(predata.pir_reshuffle_p);
  41. con2.write(predata.pir_reshuffle_a_prime);
  42. con1.write(predata.pir_reshuffle_r);
  43. timer.stop(pid, M.offline_write);
  44. timer.stop(pid, M.offline_comp);
  45. }
  46. public void runC(PreData predata, Timer timer) {
  47. timer.start(pid, M.offline_read);
  48. predata.pir_reshuffle_p = con2.readDoubleByteArray();
  49. predata.pir_reshuffle_a_prime = con2.readDoubleByteArray();
  50. timer.stop(pid, M.offline_read);
  51. }
  52. @Override
  53. public void run(Party party, Metadata md, Forest forest) {
  54. }
  55. @Override
  56. public void run(Party party, Metadata md, Forest[] forest) {
  57. // TODO Auto-generated method stub
  58. }
  59. }