char * WPA_ExtractSuiteFromRSNIE(char *param_1,int param_2,char param_3,char *param_4)

{
  char cVar1;
  char cVar2;
  ushort uVar3;
  int iVar4;
  char *pcVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  ushort local_20 [6];
  
  *param_4 = '\0';
  if (((int)(param_2 - 2U) < 1) || (uVar8 = (uint)(byte)param_1[1], uVar8 != param_2 - 2U)) {
    printk("ERROR!!! ");
    pcVar5 = "%s : The length is invalid\n";
  }
  else {
    cVar1 = *param_1;
    if (cVar1 == -0x23) {
      if (uVar8 < 0x10) {
        if (RTDebugLevel == 0) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The length is too short for WPA\n";
        goto LAB_0003fce0;
      }
      cVar2 = (char)*(ushort *)(param_1 + 0xc)   //possible issue identified - semgrep
      uVar9 = (uint)*(ushort *)(param_1 + 0xc);
      iVar4 = uVar9 + 3;
      uVar6 = iVar4 * 4;
      if (uVar8 < uVar6) {
        if (RTDebugLevel == 0) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The expected lenght(%d) exceed the remaining length(%d) for WPA-RSN \n";
        goto LAB_0003ffbc;
      }
      if (param_3 == '\0') {
        *param_4 = '\x01';
        return param_1 + 8;
      }
      uVar7 = uVar6;
      if (param_3 == '\x01') {
        if (RTDebugLevel < 3) {
          *param_4 = cVar2;
        }
        else {
          printk("%s : The count of pairwise cipher is %d\n","WPA_ExtractSuiteFromRSNIE",uVar9);
          *param_4 = cVar2;
        }
        return param_1 + 0xe;
      }
    }
    else {
      if (cVar1 != '0') {
        if (RTDebugLevel == 0) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        printk("%s : Unknown IE (%d)\n","WPA_ExtractSuiteFromRSNIE",cVar1);
        *param_4 = '\0';
        return (char *)0x0;
      }
      if (uVar8 < 0xc) {
        if (RTDebugLevel == 0) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The length is too short for WPA2\n";
        goto LAB_0003fce0;
      }
      cVar2 = (char)*(ushort *)(param_1 + 8)   //possible issue identified - semgrep
      uVar9 = (uint)*(ushort *)(param_1 + 8);
      iVar4 = uVar9 + 2;
      uVar6 = iVar4 * 4;
      if (uVar8 < uVar6) {
        if (RTDebugLevel == 0) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The expected lenght(%d) exceed the remaining length(%d) for WPA2-RSN \n";
        goto LAB_0003ffbc;
      }
      if (param_3 == '\0') {
        *param_4 = '\x01';
        return param_1 + 4;
      }
      uVar7 = uVar6;
      if (param_3 == '\x01') {
        if (RTDebugLevel < 3) {
          *param_4 = cVar2;
        }
        else {
          printk("%s : The count of pairwise cipher is %d\n","WPA_ExtractSuiteFromRSNIE",uVar9);
          *param_4 = cVar2;
        }
        return param_1 + 10;
      }
    }
    uVar8 = uVar8 + iVar4 * -4;
    if (5 < uVar8) {
      uVar3 = *(ushort *)(param_1 + uVar7 + 2);
      uVar6 = (uint)uVar3 * 4 + 2;
      if ((int)uVar8 < (int)uVar6) {
        if (RTDebugLevel == 0) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The expected lenght(%d) exceed the remaining length(%d) for AKM \n";
LAB_0003ffbc:
        printk(pcVar5,"WPA_ExtractSuiteFromRSNIE",uVar6,uVar8);
        *param_4 = '\0';
        return (char *)0x0;
      }
      if (param_3 == '\x02') {
        if (RTDebugLevel < 3) {
          *param_4 = (char)uVar3;
        }
        else {
          printk("%s : The count of AKM is %d\n","WPA_ExtractSuiteFromRSNIE",(uint)uVar3);
          *param_4 = (char)uVar3;
        }
        return param_1 + uVar7 + 4;
      }
      if (cVar1 == -0x23) {
        if (RTDebugLevel < 3) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The remaining shall be ignored in WPA mode\n";
      }
      else if (uVar8 - uVar6 < 2) {
        if (RTDebugLevel < 3) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The peer RSNIE doesn\'t include RSN-Cap\n";
      }
      else {
        param_1 = param_1 + uVar6 + uVar7 + 2;
        if (param_3 == '\x03') {
          if (2 < RTDebugLevel) {
            printk("%s : Extract RSN Capabilities\n","WPA_ExtractSuiteFromRSNIE");
          }
          *param_4 = '\x01';
          return param_1;
        }
        uVar8 = (uVar8 - uVar6) - 2;
        if (1 < uVar8) {
          memmove(local_20,param_1 + 2,2)   //possible issue identified - semgrep
          pcVar5 = (char *)0x0;
          if (local_20[0] != 0) {
            uVar6 = (uint)local_20[0] * 0x10 + 2;
            pcVar5 = param_1 + 4;
            if ((int)uVar8 < (int)uVar6) {
              if (RTDebugLevel == 0) {
                *param_4 = '\0';
                return (char *)0x0;
              }
              pcVar5 = 
              "%s : The expected lenght(%d) exceed the remaining length(%d) in PMKID-field \n";
              goto LAB_0003ffbc;
            }
          }
          if (param_3 != '\x04') {
            *param_4 = '\0';
            return (char *)0x0;
          }
          *param_4 = (char)local_20[0];
          return pcVar5;
        }
        if (RTDebugLevel < 3) {
          *param_4 = '\0';
          return (char *)0x0;
        }
        pcVar5 = "%s : The peer RSNIE doesn\'t include PMKID list Count\n";
      }
LAB_0003fce0:
      printk(pcVar5,"WPA_ExtractSuiteFromRSNIE");
      *param_4 = '\0';
      return (char *)0x0;
    }
    printk("ERROR!!! ");
    pcVar5 = "%s : The length of AKM of RSN is too short\n";
  }
  printk(pcVar5,"WPA_ExtractSuiteFromRSNIE");
  *param_4 = '\0';
  return (char *)0x0;
}