Skip to content

Commit d70f292

Browse files
committed
broke up complicated expressions which were taking ages to compile
1 parent 39bf366 commit d70f292

File tree

2 files changed

+75
-13
lines changed

2 files changed

+75
-13
lines changed

Sources/CryptoSwift/AES.swift

Lines changed: 70 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

Sources/CryptoSwift/Utils.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ func toUInt32Array(slice: ArraySlice<UInt8>) -> Array<UInt32> {
4343
result.reserveCapacity(16)
4444

4545
for idx in slice.startIndex.stride(to: slice.endIndex, by: sizeof(UInt32)) {
46-
let val:UInt32 = (UInt32(slice[idx.advancedBy(3)]) << 24) | (UInt32(slice[idx.advancedBy(2)]) << 16) | (UInt32(slice[idx.advancedBy(1)]) << 8) | UInt32(slice[idx])
46+
let val1:UInt32 = (UInt32(slice[idx.advancedBy(3)]) << 24)
47+
let val2:UInt32 = (UInt32(slice[idx.advancedBy(2)]) << 16)
48+
let val3:UInt32 = (UInt32(slice[idx.advancedBy(1)]) << 8)
49+
let val4:UInt32 = UInt32(slice[idx])
50+
let val:UInt32 = val1 | val2 | val3 | val4
4751
result.append(val)
4852
}
4953
return result

0 commit comments

Comments
 (0)