undefined4 RTMPSoftDecryptAES(undefined4 param_1,byte *param_2,int param_3,int param_4)

{
  bool bVar1;
  byte *pbVar2;
  byte *pbVar3;
  char *pcVar4;
  byte *pbVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint __n;
  byte local_c0;
  byte local_bf;
  byte local_be;
  byte local_bd;
  byte local_bc;
  byte local_bb;
  byte local_b8 [8];
  undefined1 auStack_b0 [8];
  byte local_a8 [16];
  undefined1 auStack_98 [16];
  byte local_88 [16];
  byte local_78 [16];
  undefined1 auStack_68 [16];
  byte local_58 [16];
  byte local_48 [16];
  byte *local_38;
  int local_34;
  uint local_30;
  uint local_2c;
  
  uVar10 = (uint)param_2[1] & ((uint)param_2[1] << 0x1e) >> 0x1f;
  iVar9 = 0x1e;
  if (uVar10 == 0) {
    iVar9 = 0x18;
  }
  bVar1 = (*param_2 >> 4) - 8 < 4;
  if (bVar1) {
    iVar9 = iVar9 + 2;
  }
  if (*(char *)(param_4 + 0x41) == '\0') {
    if (RTDebugLevel < 3) {
      return 0;
    }
    pcVar4 = "RTMPSoftDecryptAES failed!(the Length can not be 0)\n";
  }
  else {
    pbVar2 = param_2 + iVar9;
    local_c0 = *pbVar2;
    local_bf = pbVar2[1];
    local_be = pbVar2[4];
    local_bd = pbVar2[5];
    local_bc = pbVar2[6];
    local_bb = pbVar2[7];
    local_2c = (param_3 + -0x10) - iVar9;
    local_30 = local_2c >> 4;
    __n = local_2c & 0xf;
    uVar7 = 0;
    local_38 = pbVar2;
    while (uVar7 < local_30) {
      uVar7 = uVar7 + 1;
      construct_ctr_preload(auStack_98,uVar10,bVar1,param_2,&local_c0,uVar7);
      aes128k128d(param_4,auStack_98,local_a8);
      iVar8 = 0;
      do {
        local_88[iVar8] = pbVar2[iVar8 + 8] ^ local_a8[iVar8];
        iVar8 = iVar8 + 1;
      } while (iVar8 != 0x10);
      memmove(pbVar2,local_88,0x10)   //possible issue identified - semgrep
      pbVar2 = pbVar2 + 0x10;
    }
    local_34 = local_30 * 0x10;
    iVar8 = local_34 + iVar9 + 8;
    if (__n != 0) {
      construct_ctr_preload(auStack_98,uVar10,bVar1,param_2,&local_c0,local_30 + 1);
      memset(local_78,0,0x10)   //possible issue identified - semgrep
      memmove(local_78,param_2 + iVar8,__n)   //possible issue identified - semgrep
      aes128k128d(param_4,auStack_98,local_a8);
      iVar6 = 0;
      do {
        pbVar2 = local_78 + iVar6;
        pbVar3 = local_a8 + iVar6;
        pbVar5 = local_88 + iVar6;
        iVar6 = iVar6 + 1;
        *pbVar5 = *pbVar2 ^ *pbVar3;
      } while (iVar6 != 0x10);
      memmove(param_2 + iVar8 + -8,local_88,__n)   //possible issue identified - semgrep
      iVar8 = iVar8 + __n;
    }
    construct_ctr_preload(auStack_98,uVar10,bVar1,param_2,&local_c0,0);
    memset(local_78,0,0x10)   //possible issue identified - semgrep
    memmove(local_78,param_2 + iVar8,8)   //possible issue identified - semgrep
    aes128k128d(param_4,auStack_98,local_a8);
    iVar8 = 0;
    do {
      pbVar2 = local_78 + iVar8;
      pbVar3 = local_a8 + iVar8;
      pbVar5 = local_88 + iVar8;
      iVar8 = iVar8 + 1;
      *pbVar5 = *pbVar2 ^ *pbVar3;
    } while (iVar8 != 0x10);
    memmove(auStack_b0,local_88,8)   //possible issue identified - semgrep
    param_2[1] = param_2[1] | 0x40;
    construct_mic_iv(auStack_68,bVar1,uVar10,param_2,local_2c,&local_c0);
    construct_mic_header1(local_58,iVar9,param_2);
    construct_mic_header2(local_48,param_2,uVar10,bVar1);
    aes128k128d(param_4,auStack_68,local_a8);
    iVar8 = 0;
    do {
      pbVar2 = local_58 + iVar8;
      pbVar3 = local_a8 + iVar8;
      pbVar5 = local_88 + iVar8;
      iVar8 = iVar8 + 1;
      *pbVar5 = *pbVar2 ^ *pbVar3;
    } while (iVar8 != 0x10);
    aes128k128d(param_4,local_88,local_a8);
    iVar8 = 0;
    do {
      pbVar2 = local_48 + iVar8;
      pbVar3 = local_a8 + iVar8;
      pbVar5 = local_88 + iVar8;
      iVar8 = iVar8 + 1;
      *pbVar5 = *pbVar2 ^ *pbVar3;
    } while (iVar8 != 0x10);
    aes128k128d(param_4,local_88,local_a8);
    for (uVar10 = 0; iVar8 = 0, uVar10 < local_30; uVar10 = uVar10 + 1) {
      do {
        pbVar3 = local_a8 + iVar8;
        pbVar2 = local_38 + iVar8;
        pbVar5 = local_88 + iVar8;
        iVar8 = iVar8 + 1;
        *pbVar5 = *pbVar2 ^ *pbVar3;
      } while (iVar8 != 0x10);
      aes128k128d(param_4,local_88,local_a8);
      local_38 = local_38 + 0x10;
    }
    iVar9 = local_34 + iVar9;
    if (__n != 0) {
      memset(local_78,0,0x10)   //possible issue identified - semgrep
      memmove(local_78,param_2 + iVar9,__n)   //possible issue identified - semgrep
      iVar9 = 0;
      do {
        pbVar2 = local_78 + iVar9;
        pbVar3 = local_a8 + iVar9;
        pbVar5 = local_88 + iVar9;
        iVar9 = iVar9 + 1;
        *pbVar5 = *pbVar2 ^ *pbVar3;
      } while (iVar9 != 0x10);
      aes128k128d(param_4);
    }
    iVar9 = 0;
    do {
      pbVar2 = local_a8 + iVar9;
      pbVar3 = local_b8 + iVar9;
      iVar9 = iVar9 + 1;
      *pbVar3 = *pbVar2;
    } while (iVar9 != 8);
    iVar9 = memcmp(local_b8,auStack_b0,8);
    if (iVar9 == 0) {
      return 1;
    }
    if (RTDebugLevel == 0) {
      return 0;
    }
    pcVar4 = "RTMPSoftDecryptAES, MIC Error !\n";
  }
  printk(pcVar4);
  return 0;
}