void ConstructEapolMsg(int param_1,char param_2,byte param_3,uint param_4,void *param_5,
void *param_6,void *param_7,undefined4 param_8,byte param_9,
undefined1 *param_10)
{
byte bVar1;
bool bVar2;
bool bVar3;
undefined1 uVar4;
byte bVar5;
uint uVar6;
undefined *puVar7;
char *pcVar8;
void *__s;
size_t __n;
void *pvVar9;
int iVar10;
int local_48;
size_t local_44;
size_t local_40 [2];
int local_38;
uint local_34;
uint local_30;
bVar2 = *(int *)(param_1 + 0x1e4) - 6U < 2;
*param_10 = 1;
param_10[1] = 3;
local_34 = param_4 & 0xff;
param_10[3] = 0x5f;
param_10[2] = 0;
local_30 = (uint)param_9;
uVar4 = 2;
if (!bVar2) {
uVar4 = 0xfe;
}
param_10[4] = uVar4;
if ((*(int *)(param_1 + 0x1e8) == 6) || (local_38 = 1, param_2 == '\x06')) {
local_38 = 2;
}
bVar1 = param_10[6];
bVar5 = (byte)local_38;
param_10[6] = bVar1 & 0xf8 | bVar5;
if (param_3 < 5) {
bVar5 = bVar1 & 0xf0 | bVar5 | 8;
}
else {
bVar5 = bVar1 & 0xf0 | bVar5;
}
param_10[6] = bVar5;
if ((!bVar2) && (4 < param_3)) {
param_10[6] = param_10[6] & 0xcf | (byte)((param_4 & 3) << 4);
}
if (param_3 == 3) {
param_10[6] = param_10[6] & 0xbf | 0x40;
LAB_00041d70:
param_10[6] = param_10[6] & 0x7f | 0x80;
if (param_3 != 1) {
bVar1 = param_10[5];
goto LAB_00041d88;
}
}
else {
if ((param_3 == 1) || (param_3 == 5)) goto LAB_00041d70;
bVar1 = param_10[5];
LAB_00041d88:
param_10[5] = bVar1 & 0xfe | 1;
}
if (bVar2) {
if (2 < param_3) {
bVar1 = param_10[5];
LAB_00041dbc:
param_10[5] = bVar1 & 0xfd | 2;
if (!bVar2) goto LAB_00041e14;
}
if ((param_3 == 3) || (param_3 == 5)) {
param_10[5] = param_10[5] & 0xef | 0x10;
}
if (!bVar2) goto LAB_00041e14;
if (param_3 == 1) {
iVar10 = *(int *)(param_1 + 0x1e8);
goto LAB_00041e38;
}
if (param_3 == 3) {
iVar10 = *(int *)(param_1 + 0x1e8);
goto LAB_00041e38;
}
}
else {
if (4 < param_3) {
bVar1 = param_10[5];
goto LAB_00041dbc;
}
LAB_00041e14:
if (param_3 < 5) {
iVar10 = *(int *)(param_1 + 0x1e8);
LAB_00041e38:
uVar4 = 0x10;
if (iVar10 == 4) {
uVar4 = 0x20;
}
param_10[8] = uVar4;
}
else {
uVar4 = 0x10;
if (param_2 == '\x04') {
uVar4 = 0x20;
}
param_10[8] = uVar4;
}
}
memmove(param_10 + 9,(void *)(param_1 + 0x172),8) //possible issue identified - semgrep
if (param_3 < 4) {
LAB_00041e84:
memmove(param_10 + 0x11,param_5,0x20) //possible issue identified - semgrep
if ((bVar2) || (param_3 != 5)) {
if (param_3 != 3) goto LAB_00041ee8;
if (!bVar2) goto LAB_00041f08;
}
else {
memmove(param_10 + 0x31,(void *)((int)param_5 + 0x10),0x10) //possible issue identified - semgrep
param_10[0x40] = param_10[0x40] + '\x02';
LAB_00041ee8:
if (param_3 != 5) goto LAB_00041f08;
}
memmove(param_10 + 0x41,param_6,6) //possible issue identified - semgrep
}
else {
if (bVar2) goto LAB_00041ee8;
if (param_3 == 5) goto LAB_00041e84;
}
LAB_00041f08:
memset(param_10 + 0x51,0,0x10) //possible issue identified - semgrep
iVar10 = *(int *)(param_1 + 0x1e4);
if (param_3 == 1) goto LAB_000421b0;
if (((param_3 != 4) && (param_3 != 6)) && (os_alloc_mem(0,&local_48,0x5dc), local_48 != 0)) {
pvVar9 = (void *)(local_48 + 3U & 0xfffffffc);
__s = (void *)((int)pvVar9 + 0x200);
memset(__s,0,0x200) //possible issue identified - semgrep
param_10[0x61] = 0;
param_10[0x62] = 0;
local_44 = 0;
if ((local_30 != 0) && ((byte)(param_3 - 2) < 2)) {
RTMPInsertRSNIE(__s,&local_44,param_8,local_30,0,0);
}
bVar3 = iVar10 - 6U < 2;
if (param_3 == 3) {
if (bVar3) {
LAB_00041ff8:
__n = 0x20 //possible issue identified - semgrep
if (param_2 == '\x06') {
__n = 0x10 //possible issue identified - semgrep
}
if (bVar3) {
WPA_ConstructKdeHdr(1,__n + 2,(int)__s + local_44);
*(byte *)((int)__s + local_44 + 6) = (byte)local_34 & 3;
*(undefined1 *)((int)__s + local_44 + 7) = 0;
local_44 = local_44 + 8 //possible issue identified - semgrep
}
memmove((void *)((int)__s + local_44),param_7,__n) //possible issue identified - semgrep
local_44 = __n + local_44 //possible issue identified - semgrep
if (local_38 == 2) {
local_40[0] = 0;
if ((local_44 & 7) != 0) {
*(undefined1 *)((int)__s + local_44) = 0xdd;
uVar6 = 8 - (local_44 & 7) & 0xff;
iVar10 = 1;
while( true ) {
if ((int)uVar6 <= iVar10) break;
*(undefined1 *)((int)__s + local_44 + iVar10) = 0;
iVar10 = iVar10 + 1;
}
local_44 = local_44 + uVar6;
}
AES_Key_Wrap(__s,local_44,param_1 + 0x18a,0x10,pvVar9,local_40);
local_44 = local_40[0] //possible issue identified - semgrep
__s = pvVar9;
}
else {
TKIP_GTK_KEY_WRAP(param_1 + 0x18a,param_10 + 0x31,__s,local_44,pvVar9);
__s = pvVar9;
}
}
}
else if (param_3 == 5) goto LAB_00041ff8;
memmove(param_10 + 99,__s,local_44) //possible issue identified - semgrep
uVar6 = CONCAT11(param_10[2],param_10[3]) + local_44 & 0xffff;
param_10[3] = (char)uVar6;
param_10[0x61] = (char)(local_44 >> 8);
param_10[2] = (char)(uVar6 >> 8);
param_10[0x62] = (char)local_44;
os_free_mem(0,local_48);
}
CalculateMIC(local_38,param_1 + 0x17a,param_10);
LAB_000421b0:
if (2 < RTDebugLevel) {
if (bVar2) {
puVar7 = &_LC40;
}
else {
puVar7 = &_LC39;
}
if (param_3 == 1) {
pcVar8 = "Pairwise Message 1";
}
else if (param_3 == 2) {
pcVar8 = "Pairwise Message 2";
}
else if (param_3 == 3) {
pcVar8 = "Pairwise Message 3";
}
else if (param_3 == 4) {
pcVar8 = "Pairwise Message 4";
}
else if (param_3 == 5) {
pcVar8 = "Group Message 1";
}
else if (param_3 == 6) {
pcVar8 = "Group Message 2";
}
else {
pcVar8 = "Invalid Message";
}
printk("===> ConstructEapolMsg for %s %s\n",puVar7,pcVar8);
}
if (2 < RTDebugLevel) {
printk("\t Body length = %d \n",CONCAT11(param_10[2],param_10[3]));
}
if (2 < RTDebugLevel) {
printk("\t Key length = %d \n",CONCAT11(param_10[7],param_10[8]));
}
return;
}