Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.86 KB | None | 0 0
  1. ︠6bd4528c-5c7c-4274-a679-b3a3f36196cfs︠
  2. # NTRU2005
  3. from datetime import datetime
  4.  
  5.  
  6. N=251
  7. q=239
  8. p=2
  9. df1=4
  10. df2=4
  11. df3=4
  12. dg=4
  13. dr1=4
  14. dr2=4
  15. dr3=4
  16. m = R([randint(0,1)for i in range (0,N)])
  17.  
  18. Fq.<x> = PolynomialRing(GF(q))
  19. Rq = QuotientRing(Fq, x^N-1, names = "x")
  20. Fp.<x> = PolynomialRing(GF(p))
  21. Rp = QuotientRing(Fp, x^N-1, names = "x")
  22. Z.<x> = PolynomialRing(ZZ)
  23. R = QuotientRing(Z, x^N-1, names = "x")
  24.  
  25. def wielomian(j):
  26.     f=[1 for i in range (j)]
  27.     f.extend([0 for i in range(N-j)])
  28.     shuffle(f)
  29.     return f
  30. def  NTRUGen(df1,df2,df3,dg):
  31.     f1=R(wielomian(df1))
  32.     f2=R(wielomian(df2))
  33.     f3=R(wielomian(df3))
  34.     f=1+p*(f1*f2*f3)
  35.     fq=Rq.lift(Rq(f))
  36.     fq1=xgcd(fq, x^N-1)[1]
  37.     g=wielomian(dg)
  38.     g=Rq.lift(Rq(g))
  39.     h = p*fq1*g
  40.     return h,fq
  41. def NTRUEnc(h,dr1,dr2,dr3,m):
  42. #     m=[randint(0,1)for i in range (0,N)]
  43. #     m=R(m)
  44.     r1=R(wielomian(dr1))
  45.     r2=R(wielomian(dr2))
  46.     r3=R(wielomian(dr3))
  47.     r=r1*r2+r3
  48.     r=R(r)
  49.     e= Rq(r*h+m)
  50.     return e,m
  51. def NTRUDec(fq,e):
  52.     aq = e*fq
  53.     m=Rp(Rq.lift(aq))
  54.     return m
  55.  
  56.  
  57. l=0
  58. czas=datetime.now()
  59. for i in range (1000):
  60.     h,fq=NTRUGen(df1,df2,df3,dg)
  61.     #print "1"
  62.     e,m1=NTRUEnc(h,dr1,dr2,dr3,m)
  63.     #print "2"
  64.     m=NTRUDec(fq,e)
  65.     #print "3"
  66.     if m==m1:
  67.         l=l+1
  68. print "2005",l, "/1000"
  69. print "CZAS", datetime.now()-czas
  70.  
  71. N=251
  72. p=2
  73. q=239
  74. df=4
  75. dg=4
  76. dr=4
  77.  
  78. Z = PolynomialRing(ZZ, names = "x")
  79. xz = Z.gen()
  80. R = Z.quotient((xz^N-1),'x')
  81.  
  82. Fp = PolynomialRing(GF(p),'x')
  83. xp = Fp.gen()
  84. Rp = Fp.quotient((xp^N-1),'x')
  85.  
  86. Fq = PolynomialRing(GF(q),'x')
  87. xq = Fq.gen()
  88. Rq = Fq.quotient((xq^N-1),'x')
  89.  
  90. def wielomianGen(df):
  91.     f = [1 for i in range(df)]
  92.     f.extend([0 for i in range(N-df)])
  93.     shuffle(f)
  94.     return f
  95.  
  96.  
  97. def ntruGen():
  98.     while true:
  99.         f1 = R(wielomianGen(df))
  100.         f = 1+p*f1
  101.         fq=Rq.lift(Rq(f))
  102.         if(gcd(fq, xq^N-1)==1):
  103.             break
  104.     negfq = xgcd(fq, xq^N-1)[1]
  105.     #
  106.     g = Rq(wielomianGen(dg))
  107.     h = (p*negfq*g)
  108.     return fq, h
  109.  
  110. def ntruEnc(h,m):
  111.     r = R(wielomianGen(dr))
  112.     return Rq(r*h+m)
  113.  
  114. def ntruDec(e,fq):
  115.     aq = Rq(e*fq)
  116.     m = Rp(Rq.lift(aq))
  117.     return m
  118.  
  119. gut = 0
  120. czas = datetime.now()
  121. for i in range(1000):
  122.     fq,h = ntruGen()
  123.     e = ntruEnc(h,m)
  124.     getm = ntruDec(e,fq)
  125.     if(m==getm):
  126.         gut = gut + 1
  127. print "2003",gut,"/1000"
  128. print "czas:",datetime.now() - czas
  129. ︡d12349c2-ace4-4e6a-97bd-4afe548f0700︡{"stderr":"Error in lines 49-54\nTraceback (most recent call last):\n  File \"/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py\", line 1191, in execute\n    flags=compile_flags), namespace, locals)\n  File \"\", line 3, in <module>\n  File \"\", line 7, in NTRUEnc\nTypeError: unsupported operand type(s) for +: 'PolynomialQuotientRing_generic_with_category.element_class' and 'R'\n"}{"done":true}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement