コード例 #1
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_reduceToNFp(self):
		p = 9923
		poly1 = poly.Poly([7301,1477,7726])
		poly2 = poly.Poly([8,29,15,1])
		NFp = poly.NumberFieldModP(poly1,p)
		testReduction = NFp(poly2)
		correctReduction = NFp(poly.Poly([9858, 7744]))
		self.assertEqual(testReduction,correctReduction)
コード例 #2
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_sqrt_equality(self):
		nfspoly = poly.Poly([8,29,15,1])
		prime = 9929
		NFp = poly.NumberFieldModP(nfspoly,prime)
		posSqrt = NFp(poly.Poly([3077, 1160, 3402]))
		negSqrt = NFp(poly.Poly([6852, 8769, 6527]))
		
		self.assertEqual(posSqrt,-negSqrt)
		self.assertEqual(-posSqrt,negSqrt)
コード例 #3
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_power_modp2(self):
		#Briggs
		polynomial = poly.Poly([8,29,15,1])
		p = 9923
		NFp = poly.NumberFieldModP(polynomial,p)
		g = NFp(poly.Poly([0,1])) ** p
		g = g - NFp(poly.Poly([0,1]))
		g = g.getPoly() 
		
		correctG = poly.Poly([7301,1477,7726])
		self.assertEqual(g,correctG)
コード例 #4
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_modp1(self):
		# Briggs' example
		nfspoly = poly.Poly([8,29,15,1])
		NFp = poly.NumberFieldModP(nfspoly,9929)
		
		nfspolyd = NFp(nfspoly.derivative())
		correctProduct = NFp(poly.Poly([6659,3891,2027]))
		
		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]]
		tomult = [NFp(poly.Poly(x)) for x in tomult]
		prod = multAllElements(NFp(poly.Poly([1])),tomult)
		
		
		prod = prod * nfspolyd * nfspolyd
		self.assertEqual(prod,correctProduct)
コード例 #5
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_sqrt_modp2(self):
		# Briggs
		nfspoly = poly.Poly([161, 134, 2, 1])
		primes = [2305843009213693951,2305843009213693967,2305843009213693973,2305843009213694381]
		tomult = [[-92,-1],[-57,-1],[-23,-1],[-8,-1],[-7,-1],[2,-1],[10,-1],[17,-1],[29,-1],[35,-1],[84,-1],[115,-1],[139,-1],[-5,-2],[19,-2],[69,-2],[93,-2],[119,-2],[-542,-3],[-28,-3],[-23,-3],[-8,-3]]
		
		for prime in primes:
			NFp = poly.NumberFieldModP(nfspoly,prime)
			tomultNFp = [NFp(poly.Poly(x)) for x in tomult]
			nfspolyd = NFp(nfspoly.derivative())
			
			prod = multAllElements(NFp(poly.Poly([1])),tomultNFp)
			prod = prod * nfspolyd * nfspolyd
			sqrt = prod.sqrt()
			self.assertEqual(sqrt*sqrt,prod)
コード例 #6
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_modp3(self):
		# again, for a different prime
		nfspoly = poly.Poly([161, 134, 2, 1])
		NFp = poly.NumberFieldModP(nfspoly,2305843009213693973)
		nfspolyd = NFp(nfspoly.derivative())
		
		tomult = [[-92,-1],[-57,-1],[-23,-1],[-8,-1],[-7,-1],[2,-1],[10,-1],[17,-1],[29,-1],[35,-1],[84,-1],[115,-1],[139,-1],[-5,-2],[19,-2],[69,-2],[93,-2],[119,-2],[-542,-3],[-28,-3],[-23,-3],[-8,-3]]
		tomult = [NFp(poly.Poly(x)) for x in tomult]
		
		sqrt = NFp(poly.Poly([2053587909481112245, 481917539782027120, 1681812579256330563]))
		correctProduct = sqrt * sqrt
		
		prod = multAllElements(NFp(poly.Poly([1])),tomult)
		prod = prod * nfspolyd * nfspolyd
		self.assertEqual(prod,correctProduct)
コード例 #7
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_sqrt_modp1(self):
		# Briggs
		nfspoly = poly.Poly([8,29,15,1])
		primes = [9851,9907,9929]
		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]]
		
		for prime in primes:
			NFp = poly.NumberFieldModP(nfspoly,prime)
			tomultNFp = [NFp(poly.Poly(x)) for x in tomult]
			nfspolyd = NFp(nfspoly.derivative())
			
			prod = multAllElements(NFp(poly.Poly([1])),tomultNFp)
			prod = prod * nfspolyd * nfspolyd
			sqrt = prod.sqrt()
			
			self.assertEqual(sqrt*sqrt,prod)
コード例 #8
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_modp2(self):
		# Spaans' examples
		nfspoly = poly.Poly([161, 134, 2, 1])
		NFp = poly.NumberFieldModP(nfspoly,2305843009213693951)
		nfspolyd = NFp(nfspoly.derivative())
		
		tomult = [[-92,-1],[-57,-1],[-23,-1],[-8,-1],[-7,-1],[2,-1],[10,-1],[17,-1],[29,-1],[35,-1],[84,-1],[115,-1],[139,-1],[-5,-2],[19,-2],[69,-2],[93,-2],[119,-2],[-542,-3],[-28,-3],[-23,-3],[-8,-3]]
		tomult = [NFp(poly.Poly(x)) for x in tomult]
		
		# Spaans provides the sqrt, so square that.
		sqrt = NFp(poly.Poly([2053587909481111827,481917539782026790,1681812579256330563]))
		correctProduct = sqrt * sqrt
		
		prod = multAllElements(NFp(poly.Poly([1])),tomult)
		prod = prod * nfspolyd * nfspolyd
		self.assertEqual(prod,correctProduct)
コード例 #9
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	def test_numberfield_power_modp1(self):
		# Briggs
		nfspoly = poly.Poly([8,29,15,1])
		NFp = poly.NumberFieldModP(nfspoly,9929)
		base = NFp(poly.Poly([6659,3891,2027]))
		s = 122356359011
		power = base ** s
		self.assertEqual(power,NFp(poly.Poly([9928])))
		
		power = base ** ((s+1)/2)
		prod = power * NFp(poly.Poly([7827]))
		self.assertEqual(prod,NFp(poly.Poly([3077,1160,3402])))

		
		base = NFp(poly.Poly([1,1]))
		power = base ** (2*s)
		self.assertEqual(power,NFp(poly.Poly([2102])))
コード例 #10
0
ファイル: tests.py プロジェクト: JoeyL12138/nfs
	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)
コード例 #11
0
ファイル: sqrt-couv.py プロジェクト: JoeyL12138/nfs
        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))

            prod = prod * (NFp(nfsPolyDerivative)**2)

            sqrt = prod.sqrt()
            if (sqrt.norm() != normModP):
                sqrt = -sqrt
            if (sqrt.norm() != normModP):