Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. p = 2
  2. N = 11
  3. q = 7
  4. d = 2
  5.  
  6. R.<i> = PolynomialRing(ZZ)
  7. RR.<g> = R.quotient(i^N-1)
  8.  
  9. T.<s> = PolynomialRing(QQ)
  10. TT.<u> = T.quotient(s^N-1)
  11.  
  12. Rpt.<h> = PolynomialRing(GF(p))
  13. Rp.<j> = Rpt.quotient(i^N-1)
  14.  
  15. Rqt.<k> = PolynomialRing(GF(q))
  16. Rq.<l> = Rqt.quotient(i^N-1)
  17.  
  18. def randomTrinaryPoly(d1,d2):
  19. if d1+d2 < N:
  20. tmpTab = [0]*N
  21. x = 0
  22. indexArray = []
  23. for i in range(0,N):
  24. indexArray.append(i)
  25. while x < d1:
  26. tmpIndex = randint(0,N-1)
  27. if tmpIndex in indexArray:
  28. tmpTab[tmpIndex] = 1
  29. indexArray.remove(tmpIndex)
  30. x+=1
  31. x = 0
  32. while x < d2:
  33. tmpIndex = randint(0,N-1)
  34. if tmpIndex in indexArray:
  35. tmpTab[tmpIndex] = -1
  36. indexArray.remove(tmpIndex)
  37. x+=1
  38. return R(tmpTab)
  39.  
  40. def roundCoeffs(poly):
  41. tmpTab = []
  42. for c in poly:
  43. tmpTab.append(round(c))
  44. return R(tmpTab)
  45.  
  46. def ntruGen():
  47. f = randomTrinaryPoly(d+1,d)
  48. g = randomTrinaryPoly(d,d)
  49. while True:
  50. f = randomTrinaryPoly(d+1,d)
  51. g = randomTrinaryPoly(d+1,d)
  52.  
  53. Rf,f1,f2 = xgcd(f,i^N-1)
  54. Rg,g1,g2 = xgcd(g,i^N-1)
  55.  
  56. if gcd(f,g) == 1 and gcd(Rf,Rg) == 1:
  57. break
  58. return f,f1,f2,g,g1,g2,Rf,Rg
  59.  
  60.  
  61.  
  62. while True:
  63. f,f1,f2,g,g1,g2,Rf,Rg = ntruGen();
  64. if gcd(Rf,Rg) == 1:
  65. break
  66. temp,sf,sg = xgcd(Rf,Rg)
  67. A = q*sf*f1
  68. B = -q*sg*g1
  69.  
  70. fr = TT(f)**-1
  71. gr = TT(g)**-1
  72.  
  73. C = roundCoeffs((TT(B)*fr+TT(A)*gr)/2)
  74. F = TT(B-C*f)
  75. G = TT(A-C*g)
  76.  
  77. print F
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement