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)
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))
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: