PreRetrieve.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package protocols.precomputation;
  2. import communication.Communication;
  3. import oram.Forest;
  4. import oram.Metadata;
  5. import protocols.Protocol;
  6. import protocols.struct.Party;
  7. import protocols.struct.PreData;
  8. import util.Timer;
  9. public class PreRetrieve extends Protocol {
  10. public PreRetrieve(Communication con1, Communication con2) {
  11. super(con1, con2);
  12. }
  13. // TODO: not all protocols run on all trees (remove unnecessary precomp)
  14. public void runE(PreData[] predata, Metadata md, int ti, Timer timer) {
  15. // 1st eviction
  16. PreAccess preaccess = new PreAccess(con1, con2);
  17. PreReshuffle prereshuffle = new PreReshuffle(con1, con2);
  18. PrePostProcessT prepostprocesst = new PrePostProcessT(con1, con2);
  19. PreUpdateRoot preupdateroot = new PreUpdateRoot(con1, con2);
  20. PreEviction preeviction = new PreEviction(con1, con2);
  21. int numTuples = md.getStashSizeOfTree(ti) + md.getLBitsOfTree(ti) * md.getW();
  22. int[] tupleParam = new int[] { ti == 0 ? 0 : 1, md.getNBytesOfTree(ti), md.getLBytesOfTree(ti),
  23. md.getABytesOfTree(ti) };
  24. preaccess.runE(predata[0], md.getTwoTauPow(), numTuples, tupleParam, timer);
  25. prereshuffle.runE(predata[0], timer);
  26. prepostprocesst.runE(predata[0], timer);
  27. preupdateroot.runE(predata[0], ti == 0, md.getStashSizeOfTree(ti), md.getLBitsOfTree(ti), timer);
  28. preeviction.runE(predata[0], ti == 0, md.getLBitsOfTree(ti) + 1, md.getW(), timer);
  29. // 2nd eviction
  30. preupdateroot.runE(predata[1], ti == 0, md.getStashSizeOfTree(ti), md.getLBitsOfTree(ti), timer);
  31. preeviction.runE(predata[1], ti == 0, md.getLBitsOfTree(ti) + 1, md.getW(), timer);
  32. }
  33. public long[] runD(PreData[] predata, Metadata md, int ti, PreData prev, Timer timer) {
  34. // 1st eviction
  35. PreAccess preaccess = new PreAccess(con1, con2);
  36. PreReshuffle prereshuffle = new PreReshuffle(con1, con2);
  37. PrePostProcessT prepostprocesst = new PrePostProcessT(con1, con2);
  38. PreUpdateRoot preupdateroot = new PreUpdateRoot(con1, con2);
  39. PreEviction preeviction = new PreEviction(con1, con2);
  40. int[] tupleParam = new int[] { ti == 0 ? 0 : 1, md.getNBytesOfTree(ti), md.getLBytesOfTree(ti),
  41. md.getABytesOfTree(ti) };
  42. long[] cnt = new long[2];
  43. preaccess.runD(predata[0], timer);
  44. prereshuffle.runD(predata[0], tupleParam, timer);
  45. prepostprocesst.runD(predata[0], prev, md.getLBytesOfTree(ti), md.getAlBytesOfTree(ti), md.getTau(), timer);
  46. cnt[0] += preupdateroot.runD(predata[0], ti == 0, md.getStashSizeOfTree(ti), md.getLBitsOfTree(ti), tupleParam,
  47. timer);
  48. cnt[1] += preeviction.runD(predata[0], ti == 0, md.getLBitsOfTree(ti) + 1, md.getW(), tupleParam, timer);
  49. // 2nd eviction
  50. cnt[0] += preupdateroot.runD(predata[1], ti == 0, md.getStashSizeOfTree(ti), md.getLBitsOfTree(ti), tupleParam,
  51. timer);
  52. cnt[1] += preeviction.runD(predata[1], ti == 0, md.getLBitsOfTree(ti) + 1, md.getW(), tupleParam, timer);
  53. return cnt;
  54. }
  55. public void runC(PreData[] predata, Metadata md, int ti, PreData prev, Timer timer) {
  56. // 1st eviction
  57. PreAccess preaccess = new PreAccess(con1, con2);
  58. PreReshuffle prereshuffle = new PreReshuffle(con1, con2);
  59. PrePostProcessT prepostprocesst = new PrePostProcessT(con1, con2);
  60. PreUpdateRoot preupdateroot = new PreUpdateRoot(con1, con2);
  61. PreEviction preeviction = new PreEviction(con1, con2);
  62. preaccess.runC(timer);
  63. prereshuffle.runC(predata[0], timer);
  64. prepostprocesst.runC(predata[0], prev, md.getLBytesOfTree(ti), md.getAlBytesOfTree(ti), timer);
  65. preupdateroot.runC(predata[0], ti == 0, timer);
  66. preeviction.runC(predata[0], ti == 0, timer);
  67. // 2nd eviction
  68. preupdateroot.runC(predata[1], ti == 0, timer);
  69. preeviction.runC(predata[1], ti == 0, timer);
  70. }
  71. @Override
  72. public void run(Party party, Metadata md, Forest forest) {
  73. }
  74. }