@@ -318,25 +318,28 @@ static final function AesCtBitSliceSBox(out array<int> Q)
318
318
Q [0 ] = S7 ;
319
319
}
320
320
321
- static final function AesCtOrtho (out array <int> Q )
321
+ static final function AesCtOrtho (
322
+ out array <int> Q ,
323
+ optional int Offset = 0
324
+ )
322
325
{
323
326
local int A ;
324
327
local int B ;
325
328
326
- `SWAP2 (Q [0 ], Q [1 ]);
327
- `SWAP2 (Q [2 ], Q [3 ]);
328
- `SWAP2 (Q [4 ], Q [5 ]);
329
- `SWAP2 (Q [6 ], Q [7 ]);
329
+ `SWAP2 (Q [Offset + 0 ], Q [Offset + 1 ]);
330
+ `SWAP2 (Q [Offset + 2 ], Q [Offset + 3 ]);
331
+ `SWAP2 (Q [Offset + 4 ], Q [Offset + 5 ]);
332
+ `SWAP2 (Q [Offset + 6 ], Q [Offset + 7 ]);
330
333
331
- `SWAP4 (Q [0 ], Q [2 ]);
332
- `SWAP4 (Q [1 ], Q [3 ]);
333
- `SWAP4 (Q [4 ], Q [6 ]);
334
- `SWAP4 (Q [5 ], Q [7 ]);
334
+ `SWAP4 (Q [Offset + 0 ], Q [Offset + 2 ]);
335
+ `SWAP4 (Q [Offset + 1 ], Q [Offset + 3 ]);
336
+ `SWAP4 (Q [Offset + 4 ], Q [Offset + 6 ]);
337
+ `SWAP4 (Q [Offset + 5 ], Q [Offset + 7 ]);
335
338
336
- `SWAP8 (Q [0 ], Q [4 ]);
337
- `SWAP8 (Q [1 ], Q [5 ]);
338
- `SWAP8 (Q [2 ], Q [6 ]);
339
- `SWAP8 (Q [3 ], Q [7 ]);
339
+ `SWAP8 (Q [Offset + 0 ], Q [Offset + 4 ]);
340
+ `SWAP8 (Q [Offset + 1 ], Q [Offset + 5 ]);
341
+ `SWAP8 (Q [Offset + 2 ], Q [Offset + 6 ]);
342
+ `SWAP8 (Q [Offset + 3 ], Q [Offset + 7 ]);
340
343
}
341
344
342
345
static final function int SubWord (int X )
@@ -431,8 +434,7 @@ static final function int AesCtKeySched(
431
434
}
432
435
for (I = 0 ; I < Nkf ; I += 4 )
433
436
{
434
- // TODO: take in offset.
435
- // AesCtOrtho(SKey + (I << 1));
437
+ AesCtOrtho (SKey , I << 1 );
436
438
}
437
439
J = 0 ;
438
440
for (I = 0 ; I < Nkf ; ++I )
0 commit comments