#!/usr/bin/env python3

from Crypto.Util.number import getPrime, bytes_to_long, inverse
from random import getrandbits
from math import gcd, isqrt
import codecs

FLAG = b"HackCTF{????????????????????????????}"

FLAG_ROT = codecs.encode(FLAG.decode(), 'rot_13').encode()
m = bytes_to_long(FLAG_ROT)

def get_huge_RSA():
    while True:
        p = getPrime(1024)
        q = getPrime(1024)
        N = p * q
        phi = (p - 1) * (q - 1)

        N_quarter = isqrt(isqrt(N))
        d = getrandbits(512)

        if gcd(d, phi) == 1 and d < N_quarter // 3:
            e = inverse(d, phi)
            return N, e

N, e = get_huge_RSA()
c = pow(m, e, N)

print(f'N = {hex(N)}')
print(f'e = {hex(e)}')
print(f'c = {hex(c)}')
