''' Simplification of Euler's Totient function knowing the prime factorisation for the public key N value. ''' def _totient(p: int, q: int) -> int: return (p - 1) * (q - 1) ''' Implements RSA encryption as modular exponentiation. ''' def encrypt(plaintext: int, e: int, N: int) -> int: return pow(plaintext, e, N) def decrypt(ciphertext: int, d: int, N: int) -> int: return pow(ciphertext, d, N) def gen_private_key(e: int, p: int, q: int) -> int: return pow(e, -1, _totient(p, q))