PreReshuffle.java 2.0 KB

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