@@ -139,10 +139,29 @@ final public class AES {
139139 t [ 2 ] = b [ 2 ] ^ rk [ r] [ 2 ]
140140 t [ 3 ] = b [ 3 ] ^ rk [ r] [ 3 ]
141141
142- b [ 0 ] = T0 [ Int ( t [ 0 ] & 0xFF ) ] ^ T1 [ Int ( ( t [ 1 ] >> 8 ) & 0xFF ) ] ^ T2 [ Int ( ( t [ 2 ] >> 16 ) & 0xFF ) ] ^ T3 [ Int ( t [ 3 ] >> 24 ) ]
143- b [ 1 ] = T0 [ Int ( t [ 1 ] & 0xFF ) ] ^ T1 [ Int ( ( t [ 2 ] >> 8 ) & 0xFF ) ] ^ T2 [ Int ( ( t [ 3 ] >> 16 ) & 0xFF ) ] ^ T3 [ Int ( t [ 0 ] >> 24 ) ]
144- b [ 2 ] = T0 [ Int ( t [ 2 ] & 0xFF ) ] ^ T1 [ Int ( ( t [ 3 ] >> 8 ) & 0xFF ) ] ^ T2 [ Int ( ( t [ 0 ] >> 16 ) & 0xFF ) ] ^ T3 [ Int ( t [ 1 ] >> 24 ) ]
145- b [ 3 ] = T0 [ Int ( t [ 3 ] & 0xFF ) ] ^ T1 [ Int ( ( t [ 0 ] >> 8 ) & 0xFF ) ] ^ T2 [ Int ( ( t [ 1 ] >> 16 ) & 0xFF ) ] ^ T3 [ Int ( t [ 2 ] >> 24 ) ]
142+ let lb00 = T0 [ Int ( t [ 0 ] & 0xFF ) ]
143+ let lb01 = T1 [ Int ( ( t [ 1 ] >> 8 ) & 0xFF ) ]
144+ let lb02 = T2 [ Int ( ( t [ 2 ] >> 16 ) & 0xFF ) ]
145+ let lb03 = T3 [ Int ( t [ 3 ] >> 24 ) ]
146+ b [ 0 ] = lb00 ^ lb01 ^ lb02 ^ lb03
147+
148+ let lb10 = T0 [ Int ( t [ 1 ] & 0xFF ) ]
149+ let lb11 = T1 [ Int ( ( t [ 2 ] >> 8 ) & 0xFF ) ]
150+ let lb12 = T2 [ Int ( ( t [ 3 ] >> 16 ) & 0xFF ) ]
151+ let lb13 = T3 [ Int ( t [ 0 ] >> 24 ) ]
152+ b [ 1 ] = lb10 ^ lb11 ^ lb12 ^ lb13
153+
154+ let lb20 = T0 [ Int ( t [ 2 ] & 0xFF ) ]
155+ let lb21 = T1 [ Int ( ( t [ 3 ] >> 8 ) & 0xFF ) ]
156+ let lb22 = T2 [ Int ( ( t [ 0 ] >> 16 ) & 0xFF ) ]
157+ let lb23 = T3 [ Int ( t [ 1 ] >> 24 ) ]
158+ b [ 2 ] = lb20 ^ lb21 ^ lb22 ^ lb23
159+
160+ let lb30 = T0 [ Int ( t [ 3 ] & 0xFF ) ]
161+ let lb31 = T1 [ Int ( ( t [ 0 ] >> 8 ) & 0xFF ) ]
162+ let lb32 = T2 [ Int ( ( t [ 1 ] >> 16 ) & 0xFF ) ]
163+ let lb33 = T3 [ Int ( t [ 2 ] >> 24 ) ]
164+ b [ 3 ] = lb30 ^ lb31 ^ lb32 ^ lb33
146165 }
147166
148167 // last round
@@ -206,10 +225,29 @@ final public class AES {
206225 t [ 2 ] = b [ 2 ] ^ rk [ r] [ 2 ]
207226 t [ 3 ] = b [ 3 ] ^ rk [ r] [ 3 ]
208227
209- b [ 0 ] = T0_INV [ Int ( t [ 0 ] & 0xFF ) ] ^ T1_INV [ Int ( ( t [ 3 ] >> 8 ) & 0xFF ) ] ^ T2_INV [ Int ( ( t [ 2 ] >> 16 ) & 0xFF ) ] ^ T3_INV [ Int ( t [ 1 ] >> 24 ) ]
210- b [ 1 ] = T0_INV [ Int ( t [ 1 ] & 0xFF ) ] ^ T1_INV [ Int ( ( t [ 0 ] >> 8 ) & 0xFF ) ] ^ T2_INV [ Int ( ( t [ 3 ] >> 16 ) & 0xFF ) ] ^ T3_INV [ Int ( t [ 2 ] >> 24 ) ]
211- b [ 2 ] = T0_INV [ Int ( t [ 2 ] & 0xFF ) ] ^ T1_INV [ Int ( ( t [ 1 ] >> 8 ) & 0xFF ) ] ^ T2_INV [ Int ( ( t [ 0 ] >> 16 ) & 0xFF ) ] ^ T3_INV [ Int ( t [ 3 ] >> 24 ) ]
212- b [ 3 ] = T0_INV [ Int ( t [ 3 ] & 0xFF ) ] ^ T1_INV [ Int ( ( t [ 2 ] >> 8 ) & 0xFF ) ] ^ T2_INV [ Int ( ( t [ 1 ] >> 16 ) & 0xFF ) ] ^ T3_INV [ Int ( t [ 0 ] >> 24 ) ]
228+ let b00 = T0_INV [ Int ( t [ 0 ] & 0xFF ) ]
229+ let b01 = T1_INV [ Int ( ( t [ 3 ] >> 8 ) & 0xFF ) ]
230+ let b02 = T2_INV [ Int ( ( t [ 2 ] >> 16 ) & 0xFF ) ]
231+ let b03 = T3_INV [ Int ( t [ 1 ] >> 24 ) ]
232+ b [ 0 ] = b00 ^ b01 ^ b02 ^ b03
233+
234+ let b10 = T0_INV [ Int ( t [ 1 ] & 0xFF ) ]
235+ let b11 = T1_INV [ Int ( ( t [ 0 ] >> 8 ) & 0xFF ) ]
236+ let b12 = T2_INV [ Int ( ( t [ 3 ] >> 16 ) & 0xFF ) ]
237+ let b13 = T3_INV [ Int ( t [ 2 ] >> 24 ) ]
238+ b [ 1 ] = b10 ^ b11 ^ b12 ^ b13
239+
240+ let b20 = T0_INV [ Int ( t [ 2 ] & 0xFF ) ]
241+ let b21 = T1_INV [ Int ( ( t [ 1 ] >> 8 ) & 0xFF ) ]
242+ let b22 = T2_INV [ Int ( ( t [ 0 ] >> 16 ) & 0xFF ) ]
243+ let b23 = T3_INV [ Int ( t [ 3 ] >> 24 ) ]
244+ b [ 2 ] = b20 ^ b21 ^ b22 ^ b23
245+
246+ let b30 = T0_INV [ Int ( t [ 3 ] & 0xFF ) ]
247+ let b31 = T1_INV [ Int ( ( t [ 2 ] >> 8 ) & 0xFF ) ]
248+ let b32 = T2_INV [ Int ( ( t [ 1 ] >> 16 ) & 0xFF ) ]
249+ let b33 = T3_INV [ Int ( t [ 0 ] >> 24 ) ]
250+ b [ 3 ] = b30 ^ b31 ^ b32 ^ b33
213251 }
214252
215253 // last round
@@ -219,10 +257,30 @@ final public class AES {
219257 t [ 3 ] = b [ 3 ] ^ rk [ 1 ] [ 3 ]
220258
221259 // rounds
222- b [ 0 ] = sBoxInv [ Int ( B0 ( t [ 0 ] ) ) ] | ( sBoxInv [ Int ( B1 ( t [ 3 ] ) ) ] << 8 ) | ( sBoxInv [ Int ( B2 ( t [ 2 ] ) ) ] << 16 ) | ( sBoxInv [ Int ( B3 ( t [ 1 ] ) ) ] << 24 ) ^ rk [ 0 ] [ 0 ]
223- b [ 1 ] = sBoxInv [ Int ( B0 ( t [ 1 ] ) ) ] | ( sBoxInv [ Int ( B1 ( t [ 0 ] ) ) ] << 8 ) | ( sBoxInv [ Int ( B2 ( t [ 3 ] ) ) ] << 16 ) | ( sBoxInv [ Int ( B3 ( t [ 2 ] ) ) ] << 24 ) ^ rk [ 0 ] [ 1 ]
224- b [ 2 ] = sBoxInv [ Int ( B0 ( t [ 2 ] ) ) ] | ( sBoxInv [ Int ( B1 ( t [ 1 ] ) ) ] << 8 ) | ( sBoxInv [ Int ( B2 ( t [ 0 ] ) ) ] << 16 ) | ( sBoxInv [ Int ( B3 ( t [ 3 ] ) ) ] << 24 ) ^ rk [ 0 ] [ 2 ]
225- b [ 3 ] = sBoxInv [ Int ( B0 ( t [ 3 ] ) ) ] | ( sBoxInv [ Int ( B1 ( t [ 2 ] ) ) ] << 8 ) | ( sBoxInv [ Int ( B2 ( t [ 1 ] ) ) ] << 16 ) | ( sBoxInv [ Int ( B3 ( t [ 0 ] ) ) ] << 24 ) ^ rk [ 0 ] [ 3 ]
260+
261+ let lb00 = sBoxInv [ Int ( B0 ( t [ 0 ] ) ) ]
262+ let lb01 = ( sBoxInv [ Int ( B1 ( t [ 3 ] ) ) ] << 8 )
263+ let lb02 = ( sBoxInv [ Int ( B2 ( t [ 2 ] ) ) ] << 16 )
264+ let lb03 = ( sBoxInv [ Int ( B3 ( t [ 1 ] ) ) ] << 24 )
265+ b [ 0 ] = lb00 | lb01 | lb02 | lb03 ^ rk [ 0 ] [ 0 ]
266+
267+ let lb10 = sBoxInv [ Int ( B0 ( t [ 1 ] ) ) ]
268+ let lb11 = ( sBoxInv [ Int ( B1 ( t [ 0 ] ) ) ] << 8 )
269+ let lb12 = ( sBoxInv [ Int ( B2 ( t [ 3 ] ) ) ] << 16 )
270+ let lb13 = ( sBoxInv [ Int ( B3 ( t [ 2 ] ) ) ] << 24 )
271+ b [ 1 ] = lb10 | lb11 | lb12 | lb13 ^ rk [ 0 ] [ 1 ]
272+
273+ let lb20 = sBoxInv [ Int ( B0 ( t [ 2 ] ) ) ]
274+ let lb21 = ( sBoxInv [ Int ( B1 ( t [ 1 ] ) ) ] << 8 )
275+ let lb22 = ( sBoxInv [ Int ( B2 ( t [ 0 ] ) ) ] << 16 )
276+ let lb23 = ( sBoxInv [ Int ( B3 ( t [ 3 ] ) ) ] << 24 )
277+ b [ 2 ] = lb20 | lb21 | lb22 | lb23 ^ rk [ 0 ] [ 2 ]
278+
279+ let lb30 = sBoxInv [ Int ( B0 ( t [ 3 ] ) ) ]
280+ let lb31 = ( sBoxInv [ Int ( B1 ( t [ 2 ] ) ) ] << 8 )
281+ let lb32 = ( sBoxInv [ Int ( B2 ( t [ 1 ] ) ) ] << 16 )
282+ let lb33 = ( sBoxInv [ Int ( B3 ( t [ 0 ] ) ) ] << 24 )
283+ b [ 3 ] = lb30 | lb31 | lb32 | lb33 ^ rk [ 0 ] [ 3 ]
226284
227285 var out = [ UInt8] ( )
228286 out. reserveCapacity ( b. count * 4 )
0 commit comments