in pir.cpp [35:77]
void gen_params(uint64_t ele_num, uint64_t ele_size, uint32_t N, uint32_t logt,
uint32_t d, EncryptionParameters ¶ms,
PirParams &pir_params) {
// Determine the maximum size of each dimension
// plain modulus = a power of 2 plus 1
uint64_t plain_mod = (static_cast<uint64_t>(1) << logt) + 1;
uint64_t plaintext_num = plaintexts_per_db(logt, N, ele_num, ele_size);
#ifdef DEBUG
cout << "log(plain mod) before expand = " << logt << endl;
cout << "number of FV plaintexts = " << plaintext_num << endl;
#endif
vector<SmallModulus> coeff_mod_array;
uint32_t logq = 0;
for (uint32_t i = 0; i < 1; i++) {
coeff_mod_array.emplace_back(SmallModulus());
coeff_mod_array[i] = DefaultParams::small_mods_60bit(i);
logq += coeff_mod_array[i].bit_count();
}
params.set_poly_modulus_degree(N);
params.set_coeff_modulus(coeff_mod_array);
params.set_plain_modulus(plain_mod);
vector<uint64_t> nvec = get_dimensions(plaintext_num, d);
uint32_t expansion_ratio = 0;
for (uint32_t i = 0; i < params.coeff_modulus().size(); ++i) {
double logqi = log2(params.coeff_modulus()[i].value());
cout << "PIR: logqi = " << logqi << endl;
expansion_ratio += ceil(logqi / logt);
}
pir_params.d = d;
pir_params.dbc = 6;
pir_params.n = plaintext_num;
pir_params.nvec = nvec;
pir_params.expansion_ratio = expansion_ratio << 1; // because one ciphertext = two polys
}