duoram-write.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. void write_into_the_database(DB_t DB[], DB_t updated_DB[], int8_t flags[], DB_t b[], DB_t final_CW, bool party, size_t db_nitems, size_t rotate_by = 0)
  2. {
  3. for(size_t j = 0; j < db_nitems; ++j)
  4. {
  5. const size_t ind = (j + rotate_by) % db_nitems;
  6. DB_t tmp = (flags[ind] * final_CW);
  7. DB[j] = DB[j] + b[ind] + tmp;
  8. updated_DB[j] = DB[j];
  9. }
  10. }
  11. void duoram_update(tcp::socket& in2, tcp::socket& sb, DB_t DB[], DB_t updated_DB[], int8_t flags[], DB_t standard_basis[], DB_t M0, DB_t alpha0, bool party, size_t db_nitems, size_t offset = 0)
  12. {
  13. DB_t tmp = M0 + alpha0;
  14. DB_t recv_final_cw;
  15. write(sb, boost::asio::buffer(&tmp, sizeof(tmp)));
  16. write(in2, boost::asio::buffer(&tmp, sizeof(tmp)));
  17. read(sb, boost::asio::buffer(&recv_final_cw, sizeof(recv_final_cw)));
  18. recv_final_cw = recv_final_cw + tmp;
  19. write_into_the_database(DB, updated_DB, flags, standard_basis, recv_final_cw, party, db_nitems, offset);
  20. }
  21. void reconstruct_database(tcp::socket& sb, DB_t DB[], const size_t db_nitems)
  22. {
  23. for(size_t j = 0; j < db_nitems; ++j)
  24. {
  25. DB_t DB_j;
  26. boost::asio::write(sb, boost::asio::buffer(&DB[j], sizeof(DB[j])));
  27. boost::asio::read(sb, boost::asio::buffer(&DB_j, sizeof(DB_j)));
  28. DB_j = DB_j + DB[j];
  29. if(DB_j != 0) std::cout << j << " -> " << DB_j << std::endl;
  30. }
  31. }
  32. auto DuoramUpdate(bool party, size_t db_nitems, size_t rotate_by_,
  33. DB_t DB[], DB_t updated_DB[], int8_t writing_b[], DB_t b[], DB_t final_CW, DB_t message,
  34. int8_t writing_c[], int8_t writing_d[], DB_t c[], DB_t d[])
  35. {
  36. read_flags_for_updating(party, db_nitems);
  37. write_into_the_database(DB, updated_DB, writing_b, b, final_CW, party, db_nitems, - rotate_by_);
  38. #ifdef ThreeParty
  39. if(!party) duoram_refresh(writing_b, writing_c, writing_d, b, c, d, final_CW, party, db_nitems, -rotate_by_);
  40. if( party) duoram_refresh(writing_b, writing_d, writing_c, b, d, c, final_CW, party, db_nitems, -rotate_by_);
  41. #endif
  42. }