import json C = 374015834710561043810344051134135 n = 98639350158287747956171614024858003106737929785723376047985588489903225031675238942280563373940905701931651170379361219551278894213021434648783114473246721338107200738833103695814346217200966617698677137725683746838186561756004241774294434212453862492176950276330700287348945941127494562176214125995218765677 M = 8684345636908686698383058753930515845376216074491905095625386038921316376845905096948974184280037158397773209920391529649784574906985754450477350014610356222003127212466169135522169279492231954962510144676909892095883819057606351964935618910468692572435658048566378696492965708241737271579660195263078472751 with open("k_pair.json", "r") as j: k_pair = json.loads(j.read()) # print(len(k_pair)) # print(k_pair[0]) k_pair.reverse() k_pair.append([0, M]) key = 0 for it, q in enumerate(k_pair): k, m_k = q # (C^(d_k * 2^k) ≡ x_k mod n print(it, k) for i in range(key + 0, key + 2**(1024-k)-1): m_ik = pow(pow(C, i, mod = n), pow(2, k), mod=n) if m_ik == m_k: print(i, m_k) key = i break if m_ik != m_k: print("E") if it == 160: print(key) break key = key << (k - k_pair[it+1][0]) print(pow(C, key, mod=n) == M) print(key)