| 
														
															@@ -65,6 +65,7 @@ leaf_t val; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using namespace dpf;
 
														 | 
														
														 | 
														
															 using namespace dpf;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #include "mpc.h"
 
														 | 
														
														 | 
														
															 #include "mpc.h"
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 void generate_random_targets(uint8_t **target_share_read, size_t n_threads, bool party, size_t expo)
 
														 | 
														
														 | 
														
															 void generate_random_targets(uint8_t **target_share_read, size_t n_threads, bool party, size_t expo)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 {
 
														 | 
														
														 | 
														
															 {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     for (size_t j = 0; j < 64; ++j)
 
														 | 
														
														 | 
														
															     for (size_t j = 0; j < 64; ++j)
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -95,7 +96,7 @@ void compute_CW(bool party, tcp::socket &sout, __m128i L, __m128i R, uint8_t bit 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       int qfd = open(qfile.c_str(), O_RDWR);
 
														 | 
														
														 | 
														
															       int qfd = open(qfile.c_str(), O_RDWR);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       X = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
														
														 | 
														
															       X = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                           PROT_READ, MAP_PRIVATE, qfd, 0);
 
														 | 
														
														 | 
														
															                           PROT_READ, MAP_PRIVATE, qfd, 0);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      close(qfd);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       qfile = std::string("./x1");
 
														 | 
														
														 | 
														
															       qfile = std::string("./x1");
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       qfd = open(qfile.c_str(), O_RDWR);
 
														 | 
														
														 | 
														
															       qfd = open(qfile.c_str(), O_RDWR);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       Y = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
														
														 | 
														
															       Y = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -111,6 +112,7 @@ void compute_CW(bool party, tcp::socket &sout, __m128i L, __m128i R, uint8_t bit 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       X = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
														
														 | 
														
															       X = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                           PROT_READ, MAP_PRIVATE, qfd, 0);
 
														 | 
														
														 | 
														
															                           PROT_READ, MAP_PRIVATE, qfd, 0);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      close(qfd);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       qfile = std::string("./x0");
 
														 | 
														
														 | 
														
															       qfile = std::string("./x0");
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       qfd = open(qfile.c_str(), O_RDWR);
 
														 | 
														
														 | 
														
															       qfd = open(qfile.c_str(), O_RDWR);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       Y = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
														
														 | 
														
															       Y = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -272,9 +274,9 @@ inline void evalfull_mpc(const size_t &nodes_per_leaf, const size_t &depth, cons 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     for (size_t layer = 0; layer < depth; ++layer)
 
														 | 
														
														 | 
														
															     for (size_t layer = 0; layer < depth; ++layer)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     {
 
														 | 
														
														 | 
														
															     {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#ifdef VERBOSE
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        printf("layer = %zu\n", layer);
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#endif
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				#ifdef VERBOSE
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				 printf("layer = %zu\n", layer);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				#endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         curlayer = 1 - curlayer;
 
														 | 
														
														 | 
														
															         curlayer = 1 - curlayer;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         size_t i = 0, j = 0;
 
														 | 
														
														 | 
														
															         size_t i = 0, j = 0;
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -287,9 +289,9 @@ inline void evalfull_mpc(const size_t &nodes_per_leaf, const size_t &depth, cons 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         for (i = nextbit, j = nextbit; j < nodes_in_prev_layer - 1; ++j, i += 2)
 
														 | 
														
														 | 
														
															         for (i = nextbit, j = nextbit; j < nodes_in_prev_layer - 1; ++j, i += 2)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         {
 
														 | 
														
														 | 
														
															         {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            traverse(prgkey, s[1 - curlayer][j], &s[curlayer][i]);
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            L ^= s[curlayer][i];
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            R ^= s[curlayer][i + 1];
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+          traverse(prgkey, s[1 - curlayer][j], &s[curlayer][i]);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+          L ^= s[curlayer][i];
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+          R ^= s[curlayer][i + 1];
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         }
 
														 | 
														
														 | 
														
															         }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (nodes_in_prev_layer > j)
 
														 | 
														
														 | 
														
															         if (nodes_in_prev_layer > j)
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -367,36 +369,34 @@ void convert_shares(__m128i **output, int8_t **flags, size_t n_threads, size_t d 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             }
 
														 | 
														
														 | 
														
															             }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         }
 
														 | 
														
														 | 
														
															         }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#ifdef DEBUG
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        int8_t out = flags[0][j];
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        int8_t out_rec;
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				#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;
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				        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;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        if (out_rec != 0)
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            std::cout << j << "(flags) --> " << (int)out_rec << std::endl
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                      << std::endl;
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				        if (out_rec != 0)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				            std::cout << j << "(flags) --> " << (int)out_rec << std::endl
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				                      << std::endl;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        __m128i out2 = output[0][j];
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        __m128i out_rec2;
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				        __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;
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        if (out_rec2[0] != 0)
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            std::cout << j << "--> " << out_rec2[0] << std::endl;
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#endif
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				        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;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				        if (out_rec2[0] != 0)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				            std::cout << j << "--> " << out_rec2[0] << std::endl;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				#endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     }
 
														 | 
														
														 | 
														
															     }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     for (size_t i = 0; i < n_threads; ++i)
 
														 | 
														
														 | 
														
															     for (size_t i = 0; i < n_threads; ++i)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     {
 
														 | 
														
														 | 
														
															     {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         int64_t pm = 0;
 
														 | 
														
														 | 
														
															         int64_t pm = 0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         int64_t rb;
 
														 | 
														
														 | 
														
															         int64_t rb;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         arc4random_buf(&rb, sizeof(rb));
 
														 | 
														
														 | 
														
															         arc4random_buf(&rb, sizeof(rb));
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         for (size_t j = 0; j < db_nitems; ++j)
 
														 | 
														
														 | 
														
															         for (size_t j = 0; j < db_nitems; ++j)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         {
 
														 | 
														
														 | 
														
															         {
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -526,12 +526,9 @@ int main(int argc, char *argv[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     auto start = std::chrono::steady_clock::now();
 
														 | 
														
														 | 
														
															     auto start = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#ifdef VERBOSE
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    printf("n_threads = %zu\n\n", n_threads);
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#endif
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-
 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		#ifdef VERBOSE
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		    printf("n_threads = %zu\n\n", n_threads);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		#endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		uint8_t **target_share_read = new uint8_t *[thread_per_batch];
 
														 | 
														
														 | 
														
															 		uint8_t **target_share_read = new uint8_t *[thread_per_batch];
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     for (size_t i = 0; i < n_threads; i++) target_share_read[i] = new uint8_t[64];
 
														 | 
														
														 | 
														
															     for (size_t i = 0; i < n_threads; i++) target_share_read[i] = new uint8_t[64];
 
														 |