setup.cpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. #include <type_traits> // std::is_same<>
  2. #include <limits> // std::numeric_limits<>
  3. #include <climits> // CHAR_BIT
  4. #include <cmath> // std::log2, std::ceil, std::floor
  5. #include <stdexcept> // std::runtime_error
  6. #include <array> // std::array<>
  7. #include <iostream> // std::istream and std::ostream
  8. #include <vector> // std::vector<>
  9. #include <memory> // std::shared_ptr<>
  10. #include <utility> // std::move
  11. #include <algorithm> // std::copy
  12. #include <cstring> // std::memcpy
  13. #include <bsd/stdlib.h> // arc4random_buf
  14. #include <x86intrin.h> // SSE and AVX intrinsics
  15. #include "prg.h"
  16. #include "prg_aes_impl.h"
  17. #include <iostream>
  18. #include <cstdlib>
  19. #include "block.h"
  20. #include <chrono>
  21. #include <sys/mman.h>
  22. #include <sys/stat.h>
  23. #include <fcntl.h>
  24. #include <fstream>
  25. #include <boost/asio.hpp>
  26. using boost::asio::ip::tcp;
  27. #include "duoram-utils.h"
  28. #include <mutex>
  29. int main(int argc, char * argv[])
  30. {
  31. const size_t expo = 5;
  32. const size_t db_nitems = 1ULL << expo;
  33. DB = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
  34. reading_b = (int8_t *) malloc(db_nitems * sizeof(int8_t));
  35. reading_c = (int8_t *) malloc(db_nitems * sizeof(int8_t));
  36. reading_d = (int8_t *) malloc(db_nitems * sizeof(int8_t));
  37. writing_b = (int8_t *) malloc(db_nitems * sizeof(int8_t));
  38. writing_c = (int8_t *) malloc(db_nitems * sizeof(int8_t));
  39. writing_d = (int8_t *) malloc(db_nitems * sizeof(int8_t));
  40. b = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
  41. c = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
  42. d = (DB_t *) std::aligned_alloc(sizeof(__m256i), db_nitems * sizeof(DB_t));
  43. DB_t DB0[db_nitems];
  44. DB_t DB1[db_nitems];
  45. for(size_t j = 0; j < db_nitems; ++j)
  46. {
  47. DB[j] = j;
  48. arc4random_buf(&DB0[j], sizeof(DB_t));
  49. DB1[j] = DB[j] - DB0[j];
  50. }
  51. char const * filename0;
  52. filename0 = "DB0";
  53. char const * filename1;
  54. filename1 = "DB1";
  55. int w0 = open( filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  56. size_t written = write(w0, DB0, db_nitems * sizeof(DB0[0]));
  57. if(written<0) {
  58. perror("Write error");
  59. }
  60. close(w0);
  61. int w1 = open( filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  62. written = write(w1, DB1, db_nitems * sizeof(DB1[0]));
  63. if(written<0) {
  64. perror("Write error");
  65. }
  66. close(w1);
  67. generate_flags_and_standard_basis_vectors2(false, db_nitems);
  68. char const * p0_filename0;
  69. p0_filename0 = "party0_read_flags_b";
  70. w0 = open( p0_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  71. written = write(w0, reading_b, db_nitems * sizeof(reading_b[0]));
  72. if(written<0) {
  73. perror("Write error");
  74. }
  75. close(w0);
  76. p0_filename0 = "party0_write_flags_b";
  77. w0 = open( p0_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  78. written = write(w0, writing_b, db_nitems * sizeof(writing_b[0]));
  79. if(written<0) {
  80. perror("Write error");
  81. }
  82. close(w0);
  83. p0_filename0 = "party0_write_b";
  84. w0 = open( p0_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  85. written = write(w0, b, db_nitems * sizeof(b[0]));
  86. if(written<0) {
  87. perror("Write error");
  88. }
  89. close(w0);
  90. char const * p0_filename1;
  91. p0_filename1 = "party0_read_flags_c";
  92. w0 = open( p0_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  93. written = write(w0, reading_c, db_nitems * sizeof(reading_c[0]));
  94. if(written<0) {
  95. perror("Write error");
  96. }
  97. close(w0);
  98. p0_filename1 = "party0_write_flags_c";
  99. w0 = open( p0_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  100. written = write(w0, writing_c, db_nitems * sizeof(writing_c[0]));
  101. if(written<0) {
  102. perror("Write error");
  103. }
  104. close(w0);
  105. p0_filename1 = "party0_write_c";
  106. w0 = open( p0_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  107. written = write(w0, c, db_nitems * sizeof(c[0]));
  108. if(written<0) {
  109. perror("Write error");
  110. }
  111. close(w0);
  112. char const * p0_filename2;
  113. p0_filename2 = "party0_read_flags_d";
  114. w0 = open( p0_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  115. written = write(w0, reading_d, db_nitems * sizeof(reading_d[0]));
  116. if(written<0) {
  117. perror("Write error");
  118. }
  119. close(w0);
  120. p0_filename2 = "party0_write_flags_d";
  121. w0 = open( p0_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  122. written = write(w0, writing_d, db_nitems * sizeof(writing_d[0]));
  123. if(written<0) {
  124. perror("Write error");
  125. }
  126. close(w0);
  127. p0_filename2 = "party0_write_d";
  128. w0 = open( p0_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  129. written = write(w0, d, db_nitems * sizeof(d[0]));
  130. if(written<0) {
  131. perror("Write error");
  132. }
  133. close(w0);
  134. generate_flags_and_standard_basis_vectors2(true, db_nitems);
  135. char const * p1_filename0;
  136. p1_filename0 = "party1_read_flags_b";
  137. w0 = open( p1_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  138. written = write(w0, reading_b, db_nitems * sizeof(reading_b[0]));
  139. if(written<0) {
  140. perror("Write error");
  141. }
  142. close(w0);
  143. p1_filename0 = "party1_write_flags_b";
  144. w0 = open( p1_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  145. written = write(w0, writing_b, db_nitems * sizeof(writing_b[0]));
  146. if(written<0) {
  147. perror("Write error");
  148. }
  149. close(w0);
  150. p1_filename0 = "party1_write_b";
  151. w0 = open( p1_filename0, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  152. written = write(w0, b, db_nitems * sizeof(b[0]));
  153. if(written<0) {
  154. perror("Write error");
  155. }
  156. close(w0);
  157. char const * p1_filename1;
  158. p1_filename1 = "party1_read_flags_c";
  159. w0 = open( p1_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  160. written = write(w0, reading_c, db_nitems * sizeof(reading_c[0]));
  161. if(written<0) {
  162. perror("Write error");
  163. }
  164. close(w0);
  165. p1_filename1 = "party1_write_flags_c";
  166. w0 = open( p1_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  167. written = write(w0, writing_c, db_nitems * sizeof(writing_c[0]));
  168. if(written<0) {
  169. perror("Write error");
  170. }
  171. close(w0);
  172. p1_filename1 = "party1_write_c";
  173. w0 = open( p1_filename1, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  174. written = write(w0, c, db_nitems * sizeof(c[0]));
  175. if(written<0) {
  176. perror("Write error");
  177. }
  178. close(w0);
  179. char const * p1_filename2;
  180. p1_filename2 = "party1_read_flags_d";
  181. w0 = open( p1_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  182. written = write(w0, reading_d, db_nitems * sizeof(reading_d[0]));
  183. if(written<0) {
  184. perror("Write error");
  185. }
  186. close(w0);
  187. p1_filename2 = "party1_write_flags_d";
  188. w0 = open( p1_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  189. written = write(w0, writing_d, db_nitems * sizeof(writing_d[0]));
  190. if(written<0) {
  191. perror("Write error");
  192. }
  193. close(w0);
  194. p1_filename2 = "party1_write_d";
  195. w0 = open( p1_filename2, O_WRONLY | O_CREAT, S_IWRITE | S_IREAD);
  196. written = write(w0, d, db_nitems * sizeof(d[0]));
  197. if(written<0) {
  198. perror("Write error");
  199. }
  200. close(w0);
  201. return 0;
  202. }