diff --git a/src/tea3/constants.py b/src/tea3/constants.py index bf4d9e3..1d797d6 100644 --- a/src/tea3/constants.py +++ b/src/tea3/constants.py @@ -24,3 +24,27 @@ TEA3_LUT_A = [ TEA3_LUT_B = [ 0x9D58, 0xA46D, 0x176C, 0x79C4, 0xC62B, 0xB2C9, 0x4D93, 0x2E93 ] + +# ETSI TS 104 053-1 Figure 17 +T_F1 = [ + [1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0], # S1 + [1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0], # S2 + [1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1], # S3 + [1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1], # S4 + [0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], # S5 + [0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0], # S6 + [1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1], # S7 + [0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1], # S8 +] + +# ETSI TS 104 053-1 Figure 18 +T_F2 = [ + [1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0], # S1 + [0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0], # S2 + [0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0], # S3 + [0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0], # S4 + [0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0], # S5 + [0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1], # S6 + [1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1], # S7 + [1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1], # S8 +] diff --git a/src/tea3/tea3model.py b/src/tea3/tea3model.py new file mode 100644 index 0000000..95d86f8 --- /dev/null +++ b/src/tea3/tea3model.py @@ -0,0 +1,17 @@ +from sage.all import * + +F = GF(2) + +names = ( + [f"x{i}{j}" for i in range(5) for j in range(8)] + + [f"r{i}{j}" for i in range(5) for j in range(8)] + + [f"R{i}{j}" for i in range(8) for j in range(8)] +) + +S = PolynomialRing(F, names) +v = S.gens() + +x_bits = [list(v[i*8:(i+1)*8]) for i in range(5)] +r_bits = [list(v[40 + i*8 : 40 + (i+1)*8]) for i in range(5)] +R_bits = [list(v[80 + i*8 : 80 + (i+1)*8]) for i in range(8)] +