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