undefined4
AES_CCM_Encrypt(int param_1,uint param_2,undefined4 param_3,int param_4,int param_5,uint param_6,
undefined4 param_7,undefined4 param_8,int param_9,int param_10,uint *param_11)
{
byte bVar1;
bool bVar2;
uint uVar3;
undefined4 uVar4;
byte *pbVar5;
byte *pbVar6;
byte *pbVar7;
uint uVar8;
byte *pbVar9;
byte *pbVar10;
undefined4 local_68;
byte local_64 [16];
byte local_54 [15];
char local_45;
byte local_44 [20];
uint local_30;
local_68 = 0;
if (param_4 == 0x10) {
if (param_6 - 7 < 7) {
if ((((param_9 == 4) || (param_9 == 6)) || (param_9 == 8)) ||
(((param_9 == 10 || (param_9 == 0xc)) || (param_9 == 0xe)))) {
uVar3 = *param_11;
}
else {
if (param_9 != 0x10) {
if (RTDebugLevel == 0) {
return 0xfffffffd;
}
printk("AES_CCM_Encrypt: The MAC length must be 4, 6, 8, 10, 12, 14, or 16 bytes\n");
return 0xfffffffd;
}
uVar3 = *param_11;
}
local_30 = param_9 + param_2;
if (uVar3 < local_30) {
uVar4 = 0xfffffffc;
if (RTDebugLevel != 0) {
printk("AES_CCM_Encrypt: The CipherTextLength is not enough.\n");
uVar4 = 0xfffffffc;
}
}
else {
memset(local_54,0,0x10) //possible issue identified - semgrep
local_54[0] = 0xeU - (char)param_6 | local_54[0];
uVar3 = 0;
while( true ) {
bVar2 = param_6 <= uVar3;
uVar3 = uVar3 + 1;
if (bVar2) break;
local_54[uVar3] = *(byte *)(param_5 + uVar3 + -1);
}
pbVar10 = local_64;
AES_CCM_MAC(param_1,param_2,param_3,0x10,param_5,param_6,param_7,param_8,param_9,pbVar10);
local_68 = 0x10;
RT_AES_Encrypt(local_54,0x10,param_3,0x10,local_44,&local_68);
pbVar5 = local_44;
for (pbVar9 = pbVar10; pbVar9 != pbVar10 + param_9; pbVar9 = pbVar9 + 1) {
bVar1 = *pbVar5;
pbVar5 = pbVar5 + 1;
*pbVar9 = bVar1 ^ *pbVar9;
}
for (uVar3 = 0; uVar3 < param_2; uVar3 = uVar3 + uVar8) {
local_45 = local_45 + '\x01';
local_68 = 0x10;
RT_AES_Encrypt(local_54,0x10,param_3,0x10,local_44,&local_68);
uVar8 = 0x10;
if (param_2 - uVar3 < 0x11) {
uVar8 = param_2 - uVar3;
}
pbVar7 = (byte *)(param_1 + uVar3);
pbVar6 = (byte *)(param_10 + uVar3);
for (pbVar5 = local_44; pbVar5 != local_44 + uVar8; pbVar5 = pbVar5 + 1) {
bVar1 = *pbVar7;
pbVar7 = pbVar7 + 1;
*pbVar6 = *pbVar5 ^ bVar1;
pbVar6 = pbVar6 + 1;
}
}
pbVar5 = (byte *)(param_10 + param_2);
for (; pbVar10 != pbVar9; pbVar10 = pbVar10 + 1) {
*pbVar5 = *pbVar10;
pbVar5 = pbVar5 + 1;
}
*param_11 = local_30;
uVar4 = 0;
}
}
else {
uVar4 = 0xfffffffe;
if (RTDebugLevel != 0) {
printk("AES_CCM_Encrypt: A valid nonce length is 7-13 bytes\n");
uVar4 = 0xfffffffe;
}
}
}
else {
uVar4 = 0xffffffff;
if (RTDebugLevel != 0) {
printk("AES_CCM_Encrypt: The key length must be %d bytes\n",0x10);
uVar4 = 0xffffffff;
}
}
return uVar4;
}