Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Tensor product over polynomial rings

Hi,

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 + skct1) and m2_q=(ct2 + skct3) 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 + c1sk + c2sk^2 = m_out

But, these are not matching. Appreciate your help.

Tensor product over polynomial rings

Hi,

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 + skct1) and m2_q=(ct2 + skct3) 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 + c1c1 * sk + c2c2 * sk^2 = m_out

But, these are not matching. Appreciate your help.

Tensor product over polynomial rings

Hi,

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 + skct1) and m2_q=(ct2 + skct3) 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)(2/q)*(ct0 tensor_product ct2)

c1 = (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.

Tensor product over polynomial rings

Hi,

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 + sksk * ct1) and m2_q=(ct2 + sksk * 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.

Tensor product over polynomial rings

Hi,

I'm writing code for Fully Homomorphic Encryption multiplication routine. routine. I'm trying to calculate tensor product over polynomial rings. rings. Let's say, say I have elements in R=Z[x]/[x^n+1] R = Z[x]/[x^n+1] where coefficients are modulo q.q.

I want to calculate tensor product of m1_q=(ct0 m1_q = (ct0 + sk * ct1) and m2_q=(ct2 ct1) and m2_q = (ct2 + sk * ct3) ct3) and scale it down by (q/2). (q/2). Each element ct0, ct1, ct2, ct3, sk, m1_q and m2_q ct0, ct1, ct2, ct3, sk, m1_q and m2_q are elements of Rq.Rq.

Just for m1_q and m2_q, m1_q and m2_q, it is working out well: (2/q)(m1_q tensor_product m2_q). well: (2/q)*(m1_q tensor_product m2_q). How can I calculate it in terms of ct? ct*? I tried writing it as:

c0 = (2/q)*(ct0 tensor_product ct2)

ct2) c1 = (2/q)*( (ct0 tensor_product ct3) + (ct2 tensor_product ct1) )

) c2 = (2/q)*(ct1 tensor_product ct3)

ct3) m_out = (2/q)*(m1_q tensor_product m2_q)

Then, m2_q)

Then I converted c0, c1, c0, c1, c2 and m_out into Rq.

Now I was testing:

c0 + c1 * sk + c2 and m_out into Rq.

Now, I was testing: c0 + c1 * sk + c2 * sk^2 = m_out

But, == m_out

But these are not matching. Appreciate your help.