PrePostProcessT.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package protocols.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 PrePostProcessT extends Protocol {
  14. private int pid = P.PPT;
  15. public PrePostProcessT(Communication con1, Communication con2) {
  16. super(con1, con2);
  17. }
  18. public void runE(PreData predata, Timer timer) {
  19. timer.start(pid, M.offline_read);
  20. predata.ppt_Li = con1.read();
  21. predata.ppt_Lip1 = con1.read();
  22. predata.ppt_s = con1.readDoubleByteArray();
  23. timer.stop(pid, M.offline_read);
  24. }
  25. public void runD(PreData predata, PreData prev, int LiBytes, int Lip1Bytes, int tau, Timer timer) {
  26. timer.start(pid, M.offline_comp);
  27. if (prev != null)
  28. predata.ppt_Li = prev.ppt_Lip1;
  29. else
  30. predata.ppt_Li = Util.nextBytes(LiBytes, Crypto.sr);
  31. predata.ppt_Lip1 = Util.nextBytes(Lip1Bytes, Crypto.sr);
  32. int twoTauPow = (int) Math.pow(2, tau);
  33. predata.ppt_alpha = Crypto.sr.nextInt(tau);
  34. predata.ppt_r = new byte[twoTauPow][];
  35. predata.ppt_s = new byte[twoTauPow][];
  36. for (int i = 0; i < twoTauPow; i++) {
  37. predata.ppt_r[i] = Util.nextBytes(Lip1Bytes, Crypto.sr);
  38. predata.ppt_s[i] = predata.ppt_r[i];
  39. }
  40. predata.ppt_s[predata.ppt_alpha] = Util.xor(predata.ppt_r[predata.ppt_alpha], predata.ppt_Lip1);
  41. timer.start(pid, M.offline_write);
  42. con1.write(predata.ppt_Li);
  43. con1.write(predata.ppt_Lip1);
  44. con2.write(predata.ppt_alpha);
  45. con2.write(predata.ppt_r);
  46. con1.write(predata.ppt_s);
  47. timer.stop(pid, M.offline_write);
  48. timer.stop(pid, M.offline_comp);
  49. }
  50. public void runC(PreData predata, PreData prev, int LiBytes, int Lip1Bytes, Timer timer) {
  51. timer.start(pid, M.offline_comp);
  52. if (prev != null)
  53. predata.ppt_Li = prev.ppt_Lip1;
  54. else
  55. predata.ppt_Li = Util.nextBytes(LiBytes, Crypto.sr);
  56. predata.ppt_Lip1 = Util.nextBytes(Lip1Bytes, Crypto.sr);
  57. timer.start(pid, M.offline_read);
  58. predata.ppt_alpha = con2.readInt();
  59. predata.ppt_r = con2.readDoubleByteArray();
  60. timer.stop(pid, M.offline_read);
  61. timer.stop(pid, M.offline_comp);
  62. }
  63. @Override
  64. public void run(Party party, Metadata md, Forest forest) {
  65. }
  66. }