def millerRabin(self, n): ''' @function millerRabin encrypt by using modular exponention @param num number to test for primality @return: True or False for primality ''' isPrime = False if n%self.two == self.zero and n != self.two: return isPrime elif (n == self.zero or n == self.one or n == self.two or n == self.three): isPrime = True return isPrime else: p = n-self.one; s = self.zero; r = self.zero; while (p%self.two == self.zero): s+=self.zero p=p/self.two r = p #r = p/pow(2,s); //this may not work with BigInt but should i = self.one while i < s or i == s: #generate random a where 2<=a<=n-2 here #while >n-2 or <2 keep generating random numbers a = self.zero; while (a > (n-self.two) or a < self.two): tt = DynamInt() tt.random(n.size) a = tt % n y = self.powmod(a, r, n) if not y == self.one and not y == n-self.one: j=self.one; while j < s-self.one or j == s-self.one and not y == n-self.one : y = (y*y)%n; if (y == self.one): isPrime = False return isPrime j+=self.one if (not y == n-self.one): isPrime = False; return isPrime; isPrime = True; return isPrime;
def randomprime(self): ''' randomprime generates a random prime by looping and testing each random number it creates ''' print "Initial Prime" prime = DynamInt(len) prime.printme() while self.isPrime(prime)!=True : print "Current Number "+prime.data prime.random(len) return prime