Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ︠6bd4528c-5c7c-4274-a679-b3a3f36196cfs︠
- # NTRU2005
- from datetime import datetime
- N=251
- q=239
- p=2
- df1=4
- df2=4
- df3=4
- dg=4
- dr1=4
- dr2=4
- dr3=4
- m = R([randint(0,1)for i in range (0,N)])
- Fq.<x> = PolynomialRing(GF(q))
- Rq = QuotientRing(Fq, x^N-1, names = "x")
- Fp.<x> = PolynomialRing(GF(p))
- Rp = QuotientRing(Fp, x^N-1, names = "x")
- Z.<x> = PolynomialRing(ZZ)
- R = QuotientRing(Z, x^N-1, names = "x")
- def wielomian(j):
- f=[1 for i in range (j)]
- f.extend([0 for i in range(N-j)])
- shuffle(f)
- return f
- def NTRUGen(df1,df2,df3,dg):
- f1=R(wielomian(df1))
- f2=R(wielomian(df2))
- f3=R(wielomian(df3))
- f=1+p*(f1*f2*f3)
- fq=Rq.lift(Rq(f))
- fq1=xgcd(fq, x^N-1)[1]
- g=wielomian(dg)
- g=Rq.lift(Rq(g))
- h = p*fq1*g
- return h,fq
- def NTRUEnc(h,dr1,dr2,dr3,m):
- # m=[randint(0,1)for i in range (0,N)]
- # m=R(m)
- r1=R(wielomian(dr1))
- r2=R(wielomian(dr2))
- r3=R(wielomian(dr3))
- r=r1*r2+r3
- r=R(r)
- e= Rq(r*h+m)
- return e,m
- def NTRUDec(fq,e):
- aq = e*fq
- m=Rp(Rq.lift(aq))
- return m
- l=0
- czas=datetime.now()
- for i in range (1000):
- h,fq=NTRUGen(df1,df2,df3,dg)
- #print "1"
- e,m1=NTRUEnc(h,dr1,dr2,dr3,m)
- #print "2"
- m=NTRUDec(fq,e)
- #print "3"
- if m==m1:
- l=l+1
- print "2005",l, "/1000"
- print "CZAS", datetime.now()-czas
- N=251
- p=2
- q=239
- df=4
- dg=4
- dr=4
- Z = PolynomialRing(ZZ, names = "x")
- xz = Z.gen()
- R = Z.quotient((xz^N-1),'x')
- Fp = PolynomialRing(GF(p),'x')
- xp = Fp.gen()
- Rp = Fp.quotient((xp^N-1),'x')
- Fq = PolynomialRing(GF(q),'x')
- xq = Fq.gen()
- Rq = Fq.quotient((xq^N-1),'x')
- def wielomianGen(df):
- f = [1 for i in range(df)]
- f.extend([0 for i in range(N-df)])
- shuffle(f)
- return f
- def ntruGen():
- while true:
- f1 = R(wielomianGen(df))
- f = 1+p*f1
- fq=Rq.lift(Rq(f))
- if(gcd(fq, xq^N-1)==1):
- break
- negfq = xgcd(fq, xq^N-1)[1]
- #
- g = Rq(wielomianGen(dg))
- h = (p*negfq*g)
- return fq, h
- def ntruEnc(h,m):
- r = R(wielomianGen(dr))
- return Rq(r*h+m)
- def ntruDec(e,fq):
- aq = Rq(e*fq)
- m = Rp(Rq.lift(aq))
- return m
- gut = 0
- czas = datetime.now()
- for i in range(1000):
- fq,h = ntruGen()
- e = ntruEnc(h,m)
- getm = ntruDec(e,fq)
- if(m==getm):
- gut = gut + 1
- print "2003",gut,"/1000"
- print "czas:",datetime.now() - czas
- ︡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