duoram-refresh.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. if(flags[(j + rotate_by) % db_nitems] != 0)
  7. {
  8. tmp = finalCW;
  9. }
  10. else
  11. {
  12. tmp = 0;
  13. }
  14. if(party) updated_blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] - tmp;
  15. if(!party) updated_blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] + tmp;
  16. }
  17. }
  18. void get_refresh_correction_words (tcp::socket& sb, DB_t one_shareA, DB_t one_shareB,
  19. 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[],
  35. DB_t finalCW0, DB_t finalCW2, bool party, size_t db_nitems, size_t rotate_by = 0)
  36. {
  37. DB_t tmp0 = 0;
  38. DB_t tmp2 = 0;
  39. for(size_t j = 0; j < db_nitems; ++j)
  40. {
  41. if(flags0[(j + rotate_by) % db_nitems] != 0)
  42. {
  43. tmp0 = finalCW0;
  44. }
  45. else
  46. {
  47. tmp0 = 0;
  48. }
  49. if(flags2[(j + rotate_by) % db_nitems] != 0)
  50. {
  51. tmp2 = finalCW2;
  52. }
  53. else
  54. {
  55. tmp2 = 0;
  56. }
  57. if(party)
  58. {
  59. updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems] - tmp0 + tmp2;
  60. }
  61. if(!party)
  62. {
  63. updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems] + tmp0 - tmp2;
  64. }
  65. }
  66. }
  67. 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[],
  68. bool party, size_t db_nitems, size_t rotate_by)
  69. {
  70. for(size_t j = 0; j < db_nitems; ++j)
  71. {
  72. updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems]
  73. - (flags0[(j + rotate_by) % db_nitems] * finalCW) + (flags2[(j + rotate_by) % db_nitems] * finalCW);
  74. blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] - (flags[(j + rotate_by) % db_nitems] * finalCW);// ((flags[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 );
  75. // if(party)
  76. // {
  77. // updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems] - ((flags0[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 ) + ((flags2[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 );
  78. // blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] - ((flags[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 );
  79. // }
  80. // if(!party)
  81. // {
  82. // updated_blinded_DB_recv[j] = blinded_DB_recv[j] - b[(j + rotate_by) % db_nitems] + d[(j + rotate_by) % db_nitems] + ((flags0[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 ) - ((flags2[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 );
  83. // blinds[j] = blinds[j] - standard_basis_vector[(j + rotate_by) % db_nitems] + ((flags[(j + rotate_by) % db_nitems]!=0) ? finalCW : 0 );
  84. // }
  85. }
  86. }
  87. 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)
  88. {
  89. refresh_blinded_vector_and_blinds(flags1, c, CW, flags0, flags2, b, d, party, db_nitems, rotate_by_);
  90. }