s () - трансформація при расшифровании яка є зворотною по відношенню до MixColumns ()
InvShiftRows () - трансформація при расшифровании яка є зворотною по відношенню до ShiftRows ()
InvSubBytes () - трансформація при расшифровании яка є зворотною по відношенню до SubBytes ()
MixColumns () - трансформація при шифруванні яка бере всі стовпці State і змішує їх дані (незалежно один від одного), щоб отримати нові стовпці
RotWord () - функція, що використовується в процедурі Key Expansion, яка бере 4-х байтное слово і виробляє над ним циклічну перестановку span>
ShiftRows () - трансформації при шифруванні, які обробляють State, циклічно зміщуючи останні три рядки State на різні величини p>
SubBytes () - трансформації при шифруванні які обробляють State використовуючи нелінійну таблицю заміщення байтів (S-box), застосовуючи її незалежно до кожного байту State
SubWord () - функція, яка використовується в процедурі Key Expansion, яка бере на вході чотирьох-байтное слово і застосовуючи S-box до кожного з чотирьох байтів видає вихідне слово
Шифрування
AES є стандартом, заснованим на алгоритмі Rijndael. Для AES довжина input (блоку вхідних даних) і State (стану) постійна і дорівнює 128 біт, а довжина шіфроключа K становить 128, 192, або 256 біт. При цьому, вихідний алгоритм Rijndael допускає довжину ключа і розмір блоку від 128 до 256 біт з кроком в 32 біта. Для позначення обраних довжин input, State і Cipher Key в байтах використовується нотація Nb = 4 для input і State, Nk = 4, 6, 8 для Cipher Key відповідно для різних довжин ключів. p align="justify"> На початку шифрування input копіюється в масив State за правилом s [r, c] = in [r + 4c], для і. Після цього до State застосовується процедура AddRoundKey () і потім State проходить через процедуру трансформації (раунд) 10, 12, або 14 разів (в залежності від довжини ключа), при цьому треба врахувати, що останній раунд дещо відрізняється від попередніх. У підсумку, після завершення останнього раунду трансформації, State копіюється в output за правилом out [r + 4c] = s [r, c], для і. p align="justify"> Окремі трансформації SubBytes (), ShiftRows (), MixColumns (), і AddRoundKey () - обробляють State. Масив w [] - містить key schedule. p align="justify"> (byte in [4 * Nb], byte out [4 * Nb], word w [Nb * (Nr +1)]) state [4, Nb] = in (state, w [ 0, Nb-1]) round = 1 step 1 to Nr-1 (state) (state) (state) (state, w [round * Nb, (round +1) * Nb-1]) for (state) ( state) (st...