void RT_MD5_Append(int param_1,int param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  void *__dest;
  void *__src;
  int iVar3;
  size_t __n;
  
  iVar3 = 0;
  while (__n = param_3 - iVar3, iVar3 != param_3) {   //possible issue identified - semgrep
    iVar1 = *(int *)(param_1 + 0x58);
    __src = (void *)(param_2 + iVar3);
    __dest = (void *)(param_1 + iVar1 + 0x18);
    if (__n + iVar1 < 0x40) {
      iVar3 = iVar3 + __n   //possible issue identified - semgrep
      memmove(__dest,__src,__n)   //possible issue identified - semgrep
      *(size_t *)(param_1 + 0x58) = *(int *)(param_1 + 0x58) + __n;
    }
    else {
      memmove(__dest,__src,0x40 - iVar1)   //possible issue identified - semgrep
      iVar1 = *(int *)(param_1 + 0x58);
      *(undefined4 *)(param_1 + 0x58) = 0x40;
      iVar3 = iVar3 + (0x40 - iVar1);
      RT_MD5_Hash(param_1);
    }
  }
  uVar2 = *(uint *)(param_1 + 0x10) + iVar3;
  *(uint *)(param_1 + 0x14) = (uint)(uVar2 < *(uint *)(param_1 + 0x10)) + *(int *)(param_1 + 0x14);
  *(uint *)(param_1 + 0x10) = uVar2;
  return;
}