summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/lilliput_tbc.py25
-rw-r--r--python/multiplications.py23
2 files changed, 21 insertions, 27 deletions
diff --git a/python/lilliput_tbc.py b/python/lilliput_tbc.py
index 0dbfb31..fbd1fb3 100644
--- a/python/lilliput_tbc.py
+++ b/python/lilliput_tbc.py
@@ -2,14 +2,8 @@
Lilliput TBC
"""
from constants import BLOCK_BYTES, Sbox
-import multiplications
+from multiplications import ALPHAS
-MultiplyM = multiplications.MultiplyM
-MultiplyM2 = multiplications.MultiplyM2
-MultiplyM3 = multiplications.MultiplyM3
-MultiplyMR = multiplications.MultiplyMR
-MultiplyMR2 = multiplications.MultiplyMR2
-MultiplyMR3 = multiplications.MultiplyMR3
permutation = [14, 11, 12, 10, 8, 9, 13, 15, 3, 1, 4, 5, 6, 0, 2, 7]
permutationInv = [13, 9, 14, 8, 10, 11, 12, 15, 4, 5, 3, 1, 2, 6 ,0 ,7]
@@ -27,22 +21,11 @@ def _lane(TK, j):
def RoundTweakeySchedule(tweakey) :
p = len(tweakey)//8
- # Multiplication
- alphas = (
- list, # Identity.
- MultiplyM,
- MultiplyM2,
- MultiplyM3,
- MultiplyMR,
- MultiplyMR2,
- MultiplyMR3
+ multiplied_lanes = (
+ ALPHAS[j](_lane(tweakey, j)) for j in range(p)
)
- return [
- byte
- for j in range(p)
- for byte in alphas[j](_lane(tweakey, j))
- ]
+ return [byte for lane in multiplied_lanes for byte in lane]
def SubTweakeyExtract(tweakey, Ci):
diff --git a/python/multiplications.py b/python/multiplications.py
index e753c68..7babd50 100644
--- a/python/multiplications.py
+++ b/python/multiplications.py
@@ -1,6 +1,6 @@
# Multiply by matrix M
-def MultiplyM(lane) :
+def _multiplyM(lane) :
multiplied_lane = [lane[(byte-1) % 8] for byte in range(0, 8)]
multiplied_lane[2] ^= ((lane[6] << 2) & 0xff)
@@ -9,7 +9,7 @@ def MultiplyM(lane) :
return multiplied_lane
-def MultiplyM2(lane) :
+def _multiplyM2(lane) :
multiplied_lane = [lane[(byte-2) % 8] for byte in range(0, 8)]
multiplied_lane[2] ^= ((lane[5] << 2) & 0xff)
@@ -35,7 +35,7 @@ def MultiplyM2(lane) :
return multiplied_lane
-def MultiplyM3(lane) :
+def _multiplyM3(lane) :
multiplied_lane = [lane[(byte-3) % 8] for byte in range(0, 8)]
multiplied_lane[2] ^= ((lane[4] << 2) & 0xff) ^ ((lane[5] << 5) & 0xff)
@@ -86,7 +86,7 @@ def MultiplyM3(lane) :
return multiplied_lane
-def MultiplyMR(lane) :
+def _multiplyMR(lane) :
multiplied_lane = [lane[(byte+1) % 8] for byte in range(0, 8)]
multiplied_lane[2] ^= ((lane[4] >> 3) & 0xff)
@@ -96,7 +96,7 @@ def MultiplyMR(lane) :
return multiplied_lane
-def MultiplyMR2(lane) :
+def _multiplyMR2(lane) :
multiplied_lane = [lane[(byte+2) % 8] for byte in range(0, 8)]
multiplied_lane[1] ^= ((lane[4] >> 3) & 0xff)
@@ -120,7 +120,7 @@ def MultiplyMR2(lane) :
return multiplied_lane
-def MultiplyMR3(lane) :
+def _multiplyMR3(lane) :
multiplied_lane = [lane[(byte+3) % 8] for byte in range(0, 8)]
multiplied_lane[0] ^= ((lane[4] >> 3) & 0xff)
@@ -173,3 +173,14 @@ def MultiplyMR3(lane) :
multiplied_lane[2] ^= multi_mat_l3_m4 ^ multi_mat_l6_m1 ^ multi_mat_l7_m3
return multiplied_lane
+
+
+ALPHAS = (
+ list, # Identity.
+ _multiplyM,
+ _multiplyM2,
+ _multiplyM3,
+ _multiplyMR,
+ _multiplyMR2,
+ _multiplyMR3
+)