|
@@ -64,11 +64,12 @@ int main(const int argc, const char * argv[])
|
|
|
size_t expo = atoi(argv[3]);
|
|
|
size_t db_nitems = 1ULL << expo;
|
|
|
|
|
|
- size_t number_of_writes = atoi(argv[4]);;
|
|
|
- size_t number_of_ind_reads = atoi(argv[5]);;
|
|
|
- size_t number_of_dep_reads = atoi(argv[6]);;
|
|
|
-
|
|
|
- reading_temp = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
|
|
|
+ size_t number_of_writes = atoi(argv[4]);
|
|
|
+ size_t number_of_ind_reads = atoi(argv[5]);
|
|
|
+ size_t number_of_dep_reads = atoi(argv[6]);
|
|
|
+ size_t number_of_accesses = atoi(argv[7]);
|
|
|
+
|
|
|
+ reading_temp = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
|
|
|
|
|
|
DB = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
|
|
|
updated_DB = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
|
|
@@ -197,9 +198,13 @@ int main(const int argc, const char * argv[])
|
|
|
|
|
|
auto start_total = std::chrono::steady_clock::now();
|
|
|
|
|
|
+
|
|
|
size_t * where_to_write = new size_t[number_of_writes];
|
|
|
size_t * where_to_read_dependent = new size_t[number_of_dep_reads];
|
|
|
size_t * where_to_read_independent = new size_t[number_of_ind_reads];
|
|
|
+
|
|
|
+ for(size_t i = 0; i < number_of_accesses; ++i)
|
|
|
+ {
|
|
|
for(size_t j = 0; j < number_of_writes; ++j)
|
|
|
{
|
|
|
where_to_write[j] = j + 4;
|
|
@@ -227,13 +232,15 @@ int main(const int argc, const char * argv[])
|
|
|
|
|
|
std::cout << "ri = " << ri << std::endl;
|
|
|
if(party) ri = 2 - ri_recv;
|
|
|
-
|
|
|
- boost::asio::write(sockets_[0], boost::asio::buffer(&ri, sizeof(ri)));
|
|
|
- boost::asio::read(sockets_[0], boost::asio::buffer(&ri_recv, sizeof(ri_recv)));
|
|
|
-
|
|
|
- int64_t ri_reconstruction = ri + ri_recv;
|
|
|
- std::cout << "ri_reconstruction = " << ri_reconstruction << std::endl;
|
|
|
|
|
|
+ #ifdef VERBOSE
|
|
|
+ boost::asio::write(sockets_[0], boost::asio::buffer(&ri, sizeof(ri)));
|
|
|
+ boost::asio::read(sockets_[0], boost::asio::buffer(&ri_recv, sizeof(ri_recv)));
|
|
|
+
|
|
|
+ int64_t ri_reconstruction = ri + ri_recv;
|
|
|
+ std::cout << "ri_reconstruction = " << ri_reconstruction << std::endl;
|
|
|
+ #endif
|
|
|
+
|
|
|
#ifdef ThreeParty
|
|
|
DuORAM_Write * WritePb_ = new DuORAM_Write[number_of_writes];
|
|
|
DuORAM_Write * WritePb_recv = new DuORAM_Write[number_of_writes];
|
|
@@ -242,10 +249,8 @@ int main(const int argc, const char * argv[])
|
|
|
#endif
|
|
|
|
|
|
DB_t * CW = new DB_t[number_of_writes];
|
|
|
-
|
|
|
DB_t * update_message = new DB_t[number_of_writes];
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
auto start_writes = std::chrono::steady_clock::now();
|
|
|
|
|
|
#ifdef ThreeParty
|
|
@@ -254,7 +259,11 @@ int main(const int argc, const char * argv[])
|
|
|
DB_t FCW_read = 0;
|
|
|
|
|
|
read_final_correction_word(party, FCW_read);
|
|
|
- std::cout << "FCW_read (from) = " << FCW_read << std::endl;
|
|
|
+
|
|
|
+ #ifdef VERBOSE
|
|
|
+ std::cout << "FCW_read (from) = " << FCW_read << std::endl;
|
|
|
+ #endif
|
|
|
+
|
|
|
DB_t alpha0 = -FCW_read;
|
|
|
WritePb_[w].shift = where_to_write[w] -ri;
|
|
|
WritePb_[w].CW = distinguised_value[0];
|
|
@@ -267,7 +276,7 @@ int main(const int argc, const char * argv[])
|
|
|
|
|
|
rotate_by_[w] = WritePb_[w].shift + WritePb_recv[w].shift;
|
|
|
|
|
|
- #ifdef DEBUG
|
|
|
+ #ifdef VERBOSE
|
|
|
std::cout << "print database: " << std::endl;
|
|
|
reconstruct_database(sockets_[0], DB, db_nitems);
|
|
|
#endif
|
|
@@ -311,40 +320,38 @@ int main(const int argc, const char * argv[])
|
|
|
for(size_t w = 0; w < number_of_writes; ++w)
|
|
|
{
|
|
|
DuoramUpdate(party, db_nitems, rotate_by_[w], DB, updated_DB, writing_b, b, CW[w], update_message[w], writing_c, writing_d, c, d);
|
|
|
- // #ifdef DEBUG
|
|
|
- #ifdef ThreeParty
|
|
|
- debug_(sockets_2[0], sockets_[0], db_nitems);
|
|
|
+ #ifdef DEBUG
|
|
|
+ #ifdef ThreeParty
|
|
|
+ debug_(sockets_2[0], sockets_[0], db_nitems);
|
|
|
+ #endif
|
|
|
#endif
|
|
|
- // #endif
|
|
|
}
|
|
|
|
|
|
- auto end_writes = std::chrono::steady_clock::now();
|
|
|
- std::chrono::duration<double> elapsed_seconds_writes = end_writes - start_writes;
|
|
|
- printf("elapsed_seconds_writes = %f\n",elapsed_seconds_writes.count());
|
|
|
+ auto end_writes = std::chrono::steady_clock::now();
|
|
|
+ std::chrono::duration<double> elapsed_seconds_writes = end_writes - start_writes;
|
|
|
+ printf("elapsed_seconds_writes = %f\n",elapsed_seconds_writes.count());
|
|
|
|
|
|
- reconstruct_database(sockets_[0], DB, db_nitems);
|
|
|
-
|
|
|
+ #ifdef VERBOSE
|
|
|
+ reconstruct_database(sockets_[0], DB, db_nitems);
|
|
|
+ #endif
|
|
|
|
|
|
// WRITES END.
|
|
|
- #ifdef ThreeParty
|
|
|
+ #ifdef ThreeParty
|
|
|
|
|
|
- printf("\n\n================================= WRITES END =================================\n\n\n");
|
|
|
- auto start_ind_reads = std::chrono::steady_clock::now();
|
|
|
- size_t * WritePb_ind_reads = new size_t[number_of_ind_reads];
|
|
|
- size_t * WritePb_ind_reads_recv = new size_t[number_of_ind_reads];
|
|
|
- size_t * rotate = new size_t[number_of_ind_reads];
|
|
|
+ printf("\n\n================================= WRITES END =================================\n\n\n");
|
|
|
+ auto start_ind_reads = std::chrono::steady_clock::now();
|
|
|
+ size_t * WritePb_ind_reads = new size_t[number_of_ind_reads];
|
|
|
+ size_t * WritePb_ind_reads_recv = new size_t[number_of_ind_reads];
|
|
|
+ size_t * rotate = new size_t[number_of_ind_reads];
|
|
|
|
|
|
- // size_t * WritePb_ind_reads = new size_t[number_of_ind_reads];
|
|
|
- // size_t * WritePb_ind_reads_recv = new size_t[number_of_ind_reads];
|
|
|
- // size_t * rotate = new size_t[number_of_ind_reads];
|
|
|
|
|
|
for(size_t r = 0; r < number_of_ind_reads; ++r) WritePb_ind_reads[r] = where_to_read_independent[r] -ri;
|
|
|
|
|
|
boost::asio::write(sockets_2[3], boost::asio::buffer(WritePb_ind_reads, number_of_ind_reads * sizeof(size_t)));
|
|
|
boost::asio::write(sockets_[3], boost::asio::buffer(WritePb_ind_reads, number_of_ind_reads * sizeof(size_t)));
|
|
|
boost::asio::read(sockets_[3], boost::asio::buffer(WritePb_ind_reads_recv, number_of_ind_reads * sizeof(size_t)));
|
|
|
- // //std::array<DB_t, number_of_ind_reads> Gamma_reads;
|
|
|
- DB_t * Gamma_reads = new DB_t[number_of_ind_reads];
|
|
|
+
|
|
|
+ DB_t * Gamma_reads = new DB_t[number_of_ind_reads];
|
|
|
boost::asio::read(sockets_2[4], boost::asio::buffer(Gamma_reads, number_of_ind_reads * sizeof(DB_t)));
|
|
|
|
|
|
for(size_t j = 0; j < number_of_ind_reads; ++j)
|
|
@@ -352,19 +359,19 @@ int main(const int argc, const char * argv[])
|
|
|
rotate[j] = WritePb_ind_reads[j] + WritePb_ind_reads_recv[j];
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ DB_t * read_out_independent_reads = new DB_t[number_of_ind_reads];
|
|
|
for(size_t r = 0; r < number_of_ind_reads; ++r)
|
|
|
{
|
|
|
- #ifdef DEBUG
|
|
|
+ #ifdef VERBOSE
|
|
|
std::cout << "rotate[r]" << rotate[r] << std::endl;
|
|
|
std::cout << "Gamma_reads[r] = " << Gamma_reads[r] << std::endl;
|
|
|
#endif
|
|
|
|
|
|
- auto output = DuoramIndependentRead(party, db_nitems, ri, Gamma_reads, rotate, r);
|
|
|
+ read_out_independent_reads[r] = DuoramIndependentRead(party, db_nitems, ri, Gamma_reads, rotate, r);
|
|
|
|
|
|
- // #ifdef DEBUG
|
|
|
- std::cout << "---> [duoram independent reads] " << print_reconstruction(sockets_[0], output) << std::endl;
|
|
|
- // #endif
|
|
|
+ #ifdef VERBOSE
|
|
|
+ std::cout << "---> [duoram independent reads] " << print_reconstruction(sockets_[0], read_out_independent_reads[r]) << std::endl;
|
|
|
+ #endif
|
|
|
}
|
|
|
|
|
|
auto end_ind_reads = std::chrono::steady_clock::now();
|
|
@@ -380,11 +387,10 @@ int main(const int argc, const char * argv[])
|
|
|
{
|
|
|
read_out_dependent_reads[r] = DuoramRead(party, db_nitems, ri, where_to_read_dependent[r], sockets_2[5], sockets_2[6], sockets_[5]);
|
|
|
|
|
|
- std::cout << "dependent read (share) " << r << " -> " << read_out_dependent_reads[r] << std::endl;
|
|
|
-
|
|
|
- // #ifdef DEBUG
|
|
|
+ #ifdef VERBOSE
|
|
|
+ std::cout << "dependent read (share) " << r << " -> " << read_out_dependent_reads[r] << std::endl;
|
|
|
std::cout << print_reconstruction(sockets_[0], read_out_dependent_reads[r]) << std::endl;
|
|
|
- // #endif
|
|
|
+ #endif
|
|
|
}
|
|
|
|
|
|
auto end_dep_reads = std::chrono::steady_clock::now();
|
|
@@ -394,10 +400,8 @@ int main(const int argc, const char * argv[])
|
|
|
|
|
|
|
|
|
printf("\n\n\n\n\n-----------------------------------------------------------------------------------------------------------\n\n\n\n\n\n");
|
|
|
-
|
|
|
-
|
|
|
#endif
|
|
|
-
|
|
|
+}
|
|
|
auto end_total = std::chrono::steady_clock::now();
|
|
|
std::chrono::duration<double> elapsed_seconds_total = end_total - start_total;
|
|
|
printf("elapsed_seconds_total = %f\n",elapsed_seconds_total.count());
|