/* * ShamirMachine.cpp * */ #include #include "Math/ShamirShare.h" #include "Math/MaliciousShamirShare.h" #include "Math/gfp.h" #include "Math/gf2n.h" #include "Processor/ReplicatedMachine.hpp" #include "Processor/Data_Files.hpp" #include "Processor/Instruction.hpp" #include "Processor/Machine.hpp" ShamirMachine* ShamirMachine::singleton = 0; ShamirMachine& ShamirMachine::s() { if (singleton) return *singleton; else throw runtime_error("no singleton"); } ShamirMachine::ShamirMachine(int argc, const char** argv) { if (singleton) throw runtime_error("there can only be one"); else singleton = this; opt.add( "3", // Default. 0, // Required? 1, // Number of args expected. 0, // Delimiter if expecting multiple args. "Number of players", // Help description. "-N", // Flag token. "--nparties" // Flag token. ); opt.add( "", // Default. 0, // Required? 1, // Number of args expected. 0, // Delimiter if expecting multiple args. "Number of corrupted parties (default: just below half)", // Help description. "-T", // Flag token. "--threshold" // Flag token. ); opt.parse(argc, argv); opt.get("-N")->getInt(nparties); if (opt.isSet("-T")) opt.get("-T")->getInt(threshold); else threshold = (nparties - 1) / 2; cerr << "Using threshold " << threshold << " out of " << nparties << endl; if (2 * threshold >= nparties) throw runtime_error("threshold too high"); } template class T> ShamirMachineSpec::ShamirMachineSpec(int argc, const char** argv) : ShamirMachine(argc, argv) { ReplicatedMachine, T>(argc, argv, "shamir", opt, nparties); } template<> Preprocessing>* Preprocessing>::get_live_prep( SubProcessor>* proc) { return new ReplicatedPrep>(proc); } template<> Preprocessing>* Preprocessing>::get_live_prep( SubProcessor>* proc) { return new ReplicatedPrep>(proc); } template<> Preprocessing>* Preprocessing>::get_live_prep( SubProcessor>* proc) { (void) proc; return new MaliciousRepPrep>(proc); } template<> Preprocessing>* Preprocessing>::get_live_prep( SubProcessor>* proc) { (void) proc; return new MaliciousRepPrep>(proc); } template class ShamirMachineSpec; template class ShamirMachineSpec; template class Machine, ShamirShare>; template class Machine, MaliciousShamirShare>;