#include "FHE/P2Data.h" #include "Math/Setup.h" #include void P2Data::forward(vector& ans,const vector& a) const { int n=gf2n_short::degree(); BitVector bv(A.size()); ans.resize(A.size()); for (int i=0; i>=1; } } for (size_t i = 0; i < bv.size(); i++) ans[i] = bv.get_bit(i); } void P2Data::backward(vector& ans,const vector& a) const { int n=gf2n_short::degree(); BitVector bv(a.size()); for (size_t i = 0; i < a.size(); i++) bv.set_bit(i, a[i]); 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_short::degree()) + "x" + to_string(Rg.phi_m() / gf2n_short::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); 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); }