void RT_AES_Encrypt(int param_1,uint param_2,undefined4 param_3,uint param_4,int param_5,
uint *param_6)
{
byte bVar1;
byte bVar2;
byte bVar3;
byte bVar4;
char cVar5;
int iVar6;
code *pcVar7;
byte *pbVar8;
char *pcVar9;
int iVar10;
char *pcVar11;
int iVar12;
int iVar13;
uint uVar14;
char *local_20 [2];
local_20[0] = (char *)0x0;
if (param_2 == 0x10) {
if (((param_4 != 0x10) && (param_4 != 0x18)) && (param_4 != 0x20)) {
if (RTDebugLevel == 0) {
return;
}
printk("RT_AES_Encrypt: key length is %d bytes, it must be %d, %d, or %d bytes(128, 192, or 256 bits).\n"
,param_4,0x10,0x18,0x20);
return;
}
param_2 = *param_6;
if (0xf < param_2) {
os_alloc_mem(0,local_20,0x100);
iVar13 = 0;
if (local_20[0] == (char *)0x0) {
if (RTDebugLevel == 0) {
return;
}
pcVar11 = "%s: Allocate memory fail!!!\n";
pcVar9 = "RT_AES_Encrypt";
pcVar7 = printk;
}
else {
do {
pcVar9 = (char *)(param_1 + iVar13);
iVar12 = 0;
do {
iVar6 = iVar13 * 4 + iVar12;
iVar12 = iVar12 + 1;
local_20[0][iVar6] = *pcVar9;
pcVar9 = pcVar9 + 4;
} while (iVar12 != 4);
iVar13 = iVar13 + 1;
} while (iVar13 != 4);
RT_AES_KeyExpansion(param_3,param_4,local_20[0]);
iVar13 = 0;
do {
iVar12 = 0;
do {
iVar10 = iVar13 * 4 + iVar12;
iVar6 = iVar12 + iVar13 * 0x3c;
iVar12 = iVar12 + 1;
local_20[0][iVar10] = local_20[0][iVar6 + 0x10] ^ local_20[0][iVar10];
} while (iVar12 != 4);
iVar13 = iVar13 + 1;
} while (iVar13 != 4);
iVar13 = 5;
for (uVar14 = 1; iVar12 = 0, uVar14 < (param_4 >> 2) + 6; uVar14 = uVar14 + 1) {
do {
iVar6 = iVar12 * 4;
iVar12 = iVar12 + 1;
local_20[0][iVar6] = aes_sbox_enc[(byte)local_20[0][iVar6]];
local_20[0][iVar6 + 1] = aes_sbox_enc[(byte)local_20[0][iVar6 + 1]];
local_20[0][iVar6 + 2] = aes_sbox_enc[(byte)local_20[0][iVar6 + 2]];
local_20[0][iVar6 + 3] = aes_sbox_enc[(byte)local_20[0][iVar6 + 3]];
} while (iVar12 != 4);
cVar5 = local_20[0][4] //possible issue identified - semgrep
local_20[0][4] = local_20[0][5];
local_20[0][5] = local_20[0][6];
local_20[0][6] = local_20[0][7];
local_20[0][7] = cVar5;
cVar5 = local_20[0][8] //possible issue identified - semgrep
local_20[0][8] = local_20[0][10];
local_20[0][10] = cVar5;
cVar5 = local_20[0][9] //possible issue identified - semgrep
local_20[0][9] = local_20[0][0xb];
local_20[0][0xb] = cVar5;
cVar5 = local_20[0][0xf] //possible issue identified - semgrep
local_20[0][0xf] = local_20[0][0xe];
local_20[0][0xe] = local_20[0][0xd];
local_20[0][0xd] = local_20[0][0xc];
local_20[0][0xc] = cVar5;
iVar12 = 0;
do {
pbVar8 = (byte *)(local_20[0] + iVar12);
bVar1 = *pbVar8;
bVar2 = pbVar8[4];
bVar3 = pbVar8[8];
bVar4 = pbVar8[0xc];
*pbVar8 = bVar4 ^ bVar3 ^ aes_mul_2[bVar1] ^ aes_mul_3[bVar2];
local_20[0][iVar12 + 4] = bVar4 ^ bVar1 ^ aes_mul_2[bVar2] ^ aes_mul_3[bVar3];
local_20[0][iVar12 + 8] = bVar2 ^ bVar1 ^ aes_mul_2[bVar3] ^ aes_mul_3[bVar4];
iVar6 = iVar12 + 1;
local_20[0][iVar12 + 0xc] = bVar3 ^ bVar2 ^ aes_mul_3[bVar1] ^ aes_mul_2[bVar4];
iVar12 = iVar6;
} while (iVar6 != 4);
iVar12 = 0;
do {
iVar10 = iVar12 * 4;
iVar6 = iVar12 * 0x3c;
local_20[0][iVar10] = local_20[0][(iVar12 * 0xf + uVar14 + 4) * 4] ^ local_20[0][iVar10]
;
iVar12 = iVar12 + 1;
local_20[0][iVar10 + 1] = local_20[0][iVar13 + iVar6 + 0x10] ^ local_20[0][iVar10 + 1];
local_20[0][iVar10 + 2] = local_20[0][iVar13 + iVar6 + 0x11] ^ local_20[0][iVar10 + 2];
local_20[0][iVar10 + 3] = local_20[0][iVar13 + iVar6 + 0x12] ^ local_20[0][iVar10 + 3];
} while (iVar12 != 4);
iVar13 = iVar13 + 4;
}
do {
iVar13 = iVar12 * 4;
iVar12 = iVar12 + 1;
local_20[0][iVar13] = aes_sbox_enc[(byte)local_20[0][iVar13]];
local_20[0][iVar13 + 1] = aes_sbox_enc[(byte)local_20[0][iVar13 + 1]];
local_20[0][iVar13 + 2] = aes_sbox_enc[(byte)local_20[0][iVar13 + 2]];
local_20[0][iVar13 + 3] = aes_sbox_enc[(byte)local_20[0][iVar13 + 3]];
} while (iVar12 != 4);
iVar12 = uVar14 * 4;
cVar5 = local_20[0][4] //possible issue identified - semgrep
local_20[0][4] = local_20[0][5];
iVar13 = 0;
local_20[0][5] = local_20[0][6];
local_20[0][6] = local_20[0][7];
local_20[0][7] = cVar5;
cVar5 = local_20[0][8] //possible issue identified - semgrep
local_20[0][8] = local_20[0][10];
local_20[0][10] = cVar5;
cVar5 = local_20[0][9] //possible issue identified - semgrep
local_20[0][9] = local_20[0][0xb];
local_20[0][0xb] = cVar5;
cVar5 = local_20[0][0xf] //possible issue identified - semgrep
local_20[0][0xf] = local_20[0][0xe];
local_20[0][0xe] = local_20[0][0xd];
local_20[0][0xd] = local_20[0][0xc];
local_20[0][0xc] = cVar5;
do {
iVar6 = iVar13 * 0x3c;
iVar10 = iVar13 * 4;
local_20[0][iVar10] = local_20[0][iVar12 + iVar6 + 0x10] ^ local_20[0][iVar10];
iVar13 = iVar13 + 1;
local_20[0][iVar10 + 1] = local_20[0][iVar12 + iVar6 + 0x11] ^ local_20[0][iVar10 + 1];
local_20[0][iVar10 + 2] = local_20[0][iVar12 + iVar6 + 0x12] ^ local_20[0][iVar10 + 2];
local_20[0][iVar10 + 3] = local_20[0][iVar12 + iVar6 + 0x13] ^ local_20[0][iVar10 + 3];
} while (iVar13 != 4);
iVar13 = 0;
do {
pcVar9 = (char *)(param_5 + iVar13);
iVar12 = 0;
do {
iVar6 = iVar13 * 4 + iVar12;
iVar12 = iVar12 + 1;
*pcVar9 = local_20[0][iVar6];
pcVar9 = pcVar9 + 4;
} while (iVar12 != 4);
iVar13 = iVar13 + 1;
} while (iVar13 != 4);
*param_6 = 0x10;
if (local_20[0] == (char *)0x0) {
return;
}
pcVar11 = (char *)0x0;
pcVar7 = os_free_mem;
pcVar9 = local_20[0];
}
(*pcVar7)(pcVar11,pcVar9);
return;
}
if (RTDebugLevel == 0) {
return;
}
pcVar9 = "RT_AES_Encrypt: cipher block size is %d bytes, it must be %d bytes(128 bits).\n";
}
else {
if (RTDebugLevel == 0) {
return;
}
pcVar9 = "RT_AES_Encrypt: plain block size is %d bytes, it must be %d bytes(128 bits).\n";
}
printk(pcVar9,param_2,0x10);
return;
}