diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/lilliput_ae_2.py | 56 |
1 files changed, 21 insertions, 35 deletions
diff --git a/python/lilliput_ae_2.py b/python/lilliput_ae_2.py index 164c3df..720e1aa 100644 --- a/python/lilliput_ae_2.py +++ b/python/lilliput_ae_2.py @@ -13,20 +13,16 @@ from helpers import ( ) -BLOCK_BITS = 128 KEY_BITS = 128 TWEAK_BITS = 128 TWEAKEY_BITS = KEY_BITS + TWEAK_BITS LANE_BITS = 64 LANES = int((TWEAKEY_BITS) / LANE_BITS) -BLOCK_BYTES = int(BLOCK_BITS / 8) KEY_BYTES = int(KEY_BITS / 8) TWEAK_BYTES = int(TWEAK_BITS / 8) TWEAKEY_BYTES = int(TWEAKEY_BITS / 8) -M_BITS = BLOCK_BITS - def InitParameters(key_bits) : global KEY_BITS @@ -68,14 +64,14 @@ def LowPart(array, number_bits) : ################################################################################ -def TweakTag(j, padded = 0) : +def TweakTag(j, padded): tweak = [0 for byte in range(0, TWEAK_BYTES)] tweak[TWEAK_BYTES - 1] |= ((j >> 120) & 0xf) for byte in range(TWEAK_BYTES - 2, -1, -1) : tweak[byte] = (j >> (8 * byte)) & 0xff - if padded == 1 : + if padded: tweak[TWEAK_BYTES - 1] |= 0x40 return tweak @@ -103,22 +99,20 @@ def AddTagJ(tag, j) : def MesssageAuthTag(M, N, Auth, key) : - l = int(M_BITS / BLOCK_BITS) - if int(M_BITS % BLOCK_BITS) > 0 : - will_padd = 1 - else : - will_padd = 0 + l = len(M)//BLOCK_BYTES + padding_bytes = len(M)%BLOCK_BYTES tag = list(Auth) + M = ArrayToBlockbytesMatrix(M) for j in range(0, l) : - tweak = TweakTag(j, padded = 0) + tweak = TweakTag(j, False) encryption = ltbc.LilliputTBCEnc(tweak, key, M[j]) tag = XorState(tag, encryption) - if will_padd == 1 : - tweak = TweakTag(l, padded = 1) - m_padded = Padding10LSB(M[l], M_BITS % BLOCK_BITS) + if padding_bytes > 0 : + tweak = TweakTag(l, True) + m_padded = Padding10LSB(M[l], 8*padding_bytes) encryption = ltbc.LilliputTBCEnc(tweak, key, m_padded) tag = XorState(tag, encryption) @@ -130,25 +124,23 @@ def MesssageAuthTag(M, N, Auth, key) : def MessageEncryption(M, N, tag, key) : - l = int(M_BITS / BLOCK_BITS) - if int(M_BITS % BLOCK_BITS) > 0 : - will_padd = 1 - else : - will_padd = 0 + l = len(M)//BLOCK_BYTES + padding_bytes = len(M)%BLOCK_BYTES - C = [[0 for byte in range(0, 16)] for j in range(0, l + will_padd)] + M = ArrayToBlockbytesMatrix(M) + C = [] for j in range(0, l) : tweak = AddTagJ(tag, j) padded_nounce = list(N) + [0x00] encryption = ltbc.LilliputTBCEnc(tweak, key, padded_nounce) - C[j] = XorState(M[j], encryption) + C.append(XorState(M[j], encryption)) - if will_padd : + if padding_bytes > 0: tweak = AddTagJ(tag, l) padded_nounce = list(N) + [0x00] encryption = ltbc.LilliputTBCEnc(tweak, key, padded_nounce) - C[l] = XorState(M[l], encryption) + C.append(XorState(M[l], encryption)) return C @@ -156,10 +148,6 @@ def MessageEncryption(M, N, tag, key) : def SCT2Enc(A, M, N, key) : InitParameters(len(key)*8) - global M_BITS - M_BITS = len(M)*8 - - M = ArrayToBlockbytesMatrix(M) K = list(key) Auth = BuildAuth(TWEAK_BITS, A, K) @@ -172,15 +160,13 @@ def SCT2Enc(A, M, N, key) : def SCT2Dec(A, C, N, tag, key) : InitParameters(len(key)*8) - global M_BITS - M_BITS = len(C)*8 - - C = ArrayToBlockbytesMatrix(C) K = list(key) - M = MessageEncryption(C, N, tag, K) + M = BlockbytesMatrixToBytes( + MessageEncryption(C, N, tag, K) + ) Auth = BuildAuth(TWEAK_BITS, A, K) tag2 = MesssageAuthTag(M, N, Auth, K) - if(tag == tag2) : - return BlockbytesMatrixToBytes(M) + if tag == tag2: + return M |
