# -*- coding: utf-8 -*- """ Created on Sun Mar 19 17:32:56 2023 @author: simon """ from Crypto.PublicKey import DSA import random DSAkey=DSA.generate(int(1024)) p = DSAkey.p q = DSAkey.q print("p = {}".format(hex(p))) print("q = {}".format(hex(q))) #p = 59 #q = 29 foundAlpha = True while not foundAlpha: #for alpha in range(2,p-1): alpha = random.randint(2,p-1) #alpha = DSAkey.y if pow(alpha,q,p) == 1: # check if smaller integer k exists for k in range(1,q): if pow(alpha,k,p) == 1: if k == q: foundAlpha = True break else: break if foundAlpha == True: break alpha = DSAkey.y if foundAlpha: print("found alpha={}, where ord(alpha)=q".format(alpha)) else: print("unable to find alpha") exit(1) d = random.randint(1, q-1) #d = 7 print("d={}".format(d)) for beta in range(1,p): if (beta % p) == pow(alpha,d,p): break print("beta={}".format(beta)) ke = random.randint(1, q-1) ke = 10 for r in range(1,p-1): if pow(pow(alpha,ke,p),1,q) == pow(r,1,q): break print("r={}".format(r))