#include // arc4random_buf #include "rdpf.hpp" #include "bitutils.hpp" #include "mpcops.hpp" #include "aes.hpp" #include "prg.hpp" #ifdef DPF_DEBUG static void dump_node(DPFnode node, const char *label = NULL) { if (label) printf("%s: ", label); for(int i=0;i<16;++i) { printf("%02x", ((unsigned char *)&node)[15-i]); } printf("\n"); } static void dump_level(DPFnode *nodes, size_t num, const char *label = NULL) { if (label) printf("%s:\n", label); for (size_t i=0;i coroutines; coroutines.emplace_back( [&](yield_t &yield) { tio.queue_peer(&our_parity_bit, 1); yield(); tio.recv_peer(&peer_parity_bit, 1); }); coroutines.emplace_back( [&](yield_t &yield) { mpc_reconstruct_choice(tio, yield, CW, bs_choice, _mm_xor_si128(R,our_parity), L); }); run_coroutines(yield, coroutines); bool parity_bit = our_parity_bit ^ peer_parity_bit; cfbits |= (size_t(parity_bit)<