#!/usr/bin/python sig = """ -----BEGIN PGP SIGNED MESSAGE----- """ from number import * import sys # number.py is part of the Python Cryptography Toolkit # # 2003/8/20 # calculates a P- strong prime X based on prime P # checking i*P+1 for primality with Rabin-Miller test # max = 1000 ################################################################ def Line (S) : while S[-1:] == "\r" or S[-1:] == "\n" : S = S[:-1] return S ################################################################ def toLong (S) : while ord(S[:1]) < 48 or ord (S[:1]) > 57 : S = S[1:] while ord(S[-1:]) < 48 or ord (S[-1:]) > 57 : S = S[:-1] return long(S) ################################################################ def toString (L) : # returns only decimal digits S = str(L) if S[-1:] == "L" : S = S[:-1] return S ################################################################ def bits(N) : I = 0 while N > 0 : N = N / 2 I = I + 1 return I ################################################################ EOL = "\n" P = Q = 1L if len(sys.argv) != 2 : print "usage: strongprimes primefile" else: try: FILE = open(sys.argv[1], "r") Content = FILE.readlines() FILE.close() try: P = toLong(Content[0]) Q = toLong(Content[1]) except: print EOL + "File does not contain two primes " + EOL sys.exit(3) except IOError : print "Input file is unavailable." sys.exit(1) # check if both numbers are really prime. if not isPrime(P) : print "First number is not prime." sys.exit(4) if not isPrime(Q) : print "Second number is not prime." sys.exit(4) FirstP = FirstQ = 0L for i in range(max): X = i*P+1 if isPrime(X) : print "#####" print "Strong prime found in round ", i print " P = ", X, toString(bits(X)), " bits" print " P- = ", P, toString(bits(P)), " bits" Prime1 = X if FirstP == 0L : FirstP = Prime1 for i in range(max): X = i*Q+1 if isPrime(X) : print "#####" print "Strong prime found in round ", i print " Q = ", X, toString(bits(X)), " bits" print " Q- = ", Q, toString(bits(Q)), " bits" Prime2 = X if FirstQ == 0L : FirstQ = Prime2 print "***********************************" print "First primes" print "P = " , FirstP print "Q = ", FirstQ print print "Hashmodulus =", toString(FirstP*FirstQ) print toString(bits(FirstP*FirstQ)), " bits" D = FirstQ - FirstP print "Distance ", D, toString(bits(D)), " bits" print "***********************************" print "Last primes" print "P = " , Prime1 print "Q = ", Prime2 print print "Hashmodulus =", toString(Prime1*Prime2) print toString(bits(Prime1*Prime2)), " bits" D = Prime2 - Prime1 print "Distance ", D, toString(bits(D)), " bits" print "***********************************" sys.exit(0) sig = """ -----BEGIN PGP SIGNATURE----- Version: 2.6.3in Charset: noconv iQEVAwUBP0PDUr6wVDeIE49tAQEOXQgAnbLkYuyWVAXXXyZmzU9ZTbwspBHQrcgW eV/ZXSdEg+0xA1Z0IDPnwLvIrLlW1Q7NGDr0PuomjKxcHgJ2pGax1mIobPng4zVd feycyjwD9BjeLd4Pq+WWT1K5BO7r2sP+q7ag39aR1zErKbVfhzi/90I2aCvCJ+cE OHh+DGQiGFlqEIfLsqDuOa7PN7HjbmQKSyNiGrxU+ehNegOjl4LuttdqUol4Jrag 0Rs44GcHIZ1Itt2u+kS6/2EHGm/WSViDEBmM9ptLY2wtz+OlVILy13Uf+5DjOWwj sS0ce740j2QanwEnKNM2HpiNIhzz3u5UmG/XIBTE5G4oIP5bCHXaeQ== =y2Yg -----END PGP SIGNATURE----- """