in pir_server.cpp [350:373]
inline void PIRServer::multiply_power_of_X(const Ciphertext &encrypted, Ciphertext &destination,
uint32_t index) {
auto coeff_mod_count = params_.coeff_modulus().size();
auto coeff_count = params_.poly_modulus_degree();
auto encrypted_count = encrypted.size();
//cout << "coeff mod count for power of X = " << coeff_mod_count << endl;
//cout << "coeff count for power of X = " << coeff_count << endl;
// First copy over.
destination = encrypted;
// Prepare for destination
// Multiply X^index for each ciphertext polynomial
for (int i = 0; i < encrypted_count; i++) {
for (int j = 0; j < coeff_mod_count; j++) {
negacyclic_shift_poly_coeffmod(encrypted.data(i) + (j * coeff_count),
coeff_count, index,
params_.coeff_modulus()[j],
destination.data(i) + (j * coeff_count));
}
}
}