123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- void convert_shares(__m128i ** output, int8_t ** flags, size_t n_threads, size_t db_nitems, __m128i * final_correction_word, tcp::socket& sb, bool party)
- {
-
- for(size_t j = 0; j < db_nitems; ++j)
- {
- for(size_t k = 0; k < n_threads; ++k)
- {
- if(party)
- {
- //output[k][j] = -output[k][j];
- flags[k][j] = -flags[k][j];
- }
- }
- #ifdef DEBUG
- int8_t out = flags[0][j];
- int8_t out_rec;
- boost::asio::write(sb, boost::asio::buffer(&out, sizeof(out)));
- boost::asio::read(sb, boost::asio::buffer(&out_rec, sizeof(out_rec)));
- out_rec = out_rec + out;
- __m128i out2 = output[0][j];
- __m128i out_rec2;
- boost::asio::write(sb, boost::asio::buffer(&out2, sizeof(out2)));
- boost::asio::read(sb, boost::asio::buffer(&out_rec2, sizeof(out_rec2)));
- out_rec2 = out_rec2 + out2;
- #endif
- }
- for(size_t i = 0; i < n_threads; ++i)
- {
- int64_t pm = 0;
- int64_t rb;
- arc4random_buf(&rb, sizeof(rb));
- for(size_t j = 0; j < db_nitems; ++j)
- {
- if(party)
- {
- if(flags[i][j] != 0) pm -= 1;
- }
- if(!party)
- {
- if(flags[i][j] != 0) pm += 1;
- }
- }
- int64_t rb_reconstruction;
- boost::asio::write(sb, boost::asio::buffer(&rb, sizeof(rb)));
- boost::asio::read(sb, boost::asio::buffer(&rb_reconstruction, sizeof(rb_reconstruction)));
- rb_reconstruction = rb_reconstruction + rb;
- int64_t pm_reconstruction;
- boost::asio::write(sb, boost::asio::buffer(&pm, sizeof(pm)));
- boost::asio::read(sb, boost::asio::buffer(&pm_reconstruction, sizeof(pm_reconstruction)));
- pm_reconstruction = pm_reconstruction + pm;
-
- int64_t finalcw_rec = 0;
- boost::asio::write(sb, boost::asio::buffer(&final_correction_word[i][0], sizeof(final_correction_word[i][0])));
- boost::asio::read(sb, boost::asio::buffer(&finalcw_rec, sizeof(finalcw_rec)));
- finalcw_rec = finalcw_rec + final_correction_word[i][0];
- int64_t rbpm_fcw = (final_correction_word[i][0]) * pm_reconstruction;
- int64_t PM = pm + rb;
- int64_t PM_recv;
- boost::asio::write(sb, boost::asio::buffer(&PM, sizeof(PM)));
- boost::asio::read(sb, boost::asio::buffer(&PM_recv, sizeof(PM_recv)));
-
- int64_t * flags_ = (int64_t *)std::aligned_alloc(sizeof(node_t), db_nitems * sizeof(int64_t));
- for(size_t j = 0; j < db_nitems; ++j)
- {
- flags_[j] = (flags[i][j] * pm) + (flags[i][j] * PM_recv) + (flags[i][j] * rb);
-
- #ifdef DEBUG
- int64_t flags_rec;
- boost::asio::write(sb, boost::asio::buffer(&flags_[j], sizeof(flags_[j])));
- boost::asio::read(sb, boost::asio::buffer(&flags_rec, sizeof(flags_rec)));
- flags_rec = flags_rec + flags_[j];
- #endif
- }
-
-
- for(size_t j = 0; j < db_nitems; ++j)
- {
- flags_[j] += output[i][j][0];
- if(!party)
- {
- if(flags[i][j] != 0) flags_[j] -= (rb_reconstruction) + rbpm_fcw;
- }
- if(party)
- {
- if(flags[i][j] != 0) flags_[j] += (rb_reconstruction) + rbpm_fcw;
- }
- #ifdef DEBUG
- int64_t flags_rec;
- boost::asio::write(sb, boost::asio::buffer(&flags_[j], sizeof(flags_[j])));
- boost::asio::read(sb, boost::asio::buffer(&flags_rec, sizeof(flags_rec)));
- flags_rec = flags_rec + flags_[j];
- if(flags_rec != 0)
- {
- std::cout << j << "---> flag_reconstruction = " << flags_rec << std::endl;
- }
- #endif
- }
-
- }
- }
|