/* * Replicated.h * */ #ifndef PROCESSOR_REPLICATED_H_ #define PROCESSOR_REPLICATED_H_ #include #include using namespace std; #include "Tools/octetStream.h" #include "Tools/random.h" #include "Networking/Player.h" template class SubProcessor; template class ReplicatedMC; template class ReplicatedInput; template class ReplicatedPrivateOutput; template class Share; template class Rep3Share; class ReplicatedBase { public: PRNG shared_prngs[2]; Player& P; ReplicatedBase(Player& P); }; template class Replicated : public ReplicatedBase { vector os; deque add_shares; int counter; public: typedef ReplicatedMC MAC_Check; typedef ReplicatedInput Input; typedef ReplicatedPrivateOutput PrivateOutput; Replicated(Player& P); ~Replicated(); static void assign(T& share, const typename T::clear& value, int my_num) { assert(T::length == 2); share.assign_zero(); if (my_num < 2) share[my_num] = value; } void muls(const vector& reg, SubProcessor& proc, ReplicatedMC& MC, int size); void init_mul(); typename T::clear prepare_mul(const T& x, const T& y); void exchange(); T finalize_mul(); T get_random(); }; #endif /* PROCESSOR_REPLICATED_H_ */