// (C) 2018 University of Bristol. See License.txt #include "FHE/P2Data.h" #include "Math/Setup.h" #include void P2Data::forward(vector& ans,const vector& a) const { int n=gf2n_short::degree(); ans.resize(A.size()); for (unsigned i=0; i>=1; } } } void P2Data::backward(vector& ans,const vector& a) const { int n=gf2n_short::degree(); ans.resize(slots); word y; for (int i=0; i>(istream& s,P2Data& P2D) { s >> P2D.slots; s >> P2D.A; s >> P2D.Ai; P2D.check_dimensions(); return s; } string get_filename(const Ring& Rg) { return (string) PREP_DIR + "P2D-" + to_string(gf2n::degree()) + "x" + to_string(Rg.phi_m() / gf2n::degree()); } void P2Data::load(const Ring& Rg) { string filename = get_filename(Rg); cout << "Loading from " << filename << endl; ifstream s(filename); octetStream os; os.input(s); if (s.eof() or s.fail()) throw runtime_error("cannot load P2Data"); unpack(os); } void P2Data::store(const Ring& Rg) const { string filename = get_filename(Rg); cout << "Storing in " << filename << endl; ofstream s(filename); octetStream os; pack(os); os.output(s); }