void AES_CBC_Encrypt(byte *param_1,uint param_2,undefined4 param_3,int param_4,byte *param_5,
int param_6,int param_7,uint *param_8)
{
byte bVar1;
byte *pbVar2;
byte *pbVar3;
byte *pbVar4;
int iVar5;
int iVar6;
uint uVar7;
uint __n;
uint __n_00;
int local_48;
byte local_44 [16];
byte abStack_34 [4];
byte *local_30;
__n_00 = param_2 & 0xf;
__n = 0x10 - __n_00;
if (*param_8 < __n + param_2) {
if (RTDebugLevel != 0) {
printk("AES_CBC_Encrypt: cipher text length is %d bytes < (plain text length %d bytes + padding size %d bytes).\n"
,*param_8,param_2,__n);
}
}
else if (((param_4 == 0x10) || (param_4 == 0x18)) || (param_4 == 0x20)) {
if (param_6 == 0x10) {
local_30 = abStack_34;
iVar6 = 0;
pbVar3 = param_1;
for (uVar7 = param_2; 0xf < uVar7; uVar7 = uVar7 - 0x10) {
if (iVar6 == 0) {
iVar5 = 0;
pbVar2 = pbVar3;
do {
local_44[iVar5] = param_5[iVar5] ^ *pbVar2;
iVar5 = iVar5 + 1;
pbVar2 = pbVar2 + 1;
} while (iVar5 != 0x10);
}
else {
iVar5 = param_7 + iVar6;
pbVar2 = local_44;
pbVar4 = pbVar3;
do {
bVar1 = *pbVar4;
pbVar4 = pbVar4 + 1;
*pbVar2 = *(byte *)(iVar5 + -0x10) ^ bVar1;
pbVar2 = pbVar2 + 1;
iVar5 = iVar5 + 1;
} while (pbVar2 != local_30);
}
local_48 = *param_8 - iVar6;
RT_AES_Encrypt(local_44,0x10,param_3,param_4,param_7 + iVar6,&local_48);
iVar6 = iVar6 + local_48;
pbVar3 = pbVar3 + 0x10;
}
pbVar3 = local_44;
memmove(pbVar3,param_1 + (param_2 & 0xfffffff0),__n_00) //possible issue identified - semgrep
memset(pbVar3 + __n_00,__n & 0xff,__n);
if (iVar6 == 0) {
do {
*pbVar3 = *param_5 ^ *pbVar3;
pbVar3 = pbVar3 + 1;
param_5 = param_5 + 1;
} while (pbVar3 != abStack_34);
}
else {
iVar5 = param_7 + iVar6;
do {
*pbVar3 = *(byte *)(iVar5 + -0x10) ^ *pbVar3;
pbVar3 = pbVar3 + 1;
iVar5 = iVar5 + 1;
} while (pbVar3 != abStack_34);
}
local_48 = *param_8 - iVar6;
RT_AES_Encrypt(local_44,0x10,param_3,param_4,param_7 + iVar6,&local_48);
*param_8 = iVar6 + local_48;
}
else if (RTDebugLevel != 0) {
printk("AES_CBC_Encrypt: IV length is %d bytes, it must be %d bytes(128bits).\n",param_6,0x10)
;
}
}
else if (RTDebugLevel != 0) {
printk("AES_CBC_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;
}