Beispiel #1
0
	def test_numberfield_positivesquareroot_modp1(self):
		# Briggs' CRT example
		n = 45113
		m = 31
		nfspoly = poly.Poly([8,29,15,1])
		tomult = [[-1,1],[3,1],[13,1],[104,1],[3,2],[25,2],[-8,3],[48,5],[54,5],[-43,6],[-8,7],[11,7],[856,11]]
		primeSizeEst = etcmath.calcRequiredPrimeLength(n, m, nfspoly, tomult)
		#primes = randomPrimes(primeSizeEst,32)
		prime = 9929
		
		NFp = poly.NumberFieldModP(nfspoly,prime)
		nfspolyd = NFp(nfspoly.derivative())
		tomultNFp = [NFp(poly.Poly(x)) for x in tomult]
		prod = multAllElements(NFp(poly.Poly([1])),tomultNFp)
		prod = prod * nfspolyd * nfspolyd
			
		sqrt = prod.sqrt()
		posSqrt = NFp(poly.Poly([3077, 1160, 3402]))
		negSqrt = NFp(poly.Poly([6852, 8769, 6527]))
		
		self.assertTrue(sqrt == posSqrt or sqrt == negSqrt)
Beispiel #2
0
		for column in dependency:
			if(column == 1):
				smooth = smooths[ctr]
				dependencySmooths.append(smooth)
			ctr += 1
		
		if(len(dependencySmooths) == 0):
			continue
		
		print "dependency has %s entries." % len(dependencySmooths) 
		
		primeExponents = getRatPrimeExponents(dependencySmooths,rfBase)
		ratSide = getSqrtModNFromPrimeExponents(primeExponents,rfBase,n)
		ratSide = (ratSide * nfsPolyDerivative.evaluate(m)) % n
		
		couvBound = etcmath.calcRequiredPrimeLength(n,m,poly.Poly(nfsPoly),dependencySmooths)
		(primes,prodPrimes) = generatePrimes(primes,poly.Poly(nfsPoly),couvBound)
		primeExponents = getAlgPrimeExponents(dependencySmooths,NF,afBase)
		
		sum = 0
		for prime in primes:
			print "%s/%s sqrt" % (primes.index(prime)+1,len(primes))
			NFp = poly.NumberFieldModP(poly.Poly(nfsPoly),prime) 
			
			normModP = getSqrtModNFromPrimeExponents(primeExponents,afBase,prime)
			normModP = (normModP*NFp(nfsPolyDerivative).norm()) % prime
			
			prod = NFp(poly.Poly([1]))
			for smooth in dependencySmooths:
				prod = prod * NFp(poly.Poly(smooth))
				
Beispiel #3
0
        for column in dependency:
            if (column == 1):
                smooth = smooths[ctr]
                dependencySmooths.append(smooth)
            ctr += 1

        if (len(dependencySmooths) == 0):
            continue

        print "dependency has %s entries." % len(dependencySmooths)

        primeExponents = getRatPrimeExponents(dependencySmooths, rfBase)
        ratSide = getSqrtModNFromPrimeExponents(primeExponents, rfBase, n)
        ratSide = (ratSide * nfsPolyDerivative.evaluate(m)) % n

        couvBound = etcmath.calcRequiredPrimeLength(n, m, poly.Poly(nfsPoly),
                                                    dependencySmooths)
        (primes, prodPrimes) = generatePrimes(primes, poly.Poly(nfsPoly),
                                              couvBound)
        primeExponents = getAlgPrimeExponents(dependencySmooths, NF, afBase)

        sum = 0
        for prime in primes:
            print "%s/%s sqrt" % (primes.index(prime) + 1, len(primes))
            NFp = poly.NumberFieldModP(poly.Poly(nfsPoly), prime)

            normModP = getSqrtModNFromPrimeExponents(primeExponents, afBase,
                                                     prime)
            normModP = (normModP * NFp(nfsPolyDerivative).norm()) % prime

            prod = NFp(poly.Poly([1]))
            for smooth in dependencySmooths: