void AES_CMAC(int param_1,uint param_2,undefined4 param_3,int param_4,undefined4 param_5,
uint *param_6)
{
byte *pbVar1;
byte *pbVar2;
byte *pbVar3;
int iVar4;
byte *pbVar5;
int iVar6;
undefined4 local_70;
byte local_6c [16];
byte local_5c [16];
byte local_4c [16];
byte local_3c [20];
if (*param_6 < 0x10) {
if (RTDebugLevel != 0) {
printk("AES_CMAC: MAC text length is less than %d bytes).\n",0x10);
}
}
else if (param_4 == 0x10) {
memset(local_4c,0,0x10) //possible issue identified - semgrep
memset(local_3c,0,0x10) //possible issue identified - semgrep
AES_CMAC_GenerateSubKey(param_3,0x10,local_4c,local_3c);
memmove(local_6c,Const_Zero,0x10) //possible issue identified - semgrep
iVar6 = 0;
for (; pbVar5 = (byte *)(param_1 + iVar6), 0x10 < param_2; param_2 = param_2 - 0x10) {
iVar4 = 0;
do {
pbVar1 = local_6c + iVar4;
pbVar3 = local_5c + iVar4;
iVar4 = iVar4 + 1;
*pbVar3 = *pbVar1 ^ *pbVar5;
pbVar5 = pbVar5 + 1;
} while (iVar4 != 0x10);
local_70 = 0x10;
iVar6 = iVar6 + 0x10;
RT_AES_Encrypt(local_5c,0x10,param_3,0x10,local_6c,&local_70);
}
pbVar5 = (byte *)(param_1 + iVar6);
if (param_2 == 0x10) {
iVar6 = 0;
do {
pbVar1 = local_6c + iVar6;
pbVar3 = local_4c + iVar6;
pbVar2 = local_5c + iVar6;
iVar6 = iVar6 + 1;
*pbVar2 = *pbVar1 ^ *pbVar5 ^ *pbVar3;
pbVar5 = pbVar5 + 1;
} while (iVar6 != 0x10);
}
else {
pbVar1 = local_5c;
memset(pbVar1,0,0x10) //possible issue identified - semgrep
memmove(pbVar1,pbVar5,param_2) //possible issue identified - semgrep
local_5c[param_2] = 0x80;
iVar6 = 0;
do {
pbVar5 = local_6c + iVar6;
pbVar3 = local_3c + iVar6;
iVar6 = iVar6 + 1;
*pbVar1 = *pbVar5 ^ *pbVar1 ^ *pbVar3;
pbVar1 = pbVar1 + 1;
} while (iVar6 != 0x10);
}
RT_AES_Encrypt(local_5c,0x10,param_3,0x10,param_5,param_6);
}
else if (RTDebugLevel != 0) {
printk("AES_CMAC: key length is %d bytes, it must be %d bytes(128 bits).\n",param_4,0x10);
}
return;
}