def Enc(pk, m): e1 = torch.clamp(torch.randn(n) * s, min=-3*s, max=3*s).long().cuda() e2 = torch.clamp(torch.randn(n) * s, min=-3*s, max=3*s).long().cuda() e3 = torch.clamp(torch.randn(l) * s, min=-3*s, max=3*s).long().cuda() if m.size(0) < l: m = torch.cat((m, torch.zeros(l - m.size(0)).long().cuda()), 0) c1 = vecmul(e1, pk.A) + p * e2 c2 = vecmul(e1, pk.P) + p * e3 + m return Ciphertext(c1, c2)
def Dec(sk, c): return (vecmul(c.c1, sk) + c.c2) % p