void du_attalah_P2(std::vector& sockets0, std::vector& sockets1, int socket_no = 0) { int64_t X0, X1, Y0, Y1, gamma0, gamma1; arc4random_buf(&X0, sizeof(int64_t)); arc4random_buf(&Y0, sizeof(int64_t)); arc4random_buf(&X1, sizeof(int64_t)); arc4random_buf(&Y1, sizeof(int64_t)); gamma0 = X0 * Y1; gamma1 = X1 * Y0; boost::asio::write(sockets0[socket_no], boost::asio::buffer(&X0, sizeof(X0))); boost::asio::write(sockets1[socket_no], boost::asio::buffer(&X1, sizeof(X1))); boost::asio::write(sockets0[socket_no], boost::asio::buffer(&Y0, sizeof(Y0))); boost::asio::write(sockets1[socket_no], boost::asio::buffer(&Y1, sizeof(Y1))); boost::asio::write(sockets0[socket_no], boost::asio::buffer(&gamma0, sizeof(gamma0))); boost::asio::write(sockets1[socket_no], boost::asio::buffer(&gamma1, sizeof(gamma1))); } int64_t du_attalah_Pb(int64_t rb, int64_t pm, tcp::socket& s2, tcp::socket& sb) { int64_t gamma; int64_t X, Y; int64_t rb_blinded, pm_blinded, pm_blinded_recv, rb_blinded_recv; boost::asio::read(s2, boost::asio::buffer(&X, sizeof(X))); boost::asio::read(s2, boost::asio::buffer(&Y, sizeof(Y))); boost::asio::read(s2, boost::asio::buffer(&gamma, sizeof(gamma))); rb_blinded = rb + X; pm_blinded = pm + Y; boost::asio::write(sb, boost::asio::buffer(&rb_blinded, sizeof(rb_blinded))); boost::asio::read(sb, boost::asio::buffer(&rb_blinded_recv, sizeof(rb_blinded_recv))); boost::asio::write(sb, boost::asio::buffer(&pm_blinded, sizeof(pm_blinded))); boost::asio::read(sb, boost::asio::buffer(&pm_blinded_recv, sizeof(pm_blinded_recv))); int64_t rb_prime = rb * (pm + (pm_blinded_recv)) - (Y * rb_blinded_recv) + gamma; return rb_prime; }