示例#1
0
 def cipher(self, pt, key):
     # Note: we assume fixed key here for huge speedup
     # TODO: make this an option
     #if self.ks is None:
     self.ks = [keyScheduleRounds(key, 0, r) for r in range(11)]
 
     ret = {}
     
     Nr = 10
     state = pt
     ret['Plaintext'] = self.flatten(state[:])
     
     ret['Key'] = self.flatten(self.ks[0])
     
     state = [state[i] ^ self.ks[0][i] for i in range(16)]
     ret['Round 0: AddRoundKey Output'] = self.flatten(state[:])
     
     for r in range(1, Nr):
         state = subbytes(state)
         ret['Round ' + str(r) + ': SubBytes Output'] = self.flatten(state[:])
         
         state = shiftrows(state)
         ret['Round ' + str(r) + ': ShiftRows Output'] = self.flatten(state[:])
         
         state = mixcolumns(state)
         ret['Round ' + str(r) + ': MixColumns Output'] = self.flatten(state[:])
     
         ret['Round ' + str(r) + ': RoundKey'] = self.flatten(self.ks[r])
     
         state = [state[i] ^ self.ks[r][i] for i in range(16)]
         ret['Round ' + str(r) + ': AddRoundKey Output'] = self.flatten(state[:])
     
     
     
     state = subbytes(state)
     ret['Round 10: SubBytes Output'] = self.flatten(state[:])
     
     state = shiftrows(state)
     ret['Round 10: ShiftRows Output'] = self.flatten(state[:])
     
     ret['Round 10: RoundKey'] = self.flatten(self.ks[Nr])
     
     state = [state[i] ^ self.ks[Nr][i] for i in range(16)]
     ret['Ciphertext'] = self.flatten(state[:])
     
     return ret
示例#2
0
 def cipher(self, pt, key):
     Nr = 14
     if self.ks is None:
         self.ks = [keyScheduleRounds(key, 0, r) for r in range(Nr+1)]
 
     ret = {}
     
     state = pt
     ret['Plaintext'] = self.flatten(state[:])
     
     ret['Key (bytes 0-15)']  = self.flatten(self.ks[0])
     ret['Key (bytes 16-31)'] = self.flatten(self.ks[1])
     
     state = [state[i] ^ self.ks[0][i] for i in range(16)]
     ret['Round 0: AddRoundKey Output'] = self.flatten(state[:])
     
     for r in range(1, Nr):
         state = subbytes(state)
         ret['Round ' + str(r) + ': SubBytes Output'] = self.flatten(state[:])
         
         state = shiftrows(state)
         ret['Round ' + str(r) + ': ShiftRows Output'] = self.flatten(state[:])
         
         state = mixcolumns(state)
         ret['Round ' + str(r) + ': MixColumns Output'] = self.flatten(state[:])
         
         state = [state[i] ^ self.ks[r][i] for i in range(16)]
         ret['Round ' + str(r) + ': AddRoundKey Output'] = self.flatten(state[:])
     
     
     state = subbytes(state)
     ret['Round 14: SubBytes Output'] = self.flatten(state[:])
     
     state = shiftrows(state)
     ret['Round 14: ShiftRows Output'] = self.flatten(state[:])
     
     state = [state[i] ^ self.ks[Nr][i] for i in range(16)]
     ret['Ciphertext'] = self.flatten(state[:])
     
     return ret
示例#3
0
 def mixcolumns(self, state):
     """Helper function: performs AES mixcols on all bytes of state"""
     return mixcolumns(state)
示例#4
0
 def mixcolumns(self, state):
     """Helper function: performs AES mixcols on all bytes of state"""
     return mixcolumns(state)