fix implementation errors. (#1568)

I revised my implementation and found out that I have miss a inner loop for t.  x and y should be recalculated everytime when t is divisble by 2. I have also included a more readble source for this algorithm.
This commit is contained in:
Zizhou Zhang 2019-11-15 06:29:54 +11:00 committed by Christian Clauss
parent ea9bf0a90c
commit e3aa0f65e8

View File

@ -4,6 +4,7 @@ An RSA prime factor algorithm.
The program can efficiently factor RSA prime number given the private key d and
public key e.
Source: on page 3 of https://crypto.stanford.edu/~dabo/papers/RSA-survey.pdf
More readable source: https://www.di-mgt.com.au/rsa_factorize_n.html
large number can take minutes to factor, therefore are not included in doctest.
"""
import math
@ -35,6 +36,7 @@ def rsafactor(d: int, e: int, N: int) -> List[int]:
while p == 0:
g = random.randint(2, N - 1)
t = k
while True:
if t % 2 == 0:
t = t // 2
x = (g ** t) % N
@ -42,6 +44,9 @@ def rsafactor(d: int, e: int, N: int) -> List[int]:
if x > 1 and y > 1:
p = y
q = N // y
break # find the correct factors
else:
break # t is not divisible by 2, break and choose another g
return sorted([p, q])