|
@@ -65,6 +65,7 @@ leaf_t val;
|
|
|
using namespace dpf;
|
|
|
|
|
|
#include "mpc.h"
|
|
|
+
|
|
|
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)
|
|
@@ -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);
|
|
|
X = (__m128i *)mmap(NULL, 8 * sizeof(__m128i),
|
|
|
PROT_READ, MAP_PRIVATE, qfd, 0);
|
|
|
-
|
|
|
+ close(qfd);
|
|
|
qfile = std::string("./x1");
|
|
|
qfd = open(qfile.c_str(), O_RDWR);
|
|
|
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),
|
|
|
PROT_READ, MAP_PRIVATE, qfd, 0);
|
|
|
|
|
|
+ close(qfd);
|
|
|
qfile = std::string("./x0");
|
|
|
qfd = open(qfile.c_str(), O_RDWR);
|
|
|
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)
|
|
|
{
|
|
|
-#ifdef VERBOSE
|
|
|
- printf("layer = %zu\n", layer);
|
|
|
-#endif
|
|
|
+ #ifdef VERBOSE
|
|
|
+ printf("layer = %zu\n", layer);
|
|
|
+ #endif
|
|
|
curlayer = 1 - curlayer;
|
|
|
|
|
|
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)
|
|
|
{
|
|
|
- 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)
|
|
@@ -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)
|
|
|
{
|
|
|
-
|
|
|
int64_t pm = 0;
|
|
|
int64_t rb;
|
|
|
-
|
|
|
arc4random_buf(&rb, sizeof(rb));
|
|
|
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();
|
|
|
|
|
|
|
|
|
-#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];
|
|
|
for (size_t i = 0; i < n_threads; i++) target_share_read[i] = new uint8_t[64];
|