123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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
|