void MAC_Check<T>::Check(const Player& P) { if (WaitingForCheck() == 0) return; //cerr << "In MAC Check : " << popen_cnt << endl; octet seed[SEED_SIZE]; this->timers[SEED].start(); Create_Random_Seed(seed,P,SEED_SIZE); this->timers[SEED].stop(); PRNG G; G.SetSeed(seed); Share<T> sj; T a,gami,h,temp; a.assign_zero(); gami.assign_zero(); vector<T> tau(P.num_players()); for (int i=0; i<popen_cnt; i++) { h.almost_randomize(G); temp.mul(h,vals[i]); a.add(a,temp); temp.mul(h,macs[i]); gami.add(gami,temp); } vals.erase(vals.begin(), vals.begin() + popen_cnt); macs.erase(macs.begin(), macs.begin() + popen_cnt); temp.mul(this->alphai,a); tau[P.my_num()].sub(gami,temp); //cerr << "\tCommit and Open" << endl; this->timers[COMMIT].start(); Commit_And_Open(tau,P); this->timers[COMMIT].stop(); //cerr << "\tFinal Check" << endl; T t; t.assign_zero(); for (int i=0; i<P.num_players(); i++) { t.add(t,tau[i]); } if (!t.is_zero()) { throw mac_fail(); } popen_cnt=0; }