예제 #1
0
    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;
예제 #2
0
 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