Hi!
I’m stuck on a part of the CKKS decoding process. I understand that the step I’m describing is done for security reasons, and I’m not questioning why it’s necessary, but rather how it still allows us to obtain the correct result.
From what I understand, for the encoding (skipping scaling and other details), given a complex vector of size n, an IFFT is applied. The result is then expanded into a polynomial of degree N by separating the real and imaginary components.
To decode, we reverse the process to recover a complex vector of size n, denoted as m(x). After this, the conjugate function is applied, yielding m(1/x). Then, by summing m(x) + m(1/x) and performing an FFT on the result, we obtain the correct answer (again skipping some scaling factors).
Could someone help me to clarify why this works? I’m missing something? Some property?