void RT_AES_Decrypt(int param_1,uint param_2,undefined4 param_3,uint param_4,int param_5,
                   uint *param_6)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  byte bVar5;
  byte bVar6;
  byte bVar7;
  byte bVar8;
  char cVar9;
  int iVar10;
  code *pcVar11;
  char *pcVar12;
  char *pcVar13;
  int iVar14;
  int iVar15;
  byte *pbVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  char *local_20 [2];
  
  local_20[0] = (char *)0x0;
  if (*param_6 < 0x10) {
    if (RTDebugLevel == 0) {
      return;
    }
    pcVar12 = "RT_AES_Decrypt: plain block size is %d bytes, it must be %d bytes(128 bits).\n";
    param_2 = *param_6;
  }
  else {
    if (((param_4 != 0x10) && (param_4 != 0x18)) && (param_4 != 0x20)) {
      if (RTDebugLevel == 0) {
        return;
      }
      printk("RT_AES_Decrypt: key length is %d bytes, it must be %d, %d, or %d bytes(128, 192, or 256 bits).\n"
             ,param_4,0x10,0x18,0x20);
      return;
    }
    if (param_2 == 0x10) {
      os_alloc_mem(0,local_20,0x100);
      iVar17 = 0;
      if (local_20[0] == (char *)0x0) {
        if (RTDebugLevel == 0) {
          return;
        }
        pcVar13 = "%s: Allocate memory fail!!!\n";
        pcVar12 = "RT_AES_Decrypt";
        pcVar11 = printk;
      }
      else {
        do {
          pcVar12 = (char *)(param_1 + iVar17);
          iVar14 = 0;
          do {
            iVar10 = iVar17 * 4 + iVar14;
            iVar14 = iVar14 + 1;
            local_20[0][iVar10] = *pcVar12;
            pcVar12 = pcVar12 + 4;
          } while (iVar14 != 4);
          iVar17 = iVar17 + 1;
        } while (iVar17 != 4);
        RT_AES_KeyExpansion(param_3,param_4,local_20[0]);
        param_4 = param_4 >> 2;
        iVar14 = (param_4 + 6) * 4;
        iVar17 = 0;
        do {
          iVar10 = iVar17 * 0x3c;
          iVar18 = iVar17 * 4;
          local_20[0][iVar18] = local_20[0][iVar14 + iVar10 + 0x10] ^ local_20[0][iVar18];
          iVar17 = iVar17 + 1;
          local_20[0][iVar18 + 1] = local_20[0][iVar14 + iVar10 + 0x11] ^ local_20[0][iVar18 + 1];
          local_20[0][iVar18 + 2] = local_20[0][iVar14 + iVar10 + 0x12] ^ local_20[0][iVar18 + 2];
          local_20[0][iVar18 + 3] = local_20[0][iVar14 + iVar10 + 0x13] ^ local_20[0][iVar18 + 3];
        } while (iVar17 != 4);
        iVar14 = (param_4 + 5) * 4 + 2;
        iVar17 = (param_4 + 5) * 4;
        for (iVar10 = param_4 + 5; iVar10 != 0; iVar10 = iVar10 + -1) {
          cVar9 = local_20[0][7]   //possible issue identified - semgrep
          local_20[0][7] = local_20[0][6];
          iVar18 = 0;
          local_20[0][6] = local_20[0][5];
          local_20[0][5] = local_20[0][4];
          local_20[0][4] = cVar9;
          cVar9 = local_20[0][8]   //possible issue identified - semgrep
          local_20[0][8] = local_20[0][10];
          local_20[0][10] = cVar9;
          cVar9 = local_20[0][9]   //possible issue identified - semgrep
          local_20[0][9] = local_20[0][0xb];
          local_20[0][0xb] = cVar9;
          cVar9 = local_20[0][0xc]   //possible issue identified - semgrep
          local_20[0][0xc] = local_20[0][0xd];
          local_20[0][0xd] = local_20[0][0xe];
          local_20[0][0xe] = local_20[0][0xf];
          local_20[0][0xf] = cVar9;
          do {
            iVar15 = iVar18 * 4;
            iVar18 = iVar18 + 1;
            local_20[0][iVar15] = aes_sbox_dec[(byte)local_20[0][iVar15]];
            local_20[0][iVar15 + 1] = aes_sbox_dec[(byte)local_20[0][iVar15 + 1]];
            local_20[0][iVar15 + 2] = aes_sbox_dec[(byte)local_20[0][iVar15 + 2]];
            local_20[0][iVar15 + 3] = aes_sbox_dec[(byte)local_20[0][iVar15 + 3]];
          } while (iVar18 != 4);
          iVar18 = 0;
          do {
            iVar15 = iVar18 * 0x3c;
            iVar19 = iVar18 * 4;
            local_20[0][iVar19] = local_20[0][iVar17 + iVar15 + 0x10] ^ local_20[0][iVar19];
            iVar18 = iVar18 + 1;
            local_20[0][iVar19 + 1] = local_20[0][iVar17 + iVar15 + 0x11] ^ local_20[0][iVar19 + 1];
            local_20[0][iVar19 + 2] = local_20[0][iVar14 + iVar15 + 0x10] ^ local_20[0][iVar19 + 2];
            local_20[0][iVar19 + 3] = local_20[0][iVar17 + iVar15 + 0x13] ^ local_20[0][iVar19 + 3];
          } while (iVar18 != 4);
          iVar18 = 0;
          do {
            pbVar16 = (byte *)(local_20[0] + iVar18);
            bVar1 = *pbVar16;
            bVar2 = pbVar16[4];
            bVar3 = pbVar16[8];
            bVar4 = pbVar16[0xc];
            bVar5 = (&aes_mul_9)[bVar1];
            bVar6 = aes_mul_e[bVar2];
            *pbVar16 = aes_mul_b[bVar2] ^ aes_mul_e[bVar1] ^ aes_mul_d[bVar3] ^ (&aes_mul_9)[bVar4];
            bVar7 = (&aes_mul_9)[bVar2];
            bVar8 = aes_mul_d[bVar1];
            local_20[0][iVar18 + 4] = bVar6 ^ bVar5 ^ aes_mul_b[bVar3] ^ aes_mul_d[bVar4];
            bVar2 = aes_mul_d[bVar2];
            bVar1 = aes_mul_b[bVar1];
            bVar5 = (&aes_mul_9)[bVar3];
            local_20[0][iVar18 + 8] = bVar7 ^ bVar8 ^ aes_mul_e[bVar3] ^ aes_mul_b[bVar4];
            iVar15 = iVar18 + 1;
            local_20[0][iVar18 + 0xc] = bVar2 ^ bVar1 ^ bVar5 ^ aes_mul_e[bVar4];
            iVar18 = iVar15;
          } while (iVar15 != 4);
          iVar17 = iVar17 + -4;
          iVar14 = iVar14 + -4;
        }
        cVar9 = local_20[0][7]   //possible issue identified - semgrep
        local_20[0][7] = local_20[0][6];
        local_20[0][6] = local_20[0][5];
        iVar17 = 0;
        local_20[0][5] = local_20[0][4];
        local_20[0][4] = cVar9;
        cVar9 = local_20[0][8]   //possible issue identified - semgrep
        local_20[0][8] = local_20[0][10];
        local_20[0][10] = cVar9;
        cVar9 = local_20[0][9]   //possible issue identified - semgrep
        local_20[0][9] = local_20[0][0xb];
        local_20[0][0xb] = cVar9;
        cVar9 = local_20[0][0xc]   //possible issue identified - semgrep
        local_20[0][0xc] = local_20[0][0xd];
        local_20[0][0xd] = local_20[0][0xe];
        local_20[0][0xe] = local_20[0][0xf];
        local_20[0][0xf] = cVar9;
        do {
          iVar14 = iVar17 * 4;
          iVar17 = iVar17 + 1;
          local_20[0][iVar14] = aes_sbox_dec[(byte)local_20[0][iVar14]];
          local_20[0][iVar14 + 1] = aes_sbox_dec[(byte)local_20[0][iVar14 + 1]];
          local_20[0][iVar14 + 2] = aes_sbox_dec[(byte)local_20[0][iVar14 + 2]];
          local_20[0][iVar14 + 3] = aes_sbox_dec[(byte)local_20[0][iVar14 + 3]];
        } while (iVar17 != 4);
        iVar17 = 0;
        do {
          iVar14 = 0;
          do {
            iVar18 = iVar17 * 4 + iVar14;
            iVar10 = iVar14 + iVar17 * 0x3c;
            iVar14 = iVar14 + 1;
            local_20[0][iVar18] = local_20[0][iVar10 + 0x10] ^ local_20[0][iVar18];
          } while (iVar14 != 4);
          iVar17 = iVar17 + 1;
          iVar14 = 0;
        } while (iVar17 != 4);
        do {
          pcVar12 = (char *)(param_5 + iVar14);
          iVar17 = 0;
          do {
            iVar10 = iVar14 * 4 + iVar17;
            iVar17 = iVar17 + 1;
            *pcVar12 = local_20[0][iVar10];
            pcVar12 = pcVar12 + 4;
          } while (iVar17 != 4);
          iVar14 = iVar14 + 1;
        } while (iVar14 != 4);
        *param_6 = 0x10;
        if (local_20[0] == (char *)0x0) {
          return;
        }
        pcVar13 = (char *)0x0;
        pcVar11 = os_free_mem;
        pcVar12 = local_20[0];
      }
      (*pcVar11)(pcVar13,pcVar12);
      return;
    }
    if (RTDebugLevel == 0) {
      return;
    }
    pcVar12 = "RT_AES_Decrypt: cipher block size is %d bytes, it must be %d bytes(128 bits).\n";
  }
  printk(pcVar12,param_2,0x10);
  return;
}