def mul_plain(self, c, a): return crypton.mod_pow(c, a, self.n * self.n)
def add_plain(self, c, a): return (c * crypton.mod_pow(self.g, a, self.n * self.n)) % (self.n * self.n)
def sub_cipher(self, c, a): gi = crypton.mod_inv(self.g, self.n * self.n) return (c * crypton.mod_pow(gi, a, self.n * self.n)) % (self.n * self.n)
def encrypt(self, msg): r = random.randint(1, self.n - 1) return (crypton.mod_pow(self.g, msg, self.n * self.n) * crypton.mod_pow(r, self.n, self.n * self.n)) % (self.n * self.n)
def decrypt(self, c): u = crypton.mod_pow(c, self.__lam, self.n * self.n) return (((u - 1) // self.n) * self.__mu) % self.n
def mul_plain(self, c, a): return crypton.mod_pow(c,a,self.n*self.n)
def sub_cipher(self, c, a): gi = crypton.mod_inv(self.g, self.n*self.n) return (c * crypton.mod_pow(gi,a,self.n*self.n)) % (self.n*self.n)
def add_plain(self, c, a): return (c * crypton.mod_pow(self.g,a,self.n*self.n)) % (self.n*self.n)
def decrypt(self, c): u = crypton.mod_pow(c, self.__lam, self.n*self.n) return (((u-1) // self.n) * self.__mu) % self.n
def encrypt(self, msg): r = random.randint(1, self.n-1) return (crypton.mod_pow(self.g, msg, self.n*self.n) * crypton.mod_pow(r, self.n, self.n*self.n)) % (self.n*self.n)