Hi, I have few questions regarding the size of the message space in binfhe (i.e with FHEW or TFHE).

- It seems, when I call GetMaxPlaintextSpace(), that the maximum message size is 3bits, is it right or am I missing something ?
- Why it is limited to 3 bits ?
- When I want to do scalar multiplication, it can only handle 2bits ( for example : [1]*4 = [0] while it should be [4])

Can you enlighten me on that, please ?

Thank you in advance.

By default, the plaintext modulus is set to 4. This corresponds to the original FHEW/TFHE (configured for Boolean circuit evaluation) described in FHEW: Bootstrapping Homomorphic Encryption in less than a second (See Section 4).

You can increase the modulus, as illustrated in `eval-sign.cpp`

and `eval-function.cpp`

.

`GetMaxPlaintextSpace()`

gives the maximum plaintext space supported for the current value of q. This is the maximum plaintext space supported using a **single** bootstrapping.

It is possible to work with higher plaintext moduli, as illustrated in `eval-sign.cpp`

. In this case, **multiple** bootstrapping invocations are needed; the ciphertext is split in digits, and each digit is processed separately. This logic is explained in Large-Precision Homomorphic Sign Evaluation using FHEW/TFHE Bootstrapping.