24 #ifndef SRC_PKE_LIB_CRYPTOCONTEXTGEN_H_ 25 #define SRC_PKE_LIB_CRYPTOCONTEXTGEN_H_ 30 #include "cryptocontext.h" 31 #include "lattice/elemparamfactory.h" 33 #include "utils/parmfactory.h" 37 static const usint DefaultQbits = 59;
38 static const usint DefaultT = 3;
40 template <
typename Element>
41 inline CryptoContext<Element> GenCryptoContextNull(usint ORDER,
43 usint bits = DefaultQbits,
44 usint towers = DefaultT) {
45 auto p = ElemParamFactory::GenElemParams<typename Element::Params>(
48 CryptoContext<Element> cc =
50 cc->Enable(ENCRYPTION);
57 template <
typename Element>
58 inline CryptoContext<Element> GenCryptoContextBFV(usint ORDER,
60 usint bits = DefaultQbits,
61 usint towers = DefaultT,
65 inline CryptoContext<Poly> GenCryptoContextBFV(usint ORDER,
66 PlaintextModulus ptm, usint bits,
67 usint towers, MODE mode) {
68 shared_ptr<typename Poly::Params> p =
69 ElemParamFactory::GenElemParams<typename Poly::Params>(ORDER, bits,
73 ptm, 1.06, 8, 4, 0, 1, 0, mode);
74 cc->Enable(ENCRYPTION);
81 inline CryptoContext<NativePoly> GenCryptoContextBFV(usint ORDER,
83 usint bits, usint towers,
85 CryptoContext<NativePoly> cc =
88 cc->Enable(ENCRYPTION);
95 inline CryptoContext<DCRTPoly> GenCryptoContextBFV(usint ORDER,
97 usint bits, usint towers,
102 template <
typename Element>
103 inline CryptoContext<Element> GenCryptoContextBFVrns(PlaintextModulus ptm,
105 uint32_t batchSize = 0);
108 inline CryptoContext<Poly> GenCryptoContextBFVrns(PlaintextModulus ptm,
110 uint32_t batchSize) {
115 inline CryptoContext<NativePoly> GenCryptoContextBFVrns(PlaintextModulus ptm,
117 uint32_t batchSize) {
119 "NativePoly is not supported for BFVrns");
123 inline CryptoContext<DCRTPoly> GenCryptoContextBFVrns(PlaintextModulus ptm,
125 uint32_t batchSize) {
126 EncodingParams encodingParams(std::make_shared<EncodingParamsImpl>(ptm));
127 encodingParams->SetBatchSize(batchSize);
128 CryptoContext<DCRTPoly> cc =
130 encodingParams, HEStd_128_classic, 3.2, 0, 2, 0, mode, 2, 20, 60);
131 cc->Enable(ENCRYPTION);
134 cc->Enable(MULTIPARTY);
138 template <
typename Element>
139 inline CryptoContext<Element> GenCryptoContextBFVrnsB(PlaintextModulus ptm,
141 uint32_t batchSize = 0);
144 inline CryptoContext<Poly> GenCryptoContextBFVrnsB(PlaintextModulus ptm,
146 uint32_t batchSize) {
151 inline CryptoContext<NativePoly> GenCryptoContextBFVrnsB(PlaintextModulus ptm,
153 uint32_t batchSize) {
155 "NativePoly is not supported for BFVrnsB");
159 inline CryptoContext<DCRTPoly> GenCryptoContextBFVrnsB(PlaintextModulus ptm,
161 uint32_t batchSize) {
162 EncodingParams encodingParams(std::make_shared<EncodingParamsImpl>(ptm));
163 encodingParams->SetBatchSize(batchSize);
164 CryptoContext<DCRTPoly> cc =
166 encodingParams, HEStd_128_classic, 3.2, 0, 2, 0, mode, 2, 20, 60);
167 cc->Enable(ENCRYPTION);
170 cc->Enable(MULTIPARTY);
174 template <
typename Element>
175 inline CryptoContext<Element> GenCryptoContextCKKS(
176 usint cyclOrder, usint numPrimes, usint scaleExp, usint relinWindow,
177 usint batchSize, MODE mode, KeySwitchTechnique ksTech,
178 RescalingTechnique rsTech);
181 inline CryptoContext<Poly> GenCryptoContextCKKS(usint cyclOrder,
182 usint numPrimes, usint scaleExp,
184 usint batchSize, MODE mode,
185 KeySwitchTechnique ksTech,
186 RescalingTechnique rsTech) {
209 inline CryptoContext<NativePoly> GenCryptoContextCKKS(
210 usint cyclOrder, usint numPrimes, usint scaleExp, usint relinWindow,
211 usint batchSize, MODE mode, KeySwitchTechnique ksTech,
212 RescalingTechnique rsTech) {
214 usint init_size = numPrimes;
215 usint dcrtBits = scaleExp;
216 uint64_t p = scaleExp;
217 usint relinWin = relinWindow;
219 usint batch = batchSize;
222 NativeInteger rootOfUnity = RootOfUnity<NativeInteger>(m, q);
224 auto params = std::make_shared<ILNativeParams>(m, q, rootOfUnity);
226 EncodingParams encodingParams(
227 std::make_shared<EncodingParamsImpl>((int64_t)1 << p));
228 encodingParams->SetBatchSize(batch);
230 CryptoContext<NativePoly> cc =
232 params, encodingParams, relinWin, stdDev, mode, init_size);
234 cc->Enable(ENCRYPTION);
259 inline CryptoContext<DCRTPoly> GenCryptoContextCKKS(
260 usint cyclOrder, usint numPrimes, usint scaleExp, usint relinWindow,
261 usint batchSize, MODE mode, KeySwitchTechnique ksTech,
262 RescalingTechnique rsTech) {
263 usint n = cyclOrder / 2;
264 usint dcrtBits = scaleExp;
265 usint relinWin = relinWindow;
266 usint batch = batchSize;
268 CryptoContext<DCRTPoly> cc =
270 numPrimes - 1, dcrtBits, batch, HEStd_NotSet, n,
276 cc->Enable(ENCRYPTION);
278 cc->Enable(LEVELEDSHE);
279 cc->Enable(MULTIPARTY);
301 template <
typename Element>
302 inline CryptoContext<Element> GenCryptoContextBGVrns(
303 usint cyclOrder, usint numPrimes, usint dcrtBits, usint ptm,
304 usint relinWindow, MODE mode, KeySwitchTechnique ksTech, usint batchSize,
305 ModSwitchMethod msMethod);
308 inline CryptoContext<Poly> GenCryptoContextBGVrns(
309 usint cyclOrder, usint numPrimes, usint dcrtBits, usint ptm,
310 usint relinWindow, MODE mode, KeySwitchTechnique ksTech, usint batchSize,
311 ModSwitchMethod msMethod) {
316 inline CryptoContext<NativePoly> GenCryptoContextBGVrns(
317 usint cyclOrder, usint numPrimes, usint dcrtBits, usint ptm,
318 usint relinWindow, MODE mode, KeySwitchTechnique ksTech, usint batchSize,
319 ModSwitchMethod msMethod) {
324 inline CryptoContext<DCRTPoly> GenCryptoContextBGVrns(
325 usint cyclOrder, usint numPrimes, usint dcrtBits, usint ptm,
326 usint relinWindow, MODE mode, KeySwitchTechnique ksTech, usint batchSize,
327 ModSwitchMethod msMethod) {
328 usint n = cyclOrder / 2;
329 usint relinWin = relinWindow;
332 CryptoContext<DCRTPoly> cc =
334 numPrimes - 1, ptm, HEStd_NotSet, stdDev, 1,
338 dcrtBits, relinWin, batchSize, msMethod);
340 cc->Enable(ENCRYPTION);
342 cc->Enable(LEVELEDSHE);
343 cc->Enable(MULTIPARTY);
348 template <
typename Element>
349 inline CryptoContext<Element> GenTestCryptoContext(
350 const string& name, usint ORDER, PlaintextModulus ptm,
351 usint bits = DefaultQbits, usint towers = DefaultT, usint relinWin = 0,
352 usint batchSize = 16, KeySwitchTechnique ksTech = BV,
353 RescalingTechnique rsTech = APPROXRESCALE,
354 ModSwitchMethod msMethod = MANUAL) {
355 shared_ptr<typename Element::Params> p =
356 ElemParamFactory::GenElemParams<typename Element::Params>(ORDER, bits,
359 CryptoContext<Element> cc;
361 if (name ==
"Null") {
363 }
else if (name ==
"BFV_rlwe") {
364 cc = GenCryptoContextBFV<Element>(ORDER, ptm, bits, towers, RLWE);
365 }
else if (name ==
"BFV_opt") {
366 cc = GenCryptoContextBFV<Element>(ORDER, ptm, bits, towers, OPTIMIZED);
367 }
else if (name ==
"BFVrns_rlwe") {
368 cc = GenCryptoContextBFVrns<Element>(ptm, RLWE, batchSize);
369 }
else if (name ==
"BFVrns_opt") {
370 cc = GenCryptoContextBFVrns<Element>(ptm, OPTIMIZED, batchSize);
371 }
else if (name ==
"BFVrnsB_rlwe") {
372 cc = GenCryptoContextBFVrnsB<Element>(ptm, RLWE, batchSize);
373 }
else if (name ==
"BFVrnsB_opt") {
374 cc = GenCryptoContextBFVrnsB<Element>(ptm, OPTIMIZED, batchSize);
375 }
else if (name ==
"CKKS_sparse") {
376 cc = GenCryptoContextCKKS<Element>(ORDER, towers, ptm, relinWin, batchSize,
377 SPARSE, ksTech, rsTech);
378 }
else if (name ==
"CKKS") {
379 cc = GenCryptoContextCKKS<Element>(ORDER, towers, ptm, relinWin, batchSize,
380 OPTIMIZED, ksTech, rsTech);
381 }
else if (name ==
"BGVrns_rlwe") {
382 cc = GenCryptoContextBGVrns<Element>(ORDER, towers, bits, ptm, relinWin,
383 RLWE, ksTech, batchSize, msMethod);
384 }
else if ((name ==
"BGVrns_opt") || (name ==
"BGVrns")) {
386 GenCryptoContextBGVrns<Element>(ORDER, towers, bits, ptm, relinWin,
387 OPTIMIZED, ksTech, batchSize, msMethod);
388 }
else if (name ==
"BGVrns_sparse") {
389 cc = GenCryptoContextBGVrns<Element>(ORDER, towers, bits, ptm, relinWin,
390 SPARSE, ksTech, batchSize, msMethod);
392 std::cout <<
"nothing for " << name << std::endl;
396 cc->Enable(ENCRYPTION);
static CryptoContext< Element > genCryptoContextBFVrns(const PlaintextModulus plaintextModulus, float securityLevel, float dist, unsigned int numAdds, unsigned int numMults, unsigned int numKeyswitches, MODE mode=OPTIMIZED, int maxDepth=2, uint32_t relinWindow=0, size_t dcrtBits=60, uint32_t n=0)
Definition: cryptocontextfactory.cpp:194
static CryptoContext< Element > genCryptoContextBGVrns(shared_ptr< ParmType > params, const PlaintextModulus plaintextmodulus, usint relinWindow, float stDev, MODE mode=RLWE, int depth=1, int maxDepth=2, KeySwitchTechnique ksTech=BV, enum ModSwitchMethod msMethod=MANUAL)
Definition: cryptocontextfactory.cpp:460
static CryptoContext< Element > genCryptoContextBFV(shared_ptr< ParmType > params, const PlaintextModulus plaintextmodulus, usint relinWindow, float stDev, const std::string &delta, MODE mode=RLWE, const std::string &bigmodulus="0", const std::string &bigrootofunity="0", int depth=0, int assuranceMeasure=0, float securityLevel=0, const std::string &bigmodulusarb="0", const std::string &bigrootofunityarb="0", int maxDepth=2)
Definition: cryptocontextfactory.cpp:89
Definition: exception.h:119
static CryptoContext< Element > genCryptoContextCKKS(shared_ptr< ParmType > params, const PlaintextModulus plaintextmodulus, usint relinWindow, float stDev, MODE mode=RLWE, int depth=1, int maxDepth=2, KeySwitchTechnique ksTech=BV, RescalingTechnique rsTech=APPROXRESCALE)
Definition: cryptocontextfactory.cpp:402
static CryptoContext< Element > genCryptoContextBFVrnsB(const PlaintextModulus plaintextModulus, float securityLevel, float dist, unsigned int numAdds, unsigned int numMults, unsigned int numKeyswitches, MODE mode=OPTIMIZED, int maxDepth=2, uint32_t relinWindow=0, size_t dcrtBits=60, uint32_t n=0)
Definition: cryptocontextfactory.cpp:298
static CryptoContext< Element > genCryptoContextNull(unsigned int m, const PlaintextModulus ptModulus)
Definition: cryptocontextfactory.cpp:690
Definition: binfhecontext.h:36
Main class for big integers represented as an array of native (primitive) unsigned integers...
Definition: backend.h:60
Definition: exception.h:126