void AES_CBC_Encrypt(byte *param_1,uint param_2,undefined4 param_3,int param_4,byte *param_5,
                    int param_6,int param_7,uint *param_8)

{
  byte bVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint __n;
  uint __n_00;
  int local_48;
  byte local_44 [16];
  byte abStack_34 [4];
  byte *local_30;
  
  __n_00 = param_2 & 0xf;
  __n = 0x10 - __n_00;
  if (*param_8 < __n + param_2) {
    if (RTDebugLevel != 0) {
      printk("AES_CBC_Encrypt: cipher text length is %d bytes < (plain text length %d bytes + padding size %d bytes).\n"
             ,*param_8,param_2,__n);
    }
  }
  else if (((param_4 == 0x10) || (param_4 == 0x18)) || (param_4 == 0x20)) {
    if (param_6 == 0x10) {
      local_30 = abStack_34;
      iVar6 = 0;
      pbVar3 = param_1;
      for (uVar7 = param_2; 0xf < uVar7; uVar7 = uVar7 - 0x10) {
        if (iVar6 == 0) {
          iVar5 = 0;
          pbVar2 = pbVar3;
          do {
            local_44[iVar5] = param_5[iVar5] ^ *pbVar2;
            iVar5 = iVar5 + 1;
            pbVar2 = pbVar2 + 1;
          } while (iVar5 != 0x10);
        }
        else {
          iVar5 = param_7 + iVar6;
          pbVar2 = local_44;
          pbVar4 = pbVar3;
          do {
            bVar1 = *pbVar4;
            pbVar4 = pbVar4 + 1;
            *pbVar2 = *(byte *)(iVar5 + -0x10) ^ bVar1;
            pbVar2 = pbVar2 + 1;
            iVar5 = iVar5 + 1;
          } while (pbVar2 != local_30);
        }
        local_48 = *param_8 - iVar6;
        RT_AES_Encrypt(local_44,0x10,param_3,param_4,param_7 + iVar6,&local_48);
        iVar6 = iVar6 + local_48;
        pbVar3 = pbVar3 + 0x10;
      }
      pbVar3 = local_44;
      memmove(pbVar3,param_1 + (param_2 & 0xfffffff0),__n_00)   //possible issue identified - semgrep
      memset(pbVar3 + __n_00,__n & 0xff,__n);
      if (iVar6 == 0) {
        do {
          *pbVar3 = *param_5 ^ *pbVar3;
          pbVar3 = pbVar3 + 1;
          param_5 = param_5 + 1;
        } while (pbVar3 != abStack_34);
      }
      else {
        iVar5 = param_7 + iVar6;
        do {
          *pbVar3 = *(byte *)(iVar5 + -0x10) ^ *pbVar3;
          pbVar3 = pbVar3 + 1;
          iVar5 = iVar5 + 1;
        } while (pbVar3 != abStack_34);
      }
      local_48 = *param_8 - iVar6;
      RT_AES_Encrypt(local_44,0x10,param_3,param_4,param_7 + iVar6,&local_48);
      *param_8 = iVar6 + local_48;
    }
    else if (RTDebugLevel != 0) {
      printk("AES_CBC_Encrypt: IV length is %d bytes, it must be %d bytes(128bits).\n",param_6,0x10)
      ;
    }
  }
  else if (RTDebugLevel != 0) {
    printk("AES_CBC_Encrypt: 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;
}