|
@@ -1,60 +0,0 @@
|
|
|
-
|
|
|
-
|
|
|
-block_size = 64
|
|
|
-word_size = block_size >> 1 # 32
|
|
|
-key_size = 128
|
|
|
-key = 0xe3cda8f459e1f0cf
|
|
|
-alpha_shift = 8
|
|
|
-beta_shift = 3
|
|
|
-mod_mask = (2 ** word_size) - 1
|
|
|
-
|
|
|
-def simpleSpeck(plaintext):
|
|
|
- right_key = key & mod_mask
|
|
|
- right_plain = plaintext & mod_mask
|
|
|
- left_plain = (plaintext >> word_size) & mod_mask
|
|
|
-
|
|
|
- # Run Encryption Steps For Appropriate Number of Rounds
|
|
|
-
|
|
|
- rs_x = ((left_plain << (word_size - alpha_shift)) + (right_plain >> alpha_shift)) & mod_mask
|
|
|
-
|
|
|
- add_sxy = (rs_x + right_plain) & mod_mask
|
|
|
-
|
|
|
- x = right_key ^ add_sxy
|
|
|
-
|
|
|
- return x
|
|
|
-
|
|
|
-def hw_model(key_guess, plaintext):
|
|
|
- right_key = key_guess & mod_mask
|
|
|
- right_plain = plaintext & mod_mask
|
|
|
- left_plain = (plaintext >> word_size) & mod_mask
|
|
|
-
|
|
|
- # Run Encryption Steps For Appropriate Number of Rounds
|
|
|
-
|
|
|
- rs_x = ((left_plain << (word_size - alpha_shift)) + (right_plain >> alpha_shift)) & mod_mask
|
|
|
-
|
|
|
- add_sxy = (rs_x + right_plain) & mod_mask
|
|
|
-
|
|
|
- x = right_key ^ add_sxy
|
|
|
-
|
|
|
- return x
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-def encrypt_function(self, upper_word, lower_word):
|
|
|
-
|
|
|
- x = upper_word
|
|
|
- y = lower_word
|
|
|
-
|
|
|
- # Run Encryption Steps For Appropriate Number of Rounds
|
|
|
- for k in self.key_schedule:
|
|
|
- rs_x = ((x << (self.word_size - self.alpha_shift)) + (x >> self.alpha_shift)) & self.mod_mask
|
|
|
-
|
|
|
- add_sxy = (rs_x + y) & self.mod_mask
|
|
|
-
|
|
|
- x = k ^ add_sxy
|
|
|
-
|
|
|
- ls_y = ((y >> (self.word_size - self.beta_shift)) + (y << self.beta_shift)) & self.mod_mask
|
|
|
-
|
|
|
- y = x ^ ls_y
|
|
|
-
|
|
|
- return x,y
|