Esempio n. 1
0
    def generate_keys(self):
        """
        Generates key values for our cipher.
        """
        prime_gen = PrimeNumberGenerator(self.start, self.stop, self.precision)
        try:
            p = prime_gen.generate_prime_number()
            while True:
                q = prime_gen.generate_prime_number()
                if q != p:
                    break
        except:
            raise ValueError

        n = p * q
        euler_fcn = (p - 1) * (q - 1)

        while True:
            e = random.randint(1, euler_fcn)
            if self.co_prime(e, euler_fcn):
                break

        d = self.mod_inv(e, euler_fcn)

        return n, e, d
Esempio n. 2
0
 def encrypt(self, message, mod_n, e):
     """
     Takes message and encrypts it.
     :param message: secret message
     :param mod_n: n value of public key
     :param e: e value of public key
     :return: list of encrypted signs
     """
     numList = self.uni2num(message)
     return [PrimeNumberGenerator.modular_exp(letter, e, mod_n) for letter in numList]
Esempio n. 3
0
 def decrypt(self, cipher, mod_n, d):
     """
     Takes encrypted list of longs and decrypt it
     :param cipher: secret encrypted message
     :param mod_n: n value of private key
     :param d: d value of private key
     :return: unicode message
     """
     message = [PrimeNumberGenerator.modular_exp(letter, d, mod_n) for letter in cipher]
     return self.num2uni(message)