diff --git a/telethon/crypto/factorization.py b/telethon/crypto/factorization.py index f64b1bd0..359887d3 100644 --- a/telethon/crypto/factorization.py +++ b/telethon/crypto/factorization.py @@ -2,17 +2,10 @@ from random import randint class Factorization: - @staticmethod - def gcd(a: int, b: int) -> int: - while b: - a, b = b, a % b - - return a - @classmethod - def factorize(cls, pq: int) -> tuple or int: + def factorize(cls, pq): if pq % 2 == 0: - return 2 + return 2, pq // 2 y, c, m = randint(1, pq - 1), randint(1, pq - 1), randint(1, pq - 1) g = r = q = 1 @@ -20,15 +13,12 @@ class Factorization: while g == 1: x = y - for i in range(r): y = (pow(y, 2, pq) + c) % pq k = 0 - while k < r and g == 1: ys = y - for i in range(min(m, r - k)): y = (pow(y, 2, pq) + c) % pq q = q * (abs(x - y)) % pq @@ -42,8 +32,14 @@ class Factorization: while True: ys = (pow(ys, 2, pq) + c) % pq g = cls.gcd(abs(x - ys), pq) - if g > 1: break return g, pq // g + + @staticmethod + def gcd(a, b): + while b: + a, b = b, a % b + + return a