switch to BooleanPolynomialRing
This commit is contained in:
@@ -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):
|
def pretty_print(poly):
|
||||||
ring = poly.parent()
|
ring = poly.parent()
|
||||||
names = ring.variable_names()
|
|
||||||
|
|
||||||
R_terms = []
|
R_terms = []
|
||||||
r_terms = []
|
r_terms = []
|
||||||
x_terms = []
|
x_terms = []
|
||||||
mixed_terms = []
|
mixed_terms = []
|
||||||
has_const = False
|
|
||||||
|
|
||||||
for exp, coeff in poly.dict().items():
|
has_const = bool(poly.constant_coefficient())
|
||||||
if coeff == 0:
|
|
||||||
|
for monom in poly:
|
||||||
|
vars_in_term = [str(v) for v in monom.variables()]
|
||||||
|
|
||||||
|
if not vars_in_term:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if sum(exp) == 0:
|
term = "*".join(vars_in_term)
|
||||||
has_const = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
term = monomial_to_str(exp, names)
|
|
||||||
vars_in_term = [names[i] for i, e in enumerate(exp) if e != 0]
|
|
||||||
families = {v[0] for v in vars_in_term}
|
families = {v[0] for v in vars_in_term}
|
||||||
|
|
||||||
if families == {"R"}:
|
if families == {"R"}:
|
||||||
|
|||||||
@@ -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.constants import TEA3_SBOX, T_F1, T_F2
|
||||||
from tea3.pretty_print import pretty_print, pretty_print_vec
|
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)]
|
[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.v = self.S.gens()
|
||||||
|
|
||||||
self.x_bits = [list(self.v[i*8:(i+1)*8]) for i in range(5)]
|
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()
|
t = Tea3Model()
|
||||||
for i in range(3):
|
for i in range(4):
|
||||||
print("step "+str(i))
|
print("step "+str(i))
|
||||||
t.step()
|
t.step()
|
||||||
print(pretty_print_vec(t.R_bits[0]))
|
print(pretty_print(t.R_bits[0][0]))
|
||||||
|
|||||||
Reference in New Issue
Block a user