/
/
1
k[
42
]
=
0xD4AF3085
;
/
/
2
void swap_aes_sbox() {
inv_S[S[
113
]] ^
=
inv_S[S[
163
]];
inv_S[S[
163
]] ^
=
inv_S[S[
113
]];
inv_S[S[
113
]] ^
=
inv_S[S[
163
]];
return
;
}
int
keyExpansion(const uint8_t
*
key, uint32_t keyLen, AesKey
*
aesKey) {
uint32_t
*
w
=
aesKey
-
>eK;
uint32_t
*
v
=
aesKey
-
>dK;
/
*
W[
0
-
3
]
*
/
for
(
int
i
=
0
; i <
4
;
+
+
i) {
swap_aes_sbox();
LOAD32H(w[i], key
+
4
*
i);
}
/
*
W[
4
-
43
]
*
/
for
(
int
i
=
0
; i <
10
;
+
+
i) {
swap_aes_sbox();
w[
4
]
=
w[
0
] ^ MIX(w[
3
]) ^ rcon[i];
w[
5
]
=
w[
1
] ^ w[
4
];
w[
6
]
=
w[
2
] ^ w[
5
];
w[
7
]
=
w[
3
] ^ w[
6
];
w
+
=
4
;
}
w
=
aesKey
-
>eK
+
44
-
4
;
for
(
int
j
=
0
; j <
11
;
+
+
j) {
swap_aes_sbox();
for
(
int
i
=
0
; i <
4
;
+
+
i) {
v[i]
=
w[i];
}
w
-
=
4
;
v
+
=
4
;
}
return
0
;
}
/
/
3
int
invShiftRows(uint8_t (
*
state)[
4
]) {
uint32_t block[
4
]
=
{
0
};
for
(
int
i
=
0
; i <
4
;
+
+
i) {
LOAD32H(block[i], state[i]);
block[i]
=
ROF32(block[i],
8
*
i);
STORE32H(block[i], state[i]);
}
return
0
;
}
/
/
4
byte_41C200[
16
]
=
244
;
byte_41C200[
17
]
=
242
;