PrePIRCOT.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package pir.precomputation;
  2. import communication.Communication;
  3. import crypto.Crypto;
  4. import crypto.PRF;
  5. import oram.Forest;
  6. import oram.Metadata;
  7. import protocols.Protocol;
  8. import protocols.struct.Party;
  9. import protocols.struct.PreData;
  10. import util.M;
  11. public class PrePIRCOT extends Protocol {
  12. public PrePIRCOT(Communication con1, Communication con2) {
  13. super(con1, con2);
  14. }
  15. // TODO: change PRF output bits to max(32, N)
  16. public void runE(PreData predata, int l) {
  17. timer.start(M.offline_comp);
  18. predata.sscot_k = PRF.generateKey(Crypto.sr);
  19. predata.sscot_r = new byte[l][];
  20. for (int i = 0; i < l; i++) {
  21. predata.sscot_r[i] = new byte[Crypto.secParamBytes];
  22. Crypto.sr.nextBytes(predata.sscot_r[i]);
  23. }
  24. predata.sscot_s_DE = Crypto.sr.nextInt(l);
  25. predata.sscot_s_CE = Crypto.sr.nextInt(l);
  26. timer.start(M.offline_write);
  27. con1.write(offline_band, predata.sscot_k);
  28. con1.write(offline_band, predata.sscot_r);
  29. con1.write(offline_band, predata.sscot_s_DE);
  30. con2.write(offline_band, predata.sscot_s_CE);
  31. timer.stop(M.offline_write);
  32. predata.sscot_F_k = new PRF(Crypto.secParam);
  33. predata.sscot_F_k.init(predata.sscot_k);
  34. timer.stop(M.offline_comp);
  35. }
  36. public void runD(PreData predata, int l) {
  37. timer.start(M.offline_comp);
  38. predata.sscot_s_CD = Crypto.sr.nextInt(l);
  39. timer.start(M.offline_write);
  40. con2.write(offline_band, predata.sscot_s_CD);
  41. timer.stop(M.offline_write);
  42. timer.start(M.offline_read);
  43. predata.sscot_k = con1.readAndDec();
  44. predata.sscot_r = con1.readDoubleByteArrayAndDec();
  45. predata.sscot_s_DE = con1.readIntAndDec();
  46. timer.stop(M.offline_read);
  47. predata.sscot_F_k = new PRF(Crypto.secParam);
  48. predata.sscot_F_k.init(predata.sscot_k);
  49. timer.stop(M.offline_comp);
  50. }
  51. public void runC(PreData predata) {
  52. timer.start(M.offline_comp);
  53. timer.start(M.offline_read);
  54. predata.sscot_s_CE = con1.readIntAndDec();
  55. predata.sscot_s_CD = con2.readIntAndDec();
  56. timer.stop(M.offline_read);
  57. timer.stop(M.offline_comp);
  58. }
  59. @Override
  60. public void run(Party party, Metadata md, Forest forest) {
  61. }
  62. @Override
  63. public void run(Party party, Metadata md, Forest[] forest) {
  64. }
  65. }