PreSSXOT.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 PreSSXOT extends Protocol {
  15. private int id;
  16. private int pid;
  17. public PreSSXOT(Communication con1, Communication con2, int id) {
  18. super(con1, con2);
  19. this.id = id;
  20. pid = id == 0 ? P.URXOT : P.XOT;
  21. }
  22. public void runE(PreData predata, Timer timer) {
  23. timer.start(pid, M.offline_read);
  24. predata.ssxot_E_pi[id] = con1.readIntArray();
  25. predata.ssxot_E_r[id] = con1.readTupleArray();
  26. timer.stop(pid, M.offline_read);
  27. }
  28. public void runD(PreData predata, int n, int k, int[] tupleParam, Timer timer) {
  29. timer.start(pid, M.offline_comp);
  30. predata.ssxot_delta[id] = new Tuple[k];
  31. for (int i = 0; i < k; i++)
  32. predata.ssxot_delta[id][i] = new Tuple(tupleParam[0], tupleParam[1], tupleParam[2], tupleParam[3],
  33. Crypto.sr);
  34. predata.ssxot_E_pi[id] = Util.randomPermutation(n, Crypto.sr);
  35. predata.ssxot_C_pi[id] = Util.randomPermutation(n, Crypto.sr);
  36. predata.ssxot_E_pi_ivs[id] = Util.inversePermutation(predata.ssxot_E_pi[id]);
  37. predata.ssxot_C_pi_ivs[id] = Util.inversePermutation(predata.ssxot_C_pi[id]);
  38. predata.ssxot_E_r[id] = new Tuple[n];
  39. predata.ssxot_C_r[id] = new Tuple[n];
  40. for (int i = 0; i < n; i++) {
  41. predata.ssxot_E_r[id][i] = new Tuple(tupleParam[0], tupleParam[1], tupleParam[2], tupleParam[3], Crypto.sr);
  42. predata.ssxot_C_r[id][i] = new Tuple(tupleParam[0], tupleParam[1], tupleParam[2], tupleParam[3], Crypto.sr);
  43. }
  44. timer.start(pid, M.offline_write);
  45. con1.write(predata.ssxot_E_pi[id]);
  46. con1.write(predata.ssxot_E_r[id]);
  47. con2.write(predata.ssxot_C_pi[id]);
  48. con2.write(predata.ssxot_C_r[id]);
  49. timer.stop(pid, M.offline_write);
  50. timer.stop(pid, M.offline_comp);
  51. }
  52. public void runC(PreData predata, Timer timer) {
  53. timer.start(pid, M.offline_read);
  54. predata.ssxot_C_pi[id] = con2.readIntArray();
  55. predata.ssxot_C_r[id] = con2.readTupleArray();
  56. timer.stop(pid, M.offline_read);
  57. }
  58. @Override
  59. public void run(Party party, Metadata md, Forest forest) {
  60. }
  61. }