Understanding Plaintext Implementation

Hello!

I’m trying to understand and get deep in OpenFHE implementation of the CKKS scheme, starting with the PlainText. For now I’m a bit overwhelm.

Some questions:

1- I see that there is a encoded vector, an encoded native vector and a DCRT encoded vector. Why we have three? And what are they? The DCRT is clear, the native is before the RNS? and the other?
2- Is there somewhere that explains in detail how this part of the implementation of encoding in general is done?

Thanks!

I think it is explained under the heading “Polynomial Representations” at the link below.
https://openfhe-development.readthedocs.io/en/latest/sphinx_rsts/modules/core/lattice/core_lattice.html#polynomial-representations

1 Like

Thank you! This is great!

Do you know if in the DCRT first they make the CRT and then for each polynomial they apply NTT? Or if first they make de NTT and then CRT?

First integer CRT (RNS) and then polynomial CRT (NTT). In practice, BGV, BFV, and CKKS already work in the RNS representation (integer CRT and multiprecision arithmetic are used only during precomputations).

1 Like