diff --git a/src/tea3/pretty_print.py b/src/tea3/pretty_print.py index 5fa6706..2959a13 100644 --- a/src/tea3/pretty_print.py +++ b/src/tea3/pretty_print.py @@ -1,38 +1,20 @@ -### print - -def monomial_to_str(exp, names): - factors = [] - for i, e in enumerate(exp): - if e == 0: - continue - name = names[i] - if e == 1: - factors.append(name) - else: - factors.append(f"{name}^{e}") - return "*".join(factors) if factors else "1" - - def pretty_print(poly): ring = poly.parent() - names = ring.variable_names() R_terms = [] r_terms = [] x_terms = [] mixed_terms = [] - has_const = False - for exp, coeff in poly.dict().items(): - if coeff == 0: + has_const = bool(poly.constant_coefficient()) + + for monom in poly: + vars_in_term = [str(v) for v in monom.variables()] + + if not vars_in_term: continue - if sum(exp) == 0: - has_const = True - continue - - term = monomial_to_str(exp, names) - vars_in_term = [names[i] for i, e in enumerate(exp) if e != 0] + term = "*".join(vars_in_term) families = {v[0] for v in vars_in_term} if families == {"R"}: diff --git a/src/tea3/tea3model.py b/src/tea3/tea3model.py index a1992e6..caca556 100644 --- a/src/tea3/tea3model.py +++ b/src/tea3/tea3model.py @@ -1,4 +1,4 @@ -from sage.all import GF, PolynomialRing +from sage.all import GF, BooleanPolynomialRing from tea3.constants import TEA3_SBOX, T_F1, T_F2 from tea3.pretty_print import pretty_print, pretty_print_vec @@ -14,7 +14,8 @@ class Tea3Model: [f"R{i}{j}" for i in range(8) for j in range(8)] ) - self.S = PolynomialRing(self.F, names) + name_string = ",".join(names) + self.S = BooleanPolynomialRing(len(names), name_string) self.v = self.S.gens() self.x_bits = [list(self.v[i*8:(i+1)*8]) for i in range(5)] @@ -99,7 +100,7 @@ def G32(X, Y): t = Tea3Model() -for i in range(3): +for i in range(4): print("step "+str(i)) t.step() - print(pretty_print_vec(t.R_bits[0])) + print(pretty_print(t.R_bits[0][0]))