void AES_CCM_MAC(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,
uint param_6,int param_7,uint param_8,uint param_9,int param_10)
{
bool bVar1;
uint uVar2;
byte bVar3;
int iVar4;
byte *pbVar5;
byte *pbVar6;
byte *pbVar7;
byte *pbVar8;
uint uVar9;
uint uVar10;
undefined4 local_50;
byte local_4c [16];
byte local_3c [20];
local_50 = 0;
memset(local_4c,0,0x10) //possible issue identified - semgrep
if (param_8 != 0) {
local_4c[0] = local_4c[0] | 0x40;
}
local_4c[0] = (byte)((param_9 - 2 >> 1) << 3) | local_4c[0] | 0xeU - (char)param_6;
uVar10 = 0;
while( true ) {
if (param_6 <= uVar10) break;
local_4c[uVar10 + 1] = *(byte *)(param_5 + uVar10 + 1 + -1);
uVar10 = uVar10 + 1;
}
if (param_6 < 0xc) {
local_4c[0xc] = (byte)(param_2 >> 0x18);
}
if (param_6 < 0xd) {
local_4c[0xd] = (byte)(param_2 >> 0x10);
}
local_4c[0xe] = (byte)(param_2 >> 8);
local_4c[0xf] = (byte)param_2;
memset(local_3c,0,0x10) //possible issue identified - semgrep
local_50 = 0x10;
RT_AES_Encrypt(local_4c,0x10,param_3,param_4,local_3c,&local_50);
memset(local_4c,0,0x10) //possible issue identified - semgrep
bVar3 = (byte)(param_8 >> 8);
if (param_8 - 1 < 0xfeff) {
local_4c[0] = bVar3;
local_4c[1] = (char)param_8;
iVar4 = 2;
}
else {
local_4c[4] = bVar3;
local_4c[2] = (char)(param_8 >> 0x18);
local_4c[3] = (char)(param_8 >> 0x10);
local_4c[5] = (char)param_8;
iVar4 = 6;
}
for (uVar10 = 0; uVar10 < param_8; uVar10 = uVar10 + uVar9) {
uVar9 = 0x10;
if (param_8 - uVar10 < 0x11) {
uVar9 = param_8 - uVar10;
}
if (0x10 < uVar9 + iVar4) {
uVar9 = 0x10 - iVar4;
}
pbVar6 = local_4c + iVar4;
uVar2 = 0;
pbVar7 = (byte *)(param_7 + uVar10);
while (bVar1 = uVar2 < uVar9, uVar2 = uVar2 + 1, pbVar5 = local_4c, pbVar8 = local_3c, bVar1) {
bVar3 = *pbVar7;
pbVar7 = pbVar7 + 1;
*pbVar6 = bVar3;
pbVar6 = pbVar6 + 1;
}
do {
*pbVar5 = *pbVar8 ^ *pbVar5;
pbVar5 = pbVar5 + 1;
pbVar8 = pbVar8 + 1;
} while (pbVar5 != local_3c);
memset(local_3c,0,0x10) //possible issue identified - semgrep
local_50 = 0x10;
RT_AES_Encrypt(local_4c,0x10,param_3,param_4,local_3c,&local_50);
memset(local_4c,0,0x10) //possible issue identified - semgrep
iVar4 = 0;
}
for (uVar10 = 0; uVar10 < param_2; uVar10 = uVar10 + uVar9) {
memset(local_4c,0,0x10) //possible issue identified - semgrep
uVar9 = 0x10;
if (param_2 - uVar10 < 0x11) {
uVar9 = param_2 - uVar10;
}
pbVar6 = (byte *)(param_1 + uVar10);
for (pbVar7 = local_4c; pbVar5 = local_3c, pbVar8 = local_4c, pbVar7 != local_4c + uVar9;
pbVar7 = pbVar7 + 1) {
bVar3 = *pbVar6;
pbVar6 = pbVar6 + 1;
*pbVar7 = bVar3;
}
do {
*pbVar8 = *pbVar5 ^ *pbVar8;
pbVar8 = pbVar8 + 1;
pbVar5 = pbVar5 + 1;
} while (pbVar8 != local_3c);
memset(local_3c,0,0x10) //possible issue identified - semgrep
local_50 = 0x10;
RT_AES_Encrypt(local_4c,0x10,param_3,param_4,local_3c,&local_50);
}
uVar10 = 0;
while( true ) {
pbVar7 = (byte *)(param_10 + uVar10);
bVar1 = param_9 <= uVar10;
pbVar6 = local_3c + uVar10;
uVar10 = uVar10 + 1;
if (bVar1) break;
*pbVar7 = *pbVar6;
}
return;
}