undefined4
AES_CCM_Decrypt(int param_1,uint param_2,undefined4 param_3,int param_4,int param_5,uint param_6,
               undefined4 param_7,undefined4 param_8,size_t param_9,int param_10,uint *param_11)

{
  byte bVar1;
  bool bVar2;
  undefined4 uVar3;
  uint uVar4;
  byte *pbVar5;
  int iVar6;
  byte *pbVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  undefined4 local_70;
  undefined1 auStack_6c [16];
  byte local_5c [16];
  byte local_4c [15];
  char local_3d;
  byte local_3c [20];
  
  local_70 = 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 || (param_9 == 0x10)))) {
        uVar10 = param_2 - param_9;
        if (*param_11 < uVar10) {
          uVar3 = 0xfffffffc;
          if (RTDebugLevel != 0) {
            printk("AES_CCM_Decrypt: The PlainTextLength is not enough.\n");
            uVar3 = 0xfffffffc;
          }
        }
        else {
          memset(local_4c,0,0x10)   //possible issue identified - semgrep
          local_4c[0] = 0xeU - (char)param_6 | local_4c[0];
          uVar4 = 0;
          while( true ) {
            bVar2 = param_6 <= uVar4;
            uVar4 = uVar4 + 1;
            if (bVar2) break;
            local_4c[uVar4] = *(byte *)(param_5 + uVar4 + -1);
          }
          local_70 = 0x10;
          RT_AES_Encrypt(local_4c,0x10,param_3,0x10,local_3c,&local_70);
          pbVar7 = (byte *)(param_1 + uVar10);
          iVar6 = 0;
          uVar4 = uVar10;
          while( true ) {
            bVar2 = param_2 <= uVar4;
            pbVar5 = local_3c + iVar6;
            pbVar8 = local_5c + iVar6;
            uVar4 = uVar4 + 1;
            iVar6 = iVar6 + 1;
            if (bVar2) break;
            bVar1 = *pbVar7;
            pbVar7 = pbVar7 + 1;
            *pbVar8 = *pbVar5 ^ bVar1;
          }
          for (uVar4 = 0; uVar4 < uVar10; uVar4 = uVar4 + uVar9) {
            local_3d = local_3d + '\x01';
            local_70 = 0x10;
            RT_AES_Encrypt(local_4c,0x10,param_3,0x10,local_3c,&local_70);
            uVar9 = 0x10;
            if (uVar10 - uVar4 < 0x11) {
              uVar9 = uVar10 - uVar4;
            }
            pbVar8 = (byte *)(param_1 + uVar4);
            pbVar5 = (byte *)(param_10 + uVar4);
            for (pbVar7 = local_3c; pbVar7 != local_3c + uVar9; pbVar7 = pbVar7 + 1) {
              bVar1 = *pbVar8;
              pbVar8 = pbVar8 + 1;
              *pbVar5 = *pbVar7 ^ bVar1;
              pbVar5 = pbVar5 + 1;
            }
          }
          *param_11 = uVar10;
          AES_CCM_MAC(param_10,uVar10,param_3,0x10,param_5,param_6,param_7,param_8,param_9,
                      auStack_6c);
          iVar6 = memcmp(local_5c,auStack_6c,param_9)   //possible issue identified - semgrep
          uVar3 = 0;
          if ((iVar6 != 0) && (uVar3 = 0xfffffffb, RTDebugLevel != 0)) {
            printk("AES_CCM_Decrypt: The MIC does not match.\n");
            uVar3 = 0xfffffffb;
          }
        }
      }
      else {
        uVar3 = 0xfffffffd;
        if (RTDebugLevel != 0) {
          printk("AES_CCM_Decrypt: The MAC length  must be 4, 6, 8, 10, 12, 14, or 16 bytes\n");
          uVar3 = 0xfffffffd;
        }
      }
    }
    else {
      uVar3 = 0xfffffffe;
      if (RTDebugLevel != 0) {
        printk("AES_CCM_Decrypt: A valid nonce length is 7-13 bytes\n");
        uVar3 = 0xfffffffe;
      }
    }
  }
  else {
    uVar3 = 0xffffffff;
    if (RTDebugLevel != 0) {
      printk("AES_CCM_Decrypt: The key length must be %d bytes\n",0x10);
      uVar3 = 0xffffffff;
    }
  }
  return uVar3;
}