Advertisement
Guest User

przybyslawski

a guest
Jan 17th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. import random
  2. N=11
  3. p=3
  4. q=31
  5. d=2
  6. FP=GF(p)
  7. FQ=GF(q)
  8. RP.<u>=PolynomialRing(FP)
  9. RQ.<v>=PolynomialRing(FQ)
  10. FP.<z>=RP.quotient(u^N-1)
  11. FQ.<y>=RQ.quotient(v^N-1)
  12. FZ.<x>=PolynomialRing(ZZ)
  13. FZ.<x>=PolynomialRing(ZZ)
  14. FX.<x>=FZ.quotient(x^N-1)
  15.  
  16.  
  17. def wielomian_trinarny(d1,d2,N):
  18. lp=[i for i in range(N)]
  19. p=[0 for i in range(N)]
  20. ld1=0
  21. ld2=0
  22. while(d1!=ld1):
  23. tmp1=random.choice(lp)
  24. element=p[tmp1]
  25. if element!=1 and element!=-1:
  26. p[tmp1] =1
  27. ld1=ld1+1
  28. while(d2!=ld2):
  29. tmp2=random.choice(lp)
  30. element=p[tmp2]
  31. if element!=1 and element!=-1:
  32. p[tmp2] =-1
  33. ld2=ld2+1
  34. return p
  35. def funkcja(f,q):
  36. Z=len(list(f))
  37. f=list(f)
  38. a=q/2
  39. for i in range(Z):
  40. if f[i]>floor(a): f[i]=f[i]-q
  41. elif f[i]<ceil(-a): f[i]=f[i]+q
  42. else: f[i]=f[i]
  43. return f
  44. def encrypt(M,h):
  45. m=FQ(M)
  46. lr=wielomian_trinarny(d,d,N)
  47. R=FQ(lr)
  48. c=p*R*h+m
  49. c=FQ(list(c))
  50. return c
  51. def decrypt(lf,c,odfp):
  52. a=FX(lf)*FX(list(c))
  53. a=FQ(list(a))
  54. a=FX(list(a))
  55. b=FP(funkcja(a,q))
  56. odfp=FP(list(odfp))
  57. b1=b*odfp
  58. dm=funkcja(b1,p)
  59. dm=FQ(list(dm))
  60. return dm
  61. def main(N,p,q,d):
  62.  
  63. lg=wielomian_trinarny(d,d,N)
  64. flag=1
  65. while flag==1:
  66. flag=0
  67. lf=wielomian_trinarny(d+1,d,N)
  68. fp=FP(lf)
  69. fq=FQ(lf)
  70. try:
  71. odfp=fp^(-1)
  72. except ZeroDivisionError:
  73. flag=1
  74. try:
  75. odfq=fq^(-1)
  76. except ZeroDivisionError:
  77. flag=1
  78. lg=FQ(lg)
  79. h=odfq*lg
  80. M=wielomian_trinarny(N,0,N)
  81. #print M
  82. m=FQ(M)
  83. print "Wiadomosc:",m
  84. c=encrypt(M,h)
  85. print "Zaszyfrowana:",c
  86. dm=decrypt(lf,c,odfp)
  87. print "Odszyfrowana wiadomosc:",dm
  88. return m==dm
  89. print main(N,p,q,d)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement