duoram-refresh.h 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. void refresh_blinds(int8_t flags[], DB_t standard_basis_vector[], DB_t finalCW, bool party, size_t db_nitems, size_t rotate_by = 0)
  2. {
  3. DB_t tmp = 0;
  4. for(size_t j = 0; j < db_nitems; ++j)
  5. {
  6. tmp = (flags[(j + rotate_by) % db_nitems] != 0) ? finalCW : 0;
  7. // if(flags[(j + rotate_by) % db_nitems] != 0)
  8. // {
  9. // tmp = finalCW;
  10. // }
  11. // else
  12. // {
  13. // tmp = 0;
  14. // }
  15. if(party) updated_blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] - tmp;
  16. if(!party) updated_blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] + tmp;
  17. }
  18. }
  19. // void get_refresh_correction_words (tcp::socket& sb, DB_t one_shareA, DB_t one_shareB, DB_t one_shareC, DB_t& CW0, DB_t& CW1, DB_t& CW2, DB_t value)
  20. // {
  21. // DB_t tmp0 = value + one_shareA;
  22. // write(sb, boost::asio::buffer(&tmp0, sizeof(tmp0)));
  23. // read(sb, boost::asio::buffer(&CW0, sizeof(CW0)));
  24. // CW0 = CW0 + tmp0;
  25. // DB_t tmp1 = value + one_shareB;
  26. // write(sb, boost::asio::buffer(&tmp1, sizeof(tmp1)));
  27. // read(sb, boost::asio::buffer(&CW1, sizeof(CW1)));
  28. // CW1 = CW1 + tmp1;
  29. // DB_t tmp2 = value + one_shareC;
  30. // write(sb, boost::asio::buffer(&tmp2, sizeof(tmp2)));
  31. // read(sb, boost::asio::buffer(&CW2, sizeof(CW2)));
  32. // CW2 = CW2 + tmp2;
  33. // }
  34. void refresh_blinded_vector(int8_t flags0[], int8_t flags2[], DB_t b[], DB_t d[], DB_t finalCW0, DB_t finalCW2, bool party, size_t db_nitems, size_t rotate_by = 0)
  35. {
  36. DB_t tmp0 = 0;
  37. DB_t tmp2 = 0;
  38. for(size_t j = 0; j < db_nitems; ++j)
  39. {
  40. tmp0 = (flags0[(j + rotate_by) % db_nitems] != 0) ? finalCW0 : 0;
  41. tmp2 = (flags2[(j + rotate_by) % db_nitems] != 0) ? finalCW2 : 0;
  42. // if(flags0[(j + rotate_by) % db_nitems] != 0)
  43. // {
  44. // tmp0 = finalCW0;
  45. // }
  46. // else
  47. // {
  48. // tmp0 = 0;
  49. // }
  50. // if(flags2[(j + rotate_by) % db_nitems] != 0)
  51. // {
  52. // tmp2 = finalCW2;
  53. // }
  54. // else
  55. // {
  56. // tmp2 = 0;
  57. // }
  58. if(party)
  59. {
  60. updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems] - tmp0 + tmp2;
  61. }
  62. if(!party)
  63. {
  64. updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems] + tmp0 - tmp2;
  65. }
  66. }
  67. }
  68. void refresh_blinded_vector_and_blinds(int8_t flags[], DB_t standard_basis_vector[], DB_t finalCW,int8_t flags0[], int8_t flags2[], DB_t b[], DB_t d[],
  69. bool party, size_t db_nitems, size_t rotate_by)
  70. {
  71. for(size_t j = 0; j < db_nitems; ++j)
  72. {
  73. updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems]
  74. - (flags0[(j + rotate_by) % db_nitems] * finalCW) + (flags2[(j + rotate_by) % db_nitems] * finalCW);
  75. blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] - (flags[(j + rotate_by) % db_nitems] * finalCW);
  76. }
  77. }
  78. void duoram_refresh (int8_t flags0[], int8_t flags1[], int8_t flags2[], DB_t b[], DB_t c[], DB_t d[], DB_t CW, bool party, size_t db_nitems, size_t rotate_by_ = 0)
  79. {
  80. refresh_blinded_vector_and_blinds(flags1, c, CW, flags0, flags2, b, d, party, db_nitems, rotate_by_);
  81. }