static void addMinimal1Dmats4dim(FHESecKey& sKey, long i, long keyID) { const PAlgebra& zMStar = sKey.getContext().zMStar; long ord; bool native; if (i != -1) { ord = zMStar.OrderOf(i); native = zMStar.SameOrd(i);\ } else { // Frobenius ord = zMStar.getOrdP(); native = true; } sKey.GenKeySWmatrix(1, zMStar.genToPow(i, 1), keyID, keyID); if (!native) sKey.GenKeySWmatrix(1, zMStar.genToPow(i, -ord), keyID, keyID); if (ord > FHE_KEYSWITCH_MIN_THRESH) { long g = KSGiantStepSize(ord); sKey.GenKeySWmatrix(1, zMStar.genToPow(i, g), keyID, keyID); } sKey.setKSStrategy(i, FHE_KSS_MIN); }
// same as above, but uses BS/GS strategy static void addSome1Dmats4dim(FHESecKey& sKey, long i, long bound, long keyID) { const PAlgebra& zMStar = sKey.getContext().zMStar; long ord; bool native; if (i != -1) { ord = zMStar.OrderOf(i); native = zMStar.SameOrd(i);\ } else { // Frobenius ord = zMStar.getOrdP(); native = true; } long g = KSGiantStepSize(ord); // baby steps for (long j = 1; j < g; j++) sKey.GenKeySWmatrix(1, zMStar.genToPow(i, j), keyID, keyID); // giant steps for (long j = g; j < ord; j += g) sKey.GenKeySWmatrix(1, zMStar.genToPow(i, j), keyID, keyID); if (!native) sKey.GenKeySWmatrix(1, zMStar.genToPow(i, -ord), keyID, keyID); sKey.setKSStrategy(i, FHE_KSS_BSGS); // NOTE: the old code also added matrices for ord-2^k for small k, // in the case of (native && i<context.zMStar.numOfGens()). // This supposedly speeds up the replication code, but for now // we are leaving this out, for simplicity. Also, it is a waste // of space for applications that don't use replication. }
// adds all matrices for dim i. // i == -1 => Frobenius (NOTE: in matmul1D, i ==#gens means something else, // so it is best to avoid that). static void add1Dmats4dim(FHESecKey& sKey, long i, long keyID) { const PAlgebra& zMStar = sKey.getContext().zMStar; long ord; bool native; if (i != -1) { ord = zMStar.OrderOf(i); native = zMStar.SameOrd(i);\ } else { // Frobenius ord = zMStar.getOrdP(); native = true; } for (long j = 1; j < ord; j++) sKey.GenKeySWmatrix(1, zMStar.genToPow(i, j), keyID, keyID); if (!native) sKey.GenKeySWmatrix(1, zMStar.genToPow(i, -ord), keyID, keyID); sKey.setKSStrategy(i, FHE_KSS_FULL); }