from fpylll import * from fpylll.algorithms.bkz2 import BKZReduction as BKZ2 FPLLL.set_precision( 100 ) def str_to_ternary(s, max_len=128): #кодированиие буквенного сообщения l = [] for c in s: n = ord(c)%3**5 for i in range(5): l.append( n%3-1 ) n = n//3 assert len(l) < max_len, "Too long message!" if len(l) = ZZ[] T = Zx.change_ring(Integers(p)).quotient(modulo) return Zx(lift(1 / T(f))) def encrypt( modulo,h,q,msg ): print("mod", modulo) N=int( modulo.degree(x) ) num = str_to_ternary(msg, max_len=N) msg = ZZ[x](num) print("Message:",msg) r=gen_g(x,d,N) enc=balancedmod(convolution(h,r) + msg,q) print("Cyphertext:",enc) return enc def decrypt( modulo, f, q, p, enc ): a = balancedmod(convolution(enc,f),q) m=balancedmod(convolution(a,fp),p) return m