I am trying to implement an algorithm that uses ciphertexts with small values, therefore I am using a value of scale \Delta=30 (dcrtBits = 59, firstMod = 30).
My issue is that, when I try to perform EvalBootstrap, the output values of the ciphertext are always equal to 0. This only happens when firstMod = 30, if I use firstMod = 60 it works.
Am I missing something? I did not study the implementation of Bootstrapping in OpenFHE.
It looks like you are not using firstMod and dcrtBits correctly. The scaling factor is given by dcrtBits. So it should be set to 30 (note that I do not recommend setting it to lower than 40 for the scenarios with bootstrapping as the precision will be very low). firstMod should be >= dcrtBits determines the maximum magnitude, e.g., if it is 10 bits larger, the message size can be up to 1024 or so.
Hi @ypolyakov ,
Does this imply that if I set firstMod = 60 and dcrtBits = 59, the message space is limited to 1 bit? But when i try to multiply c0=10 and c1=20 under this parameter, the decryption is still 200
Does this imply that if I set firstMod = 60 and dcrtBits = 59, the message space is limited to 1 bit?
No, for the bootstrapping configuration, the message is automatically scaled down by 2^correctionfactor. The correction factor is found automatically by OpenFHE or can be manually set. The correction factor is typically between 7 and 13.
But when i try to multiply c0=10 and c1=20 under this parameter, the decryption is still 200
For leveled CKKS, the extra RNS limbs/towers add support for numbers larger than 2^firstModulus/2^ScalingFactor. For example, if you reserve one extra limb, you will get extra 59 bits (you can support larger numbers in CKKS). But this logic does not apply to CKKS bootstrapping.