On this page
    
    
                                            
                                            article
                                            
                                            
                                        
                                            
                                        
                                        Known D DRAFT
Implementation
Parameters Required:
- N: the modulus
 - e: the public exponent
 - d: the private exponent
 
Return: a tuple containing the prime factors
  from math import gcd
from random import randrange
def attack(N, e, d):
    k = e * d - 1
    t = 0
    while k % (2 ** t) == 0:
        t += 1
    while True:
        g = randrange(1, N)
        for s in range(1, t + 1):
            x = pow(g, k // (2 ** s), N)
            p = gcd(x - 1, N)
            if 1 < p < N and N % p == 0:
                return p, N // p