void unshuffle(ZZn6 &S,ZZn3 &first,ZZn3 &second) { // unshuffle a ZZn6 into two ZZn3's ZZn x0,x1,x2,x3,x4,x5; ZZn2 t0,t1,t2; S.get(t0,t1,t2); t0.get(x0,x3); t1.get(x1,x4); t2.get(x2,x5); first.set(x0,x2,x4); second.set(x1,x3,x5); }
ZZn3 txd(const ZZn3& w) { ZZn3 u; ZZn wa,wb,wc; w.get(wa,wb,wc); u.set(wb,wc,(wa/get_mip()->cnr)); return u; }
void PFC::hash_and_map(G2& w,char *ID) { int i; ZZn3 XX; Big X=*x; Big x0=H1(ID); forever { x0+=1; XX.set((ZZn)0,(ZZn)x0,(ZZn)0); if (!w.g.set(XX)) continue; break; } w.g=HashG2(w.g,X,*frob); }
ECn3 hash_and_map3(char *ID) { int i; ECn3 S; ZZn3 X; Big x0=H1(ID); forever { x0+=1; X.set((ZZn)0,(ZZn)x0,(ZZn)0); if (!S.set(X)) continue; break; } return S; }
void PFC::random(G2 &w) { int i; ZZn3 XX; Big X=*x; Big x0=rand(*mod); forever { x0+=1; XX.set((ZZn)0,(ZZn)x0,(ZZn)0); if (!w.g.set(X)) continue; break; } w.g=HashG2(w.g,X,*frob); }