Tensor product over polynomial rings
I'm writing code for Fully Homomorphic Encryption multiplication routine.
I'm trying to calculate tensor product over polynomial rings.
Let's say I have elements in R = Z[x]/[x^n+1] where coefficients are modulo q.
I want to calculate tensor product of m1_q = (ct0 + sk * ct1)
and m2_q = (ct2 + sk * ct3) and scale it down by (q/2).
Each element ct0, ct1, ct2, ct3, sk, m1_q
and m2_q are elements of Rq.
Just for m1_q and m2_q, it is working out well:
(2/q)*(m1_q tensor_product m2_q).
How can I calculate it in terms of ct*?
I tried writing it as:
c0 = (2/q)*(ct0 tensor_product ct2)
c1 = (2/q)*( (ct0 tensor_product ct3) + (ct2 tensor_product ct1) )
c2 = (2/q)*(ct1 tensor_product ct3)
m_out = (2/q)*(m1_q tensor_product m2_q)
Then I converted c0, c1, c2 and m_out into Rq.
Now I was testing:
c0 + c1 * sk + c2 * sk^2 == m_out
But these are not matching. Appreciate your help.
Thanks @slelievre for formatting.