use F31 F32

This commit is contained in:
2026-04-20 16:06:24 +02:00
parent 501aa1043c
commit 4686153a66
+26 -25
View File
@@ -48,12 +48,12 @@ class Tea3Model:
# update R registers # update R registers
self.R_bits[7] = R6 self.R_bits[7] = R6
self.R_bits[6] = R5 self.R_bits[6] = R5
self.R_bits[5] = xor_vec(R4, G31(R6, R5)) self.R_bits[5] = xor_vec(R4, F31(R6, R5))
self.R_bits[4] = R3 self.R_bits[4] = R3
self.R_bits[3] = R2 self.R_bits[3] = R2
self.R_bits[2] = R1 self.R_bits[2] = R1
self.R_bits[1] = R0 self.R_bits[1] = R0
self.R_bits[0] = xor_vec(x0, xor_vec(R7, xor_vec(BP(R4), G32(R2, R1)))) self.R_bits[0] = xor_vec(x0, xor_vec(R7, xor_vec(BP(R4), F32(R2, R1))))
return R7 return R7
@@ -67,40 +67,41 @@ def xor_vec(a, b):
def BP(r): def BP(r):
return [r[2], r[7], r[3], r[5], r[6], r[1], r[0], r[4]] return [r[2], r[7], r[3], r[5], r[6], r[1], r[0], r[4]]
def G31(X, Y): def F31(X, Y):
x3,x4,x5,x6,x7,x0,x1,x2 = X x0, x1, x2, x3, x4, x5, x6, x7 = X
y3,y4,y5,y6,y7,y0,y1,y2 = Y y0, y1, y2, y3, y4, y5, y6, y7 = Y
return [ return [
x1 + y0 + x0*y0 + y1 + x0*y1 + x0*x1*y1 + y0*y1 + x0*y0*y1 + x1*y0*y1, x5*x6*y5 + x5*x6 + x5*y5*y6 + x5*y5 + x5*y6 + x6*y5*y6 + y5*y6 + y5 + y6,
1 + y1 + y2 + x1*y2 + x2*y2 + y1*y2 + x1*y1*y2, x6*x7*y6 + x6*x7 + x6*y6*y7 + x6*y7 + x6 + x7*y6 + x7*y7 + y6*y7 + y6 + y7 + 1,
x2 + x3 + x2*y2 + x3*y2 + y3 + x3*y3 + x3*y2*y3, x0*x7*y0 + x0*y0*y7 + x0*y0 + x0 + x7*y7 + y0,
x4*y3 + y4 + x3*y3*y4 + x4*y3*y4, x0*x1*y0 + x0*x1*y1 + x0*x1 + x0*y0*y1 + x0*y1 + x1*y0*y1 + x1 + y1,
1 + y4 + x4*y4 + x5*y4 + y5 + y4*y5 + x5*y4*y5, x1*x2*y2 + x1*x2 + x1*y1 + x1*y2 + x2*y1*y2 + x2*y1 + x2 + y1*y2 + y1 + y2 + 1,
1 + x5 + x6 + y5 + x5*y5 + x6*y5 + y6 + x6*y6 + x6*y5*y6, x2*x3*y3 + x2*y2 + x2 + x3*y2*y3 + x3*y3 + x3 + y2 + y3 + 1,
1 + x6 + x6*y6 + x7*y7 + y6*y7 + x7*y6*y7, x3*x4*y4 + x3*y3 + x3*y4 + x4*y3*y4 + x4*y4 + x4 + y3*y4 + 1,
1 + x7 + y0 + x0*y7 + x7*y7 + x0*x7*y7 + x0*y0*y7 + x7*y0*y7, x4*x5*y5 + x4*y4*y5 + x4*y4 + x4*y5 + x5*y4*y5 + x5 + y5 + 1,
] ]
def G32(X, Y):
x3,x4,x5,x6,x7,x0,x1,x2 = X def F32(X, Y):
y3,y4,y5,y6,y7,y0,y1,y2 = Y x0, x1, x2, x3, x4, x5, x6, x7 = X
y0, y1, y2, y3, y4, y5, y6, y7 = Y
return [ return [
1 + x1 + x0*x1 + y0 + x0*y0 + x1*y0 + y1 + x0*x1*y1 + x0*y0*y1 + x1*y0*y1, x5*x6*y5 + x5*x6 + x5*y5*y6 + x5*y5 + x5*y6 + x6*y5*y6 + y5 + y6 + 1,
1 + y1 + x2*y2 + x1*y1*y2, x6*x7*y6 + x6*x7 + x6*y6*y7 + x6*y7 + x6 + x7*y7 + x7 + y6 + 1,
x3 + x3*y2 + y3 + x2*y3 + x3*y3 + x2*y2*y3 + x3*y2*y3, x0*x7*y0 + x0*x7*y7 + x0*y0*y7 + x0*y0 + x0 + x7*y0*y7 + y0,
x4*y3 + y4 + y3*y4 + x3*y3*y4 + x4*y3*y4, x0*x1*y0 + x0*x1*y1 + x0*y0*y1 + x1*y0*y1 + x1*y0 + x1 + y0*y1 + y1,
x4*y4 + y5 + y4*y5 + x4*y4*y5 + x5*y4*y5, x1*x2*y1 + x1*x2*y2 + x1*x2 + x1*y1*y2 + x1*y1 + x1 + x2*y1*y2 + x2 + y1*y2 + y2,
x5 + x6 + x5*y5 + x6*y5 + y6 + x6*y6 + x6*y5*y6, x2*x3*y3 + x2*y2 + x3*y2*y3 + x3*y3 + x3 + y3,
y6 + x6*y6 + x7*y6 + y7 + y6*y7 + x7*y6*y7, x3*x4*y4 + x3*x4 + x3*y3 + x3*y4 + x4*y3*y4 + x4*y3 + x4 + y3*y4 + y3 + y4,
x0*x7 + y0 + x7*y0 + y7 + x0*y7 + x7*y7 + x0*x7*y7 + x0*y0*y7 + x7*y0*y7, x4*x5*y5 + x4*y4*y5 + x4*y4 + x5*y4*y5 + x5 + y4 + y5 + 1,
] ]
t = Tea3Model() t = Tea3Model()
for i in range(4): for i in range(6):
print("step "+str(i)) print("step "+str(i))
t.step() t.step()
print(pretty_print(t.R_bits[0][0])) print(pretty_print(t.R_bits[0][0]))