I really wanted to have 23 levels available after bootstrapping, so I decided to set dcrtBits=56. When I then let openfhe automatically determine and set the ring dimension for 128 bit security, I get this exception:
ParamsGenCKKSRNS(): The ring dimension found using estimated logQ(P) [131072] does does not meet security requirements. Report this problem to OpenFHE developers and set the ring dimension manually to 262144.
Here is the modified simple-ckks-bootstrapping.cpp example, to reproduce the error:
void SimpleBootstrapExample() {
CCParams<CryptoContextCKKSRNS> parameters;
SecretKeyDist secretKeyDist = UNIFORM_TERNARY;
parameters.SetSecretKeyDist(secretKeyDist);
ScalingTechnique rescaleTech = FLEXIBLEAUTO;
usint dcrtBits = 56;
usint firstMod = 60;
parameters.SetScalingModSize(dcrtBits);
parameters.SetScalingTechnique(rescaleTech);
parameters.SetFirstModSize(firstMod);
std::vector<uint32_t> levelBudget = {4, 4};
uint32_t levelsAvailableAfterBootstrap = 23;
usint depth = levelsAvailableAfterBootstrap + FHECKKSRNS::GetBootstrapDepth(levelBudget, secretKeyDist);
parameters.SetMultiplicativeDepth(depth);
CryptoContext<DCRTPoly> cryptoContext = GenCryptoContext(parameters);
usint ringDim = cryptoContext->GetRingDimension();
std::cout << "CKKS scheme is using ring dimension " << ringDim << std::endl << std::endl;
}
I will use other values for now, but I thought you might be interested in the problem, since the error message tells me to report it.