/* * ReplicatedPrep.h * */ #ifndef PROCESSOR_REPLICATEDPREP_H_ #define PROCESSOR_REPLICATEDPREP_H_ #include "Networking/Player.h" #include "Data_Files.h" #include template class BufferPrep : public Preprocessing { protected: vector> triples; vector> squares; vector> inverses; vector bits; virtual void buffer_triples() = 0; virtual void buffer_squares() = 0; virtual void buffer_inverses() = 0; virtual void buffer_bits() = 0; virtual void buffer_inverses(MAC_Check_Base& MC, Player& P); public: static const int buffer_size = 1000; virtual ~BufferPrep() {} void get_three(Dtype dtype, T& a, T& b, T& c); void get_two(Dtype dtype, T& a, T& b); void get_one(Dtype dtype, T& a); void get_input(T& a, typename T::clear& x, int i); void get(vector& S, DataTag tag, const vector& regs, int vector_size); }; template class ReplicatedRingPrep : public BufferPrep { protected: template friend class MaliciousRepPrep; typename T::Protocol* protocol; SubProcessor* proc; void buffer_triples(); void buffer_squares(); void buffer_inverses() { throw runtime_error("not inverses in rings"); } public: ReplicatedRingPrep(SubProcessor* proc); virtual ~ReplicatedRingPrep() {} void set_protocol(typename T::Protocol& protocol) { this->protocol = &protocol; } virtual void buffer_bits(); }; template class ReplicatedPrep: public ReplicatedRingPrep { void buffer_inverses(); public: ReplicatedPrep(SubProcessor* proc = 0) : ReplicatedRingPrep(proc) {} void buffer_bits(); }; #endif /* PROCESSOR_REPLICATEDPREP_H_ */