void WPAInstallSharedKey(int param_1,char param_2,char param_3,uint param_4,uint param_5,
char param_6,void *param_7,byte param_8)
{
undefined1 uVar1;
uint uVar2;
int iVar3;
int iVar4;
char *pcVar5;
undefined4 unaff_s0;
void *__s;
undefined4 unaff_s1;
uint uVar6;
void *__src;
undefined4 unaff_s2;
undefined4 unaff_s3;
undefined4 unaff_s4;
undefined4 unaff_s5;
undefined4 unaff_s6;
undefined4 unaff_s7;
undefined4 unaff_s8;
undefined4 unaff_retaddr;
param_5 = param_5 & 0xff;
param_4 = param_4 & 0xff;
uVar6 = (uint)param_8;
if (param_3 != '\0') {
if (RTDebugLevel == 0) {
return;
}
pcVar5 = "%s : The BSS-index(%d) is out of range for MBSSID link. \n";
LAB_00040594:
printk(pcVar5,"WPAInstallSharedKey",param_3);
return;
}
__s = (void *)(param_4 * 0x43 + param_1 + 0x75594);
memset(__s,0,0x43) //possible issue identified - semgrep
if (param_2 == '\n') {
uVar1 = 1;
LAB_0004055c:
*(undefined1 *)((int)__s + 0x40) = uVar1;
}
else {
if (param_2 == '\v') {
uVar1 = 2;
goto LAB_0004055c;
}
if (param_2 == '\x04') {
uVar1 = 3;
goto LAB_0004055c;
}
if (param_2 != '\x06') {
if (RTDebugLevel == 0) {
return;
}
pcVar5 = "%s : fails (IF/ra%d) \n";
param_3 = '\0';
goto LAB_00040594;
}
*(undefined1 *)((int)__s + 0x40) = 4;
}
if ((byte)(param_2 - 10U) < 2) {
if ((uVar6 != 5) && (uVar6 != 0xd)) {
if (RTDebugLevel == 0) {
return;
}
pcVar5 = "%s : (IF/ra%d) WEP key invlaid(%d) \n";
LAB_00040650:
printk(pcVar5,"WPAInstallSharedKey",0,uVar6);
return;
}
*(byte *)((int)__s + 0x41) = param_8;
memmove(__s,param_7,uVar6) //possible issue identified - semgrep
}
else {
if (uVar6 < 0x10) {
if (RTDebugLevel == 0) {
return;
}
pcVar5 = "%s : (IF/ra%d) WPA key invlaid(%d) \n";
goto LAB_00040650;
}
*(undefined1 *)((int)__s + 0x41) = 0x10;
memmove(__s,param_7,0x10) //possible issue identified - semgrep
if (*(char *)((int)__s + 0x40) == '\x03') {
__src = (void *)((int)param_7 + 0x10);
if (param_6 == '\0') {
memmove((void *)((int)__s + 0x10),(void *)((int)param_7 + 0x18),8) //possible issue identified - semgrep
}
else {
memmove((void *)((int)__s + 0x10),__src,8) //possible issue identified - semgrep
__src = (void *)((int)param_7 + 0x18);
}
memmove((void *)((int)__s + 0x18),__src,8) //possible issue identified - semgrep
}
}
AsicAddSharedKeyEntry(param_1,0,param_4,__s);
if (param_5 == 0) {
return;
}
uVar6 = (uint)*(byte *)((int)__s + 0x40);
if ((uVar6 - 1 & 0xff) < 2) {
uVar2 = RandomByte();
iVar3 = RandomByte(param_1);
iVar4 = RandomByte(param_1);
uVar2 = iVar4 << 0x10 | iVar3 << 8 | uVar2 | param_4 << 0x1e;
}
else {
if (1 < (uVar6 - 3 & 0xff)) {
if (RTDebugLevel == 0) {
return;
}
printk("%s : Unsupport cipher Alg (%d) for Wcid-%d \n","RTMPSetWcidSecurityInfo",uVar6,param_5
);
return;
}
uVar2 = (param_4 << 6 | 0x20) << 0x18 | 1;
}
AsicUpdateWCIDIVEIV(param_1,param_5,uVar2,0,unaff_s0,unaff_s1,unaff_s2,unaff_s3,unaff_s4,unaff_s5,
unaff_s6,unaff_s7,unaff_s8,unaff_retaddr);
if (param_5 == 0xff) {
if (1 < RTDebugLevel) {
printk("%s: Wcid is invalid (%d). \n","AsicUpdateWcidAttributeEntry",0xff);
return;
}
}
else {
uVar2 = ((uVar6 << 0x1c) >> 0x1f) << 10 | (uVar6 & 7) << 1;
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + (param_5 + 0x1a00) * 4) = uVar2;
}
if (2 < RTDebugLevel) {
printk("%s : WCID #%d, KeyIndex #%d, Alg=%s\n","AsicUpdateWcidAttributeEntry",param_5,param_4,
*(undefined4 *)(CipherName + uVar6 * 4),unaff_s7,unaff_s0,unaff_retaddr);
}
if (2 < RTDebugLevel) {
printk("\t\tWCIDAttri = 0x%x \n",uVar2);
return;
}
}
return;
}