#include // arc4random_buf #include "online.hpp" #include "mpcops.hpp" #include "rdpf.hpp" static void online_test(MPCIO &mpcio, int num_threads, char **args) { nbits_t nbits = VALUE_BITS; if (*args) { nbits = atoi(*args); } size_t memsize = 9; MPCTIO tio(mpcio, 0); bool is_server = (mpcio.player == 2); RegAS *A = new RegAS[memsize]; value_t V; RegBS F0, F1; RegXS X; if (!is_server) { A[0].randomize(); A[1].randomize(); F0.randomize(); A[4].randomize(); F1.randomize(); A[6].randomize(); A[7].randomize(); X.randomize(); arc4random_buf(&V, sizeof(V)); printf("A:\n"); for (size_t i=0; i coroutines; coroutines.emplace_back( [&](yield_t &yield) { mpc_mul(tio, yield, A[2], A[0], A[1], nbits); }); coroutines.emplace_back( [&](yield_t &yield) { mpc_valuemul(tio, yield, A[3], V, nbits); }); coroutines.emplace_back( [&](yield_t &yield) { mpc_flagmult(tio, yield, A[5], F0, A[4], nbits); }); coroutines.emplace_back( [&](yield_t &yield) { mpc_oswap(tio, yield, A[6], A[7], F1, nbits); }); coroutines.emplace_back( [&](yield_t &yield) { mpc_xs_to_as(tio, yield, A[8], X, nbits); }); run_coroutines(tio, coroutines); if (!is_server) { printf("\n"); printf("A:\n"); for (size_t i=0; i