@@ -133,70 +133,70 @@ fileprivate extension AES {
133133 func encrypt( block: Array < UInt8 > ) -> Array < UInt8 > ? {
134134
135135 if blockMode. options. contains ( . PaddingRequired) && block. count != AES . blockSize {
136- return block
136+ return Array ( block)
137137 }
138138
139139 let rounds = self . variant. Nr
140140 let rk = self . expandedKey
141- var b = block [ block. indices] . toUInt32Array ( )
141+
142+ var b0 = UInt32 ( block [ block. startIndex + 0 + ( 0 << 2 ) ] ) << 0 | UInt32 ( block [ block. startIndex + 1 + ( 0 << 2 ) ] ) << 8 | UInt32 ( block [ block. startIndex + 2 + ( 0 << 2 ) ] ) << 16 | UInt32 ( block [ block. startIndex + 3 + ( 0 << 2 ) ] ) << 24
143+ var b1 = UInt32 ( block [ block. startIndex + 0 + ( 1 << 2 ) ] ) << 0 | UInt32 ( block [ block. startIndex + 1 + ( 1 << 2 ) ] ) << 8 | UInt32 ( block [ block. startIndex + 2 + ( 1 << 2 ) ] ) << 16 | UInt32 ( block [ block. startIndex + 3 + ( 1 << 2 ) ] ) << 24
144+ var b2 = UInt32 ( block [ block. startIndex + 0 + ( 2 << 2 ) ] ) << 0 | UInt32 ( block [ block. startIndex + 1 + ( 2 << 2 ) ] ) << 8 | UInt32 ( block [ block. startIndex + 2 + ( 2 << 2 ) ] ) << 16 | UInt32 ( block [ block. startIndex + 3 + ( 2 << 2 ) ] ) << 24
145+ var b3 = UInt32 ( block [ block. startIndex + 0 + ( 3 << 2 ) ] ) << 0 | UInt32 ( block [ block. startIndex + 1 + ( 3 << 2 ) ] ) << 8 | UInt32 ( block [ block. startIndex + 2 + ( 3 << 2 ) ] ) << 16 | UInt32 ( block [ block. startIndex + 3 + ( 3 << 2 ) ] ) << 24
142146
143147 var t = Array < UInt32 > ( repeating: 0 , count: 4 )
144148
145149 for r in 0 ..< rounds - 1 {
146- t [ 0 ] = b [ 0 ] ^ rk [ r] [ 0 ]
147- t [ 1 ] = b [ 1 ] ^ rk [ r] [ 1 ]
148- t [ 2 ] = b [ 2 ] ^ rk [ r] [ 2 ]
149- t [ 3 ] = b [ 3 ] ^ rk [ r] [ 3 ]
150+ t [ 0 ] = b0 ^ rk [ r] [ 0 ]
151+ t [ 1 ] = b1 ^ rk [ r] [ 1 ]
152+ t [ 2 ] = b2 ^ rk [ r] [ 2 ]
153+ t [ 3 ] = b3 ^ rk [ r] [ 3 ]
150154
151155 let lb00 = T0 [ Int ( t [ 0 ] & 0xFF ) ]
152156 let lb01 = T1 [ Int ( ( t [ 1 ] >> 8 ) & 0xFF ) ]
153157 let lb02 = T2 [ Int ( ( t [ 2 ] >> 16 ) & 0xFF ) ]
154158 let lb03 = T3 [ Int ( t [ 3 ] >> 24 ) ]
155- b [ 0 ] = lb00 ^ lb01 ^ lb02 ^ lb03
159+ b0 = lb00 ^ lb01 ^ lb02 ^ lb03
156160
157161 let lb10 = T0 [ Int ( t [ 1 ] & 0xFF ) ]
158162 let lb11 = T1 [ Int ( ( t [ 2 ] >> 8 ) & 0xFF ) ]
159163 let lb12 = T2 [ Int ( ( t [ 3 ] >> 16 ) & 0xFF ) ]
160164 let lb13 = T3 [ Int ( t [ 0 ] >> 24 ) ]
161- b [ 1 ] = lb10 ^ lb11 ^ lb12 ^ lb13
165+ b1 = lb10 ^ lb11 ^ lb12 ^ lb13
162166
163167 let lb20 = T0 [ Int ( t [ 2 ] & 0xFF ) ]
164168 let lb21 = T1 [ Int ( ( t [ 3 ] >> 8 ) & 0xFF ) ]
165169 let lb22 = T2 [ Int ( ( t [ 0 ] >> 16 ) & 0xFF ) ]
166170 let lb23 = T3 [ Int ( t [ 1 ] >> 24 ) ]
167- b [ 2 ] = lb20 ^ lb21 ^ lb22 ^ lb23
171+ b2 = lb20 ^ lb21 ^ lb22 ^ lb23
168172
169173 let lb30 = T0 [ Int ( t [ 3 ] & 0xFF ) ]
170174 let lb31 = T1 [ Int ( ( t [ 0 ] >> 8 ) & 0xFF ) ]
171175 let lb32 = T2 [ Int ( ( t [ 1 ] >> 16 ) & 0xFF ) ]
172176 let lb33 = T3 [ Int ( t [ 2 ] >> 24 ) ]
173- b [ 3 ] = lb30 ^ lb31 ^ lb32 ^ lb33
177+ b3 = lb30 ^ lb31 ^ lb32 ^ lb33
174178 }
175179
176180 // last round
177181 let r = rounds - 1
178182
179- t [ 0 ] = b [ 0 ] ^ rk [ r] [ 0 ]
180- t [ 1 ] = b [ 1 ] ^ rk [ r] [ 1 ]
181- t [ 2 ] = b [ 2 ] ^ rk [ r] [ 2 ]
182- t [ 3 ] = b [ 3 ] ^ rk [ r] [ 3 ]
183+ t [ 0 ] = b0 ^ rk [ r] [ 0 ]
184+ t [ 1 ] = b1 ^ rk [ r] [ 1 ]
185+ t [ 2 ] = b2 ^ rk [ r] [ 2 ]
186+ t [ 3 ] = b3 ^ rk [ r] [ 3 ]
183187
184188 // rounds
185- b [ 0 ] = F1 ( t [ 0 ] , t [ 1 ] , t [ 2 ] , t [ 3 ] ) ^ rk [ rounds] [ 0 ]
186- b [ 1 ] = F1 ( t [ 1 ] , t [ 2 ] , t [ 3 ] , t [ 0 ] ) ^ rk [ rounds] [ 1 ]
187- b [ 2 ] = F1 ( t [ 2 ] , t [ 3 ] , t [ 0 ] , t [ 1 ] ) ^ rk [ rounds] [ 2 ]
188- b [ 3 ] = F1 ( t [ 3 ] , t [ 0 ] , t [ 1 ] , t [ 2 ] ) ^ rk [ rounds] [ 3 ]
189-
190- var out = Array < UInt8 > ( )
191- out. reserveCapacity ( b. count * 4 )
192- for num in b {
193- out. append ( UInt8 ( num & 0xFF ) )
194- out. append ( UInt8 ( ( num >> 8 ) & 0xFF ) )
195- out. append ( UInt8 ( ( num >> 16 ) & 0xFF ) )
196- out. append ( UInt8 ( ( num >> 24 ) & 0xFF ) )
197- }
198-
199- return out
189+ b0 = F1 ( t [ 0 ] , t [ 1 ] , t [ 2 ] , t [ 3 ] ) ^ rk [ rounds] [ 0 ]
190+ b1 = F1 ( t [ 1 ] , t [ 2 ] , t [ 3 ] , t [ 0 ] ) ^ rk [ rounds] [ 1 ]
191+ b2 = F1 ( t [ 2 ] , t [ 3 ] , t [ 0 ] , t [ 1 ] ) ^ rk [ rounds] [ 2 ]
192+ b3 = F1 ( t [ 3 ] , t [ 0 ] , t [ 1 ] , t [ 2 ] ) ^ rk [ rounds] [ 3 ]
193+
194+ return [
195+ UInt8 ( b0 & 0xFF ) , UInt8 ( ( b0 >> 8 ) & 0xFF ) , UInt8 ( ( b0 >> 16 ) & 0xFF ) , UInt8 ( ( b0 >> 24 ) & 0xFF ) ,
196+ UInt8 ( b1 & 0xFF ) , UInt8 ( ( b1 >> 8 ) & 0xFF ) , UInt8 ( ( b1 >> 16 ) & 0xFF ) , UInt8 ( ( b1 >> 24 ) & 0xFF ) ,
197+ UInt8 ( b2 & 0xFF ) , UInt8 ( ( b2 >> 8 ) & 0xFF ) , UInt8 ( ( b2 >> 16 ) & 0xFF ) , UInt8 ( ( b2 >> 24 ) & 0xFF ) ,
198+ UInt8 ( b3 & 0xFF ) , UInt8 ( ( b3 >> 8 ) & 0xFF ) , UInt8 ( ( b3 >> 16 ) & 0xFF ) , UInt8 ( ( b3 >> 24 ) & 0xFF )
199+ ] as Array < UInt8 >
200200 }
201201
202202 func decrypt( block: Array < UInt8 > ) -> Array < UInt8 > ? {
0 commit comments