#include // std::is_same<> #include // std::numeric_limits<> #include // CHAR_BIT #include // std::log2, std::ceil, std::floor #include // std::runtime_error #include // std::array<> #include // std::istream and std::ostream #include // std::vector<> #include // std::shared_ptr<> #include // std::move #include // std::copy #include // std::memcpy #include // arc4random_buf #include // SSE and AVX intrinsics #include "prg.h" #include "prg_aes_impl.h" #include #include #include "block.h" #include #include #include #include #include #include using boost::asio::ip::tcp; #include "duoram-utils.h" #include int main(int argc, char * argv[]) { const size_t expo = 5; const size_t db_nitems = 1ULL << expo; DB = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t)); reading_b = (int8_t *) malloc(db_nitems * sizeof(int8_t)); reading_c = (int8_t *) malloc(db_nitems * sizeof(int8_t)); reading_d = (int8_t *) malloc(db_nitems * sizeof(int8_t)); writing_b = (int8_t *) malloc(db_nitems * sizeof(int8_t)); writing_c = (int8_t *) malloc(db_nitems * sizeof(int8_t)); writing_d = (int8_t *) malloc(db_nitems * sizeof(int8_t)); b = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t)); c = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t)); d = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t)); DB_t DB0[db_nitems]; DB_t DB1[db_nitems]; for(size_t j = 0; j < db_nitems; ++j) { DB[j] = j; arc4random_buf(&DB0[j], sizeof(DB_t)); DB1[j] = DB[j] - DB0[j]; } char const * filename0; filename0 = "DB0"; char const * filename1; filename1 = "DB1"; int w0 = open( filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); size_t written = write(w0, DB0, db_nitems * sizeof(DB0[0])); if(written<0) { perror("Write error"); } close(w0); int w1 = open( filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w1, DB1, db_nitems * sizeof(DB1[0])); if(written<0) { perror("Write error"); } close(w1); generate_flags_and_standard_basis_vectors2(false, db_nitems); char const * p0_filename0; p0_filename0 = "party0_read_flags_b"; w0 = open( p0_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, reading_b, db_nitems * sizeof(reading_b[0])); if(written<0) { perror("Write error"); } close(w0); p0_filename0 = "party0_write_flags_b"; w0 = open( p0_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, writing_b, db_nitems * sizeof(writing_b[0])); if(written<0) { perror("Write error"); } close(w0); p0_filename0 = "party0_write_b"; w0 = open( p0_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, b, db_nitems * sizeof(b[0])); if(written<0) { perror("Write error"); } close(w0); char const * p0_filename1; p0_filename1 = "party0_read_flags_c"; w0 = open( p0_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, reading_c, db_nitems * sizeof(reading_c[0])); if(written<0) { perror("Write error"); } close(w0); p0_filename1 = "party0_write_flags_c"; w0 = open( p0_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, writing_c, db_nitems * sizeof(writing_c[0])); if(written<0) { perror("Write error"); } close(w0); p0_filename1 = "party0_write_c"; w0 = open( p0_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, c, db_nitems * sizeof(c[0])); if(written<0) { perror("Write error"); } close(w0); char const * p0_filename2; p0_filename2 = "party0_read_flags_d"; w0 = open( p0_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, reading_d, db_nitems * sizeof(reading_d[0])); if(written<0) { perror("Write error"); } close(w0); p0_filename2 = "party0_write_flags_d"; w0 = open( p0_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, writing_d, db_nitems * sizeof(writing_d[0])); if(written<0) { perror("Write error"); } close(w0); p0_filename2 = "party0_write_d"; w0 = open( p0_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, d, db_nitems * sizeof(d[0])); if(written<0) { perror("Write error"); } close(w0); generate_flags_and_standard_basis_vectors2(true, db_nitems); char const * p1_filename0; p1_filename0 = "party1_read_flags_b"; w0 = open( p1_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, reading_b, db_nitems * sizeof(reading_b[0])); if(written<0) { perror("Write error"); } close(w0); p1_filename0 = "party1_write_flags_b"; w0 = open( p1_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, writing_b, db_nitems * sizeof(writing_b[0])); if(written<0) { perror("Write error"); } close(w0); p1_filename0 = "party1_write_b"; w0 = open( p1_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, b, db_nitems * sizeof(b[0])); if(written<0) { perror("Write error"); } close(w0); char const * p1_filename1; p1_filename1 = "party1_read_flags_c"; w0 = open( p1_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, reading_c, db_nitems * sizeof(reading_c[0])); if(written<0) { perror("Write error"); } close(w0); p1_filename1 = "party1_write_flags_c"; w0 = open( p1_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, writing_c, db_nitems * sizeof(writing_c[0])); if(written<0) { perror("Write error"); } close(w0); p1_filename1 = "party1_write_c"; w0 = open( p1_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, c, db_nitems * sizeof(c[0])); if(written<0) { perror("Write error"); } close(w0); char const * p1_filename2; p1_filename2 = "party1_read_flags_d"; w0 = open( p1_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, reading_d, db_nitems * sizeof(reading_d[0])); if(written<0) { perror("Write error"); } close(w0); p1_filename2 = "party1_write_flags_d"; w0 = open( p1_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, writing_d, db_nitems * sizeof(writing_d[0])); if(written<0) { perror("Write error"); } close(w0); p1_filename2 = "party1_write_d"; w0 = open( p1_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD); written = write(w0, d, db_nitems * sizeof(d[0])); if(written<0) { perror("Write error"); } close(w0); return 0; }