
void blowfish_ssh2_sdctr(void *handle,uchar *blk,int len)

{
  long lVar1;
  uint uVar2;
  word32 xR;
  word32 xL;
  word32 wVar3;
  long in_FS_OFFSET;
  word32 b [2];
  
  lVar1 = *(long *)(in_FS_OFFSET + 0x28);
  if ((len & 7U) != 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");
  }
  xL = *(word32 *)((long)handle + 0x1048);
  xR = *(word32 *)((long)handle + 0x104c);
  wVar3 = xR;
  if (0 < len) {
    wVar3 = xR + 1 + (len - 1U >> 3);
    do {
      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);
      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];
      *blk = (byte)(uVar2 >> 0x18);
      blk[1] = (byte)(uVar2 >> 0x10);
      blk[2] = (byte)(uVar2 >> 8);
      blk[3] = blk[3] ^ (byte)b[0];
      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];
      blk[4] = (byte)(uVar2 >> 0x18);
      blk[5] = (byte)(uVar2 >> 0x10);
      blk[6] = (byte)(uVar2 >> 8);
      blk[7] = blk[7] ^ (byte)b[1];
      xR = xR + 1;
      xL = xL + (xR == 0);
      blk = blk + 8;
    } while (xR != wVar3);
  }
  *(word32 *)((long)handle + 0x1048) = xL;
  *(word32 *)((long)handle + 0x104c) = wVar3;
  if (lVar1 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}



void FUN_001483a4(long param_1,byte *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  long in_FS_OFFSET;
  uint local_48;
  uint local_44;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if ((param_3 & 7) != 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");
  }
  iVar3 = *(int *)(param_1 + 0x1048);
  iVar2 = *(int *)(param_1 + 0x104c);
  iVar4 = iVar2;
  if (0 < (int)param_3) {
    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);
    do {
      FUN_0014779c(iVar3,iVar2,&local_48,param_1);
      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48
      ;
      *param_2 = (byte)(uVar1 >> 0x18);
      param_2[1] = (byte)(uVar1 >> 0x10);
      param_2[2] = (byte)(uVar1 >> 8);
      param_2[3] = param_2[3] ^ (byte)local_48;
      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^
              local_44;
      param_2[4] = (byte)(uVar1 >> 0x18);
      param_2[5] = (byte)(uVar1 >> 0x10);
      param_2[6] = (byte)(uVar1 >> 8);
      param_2[7] = param_2[7] ^ (byte)local_44;
      iVar2 = iVar2 + 1;
      iVar3 = iVar3 + (uint)(iVar2 == 0);
      param_2 = param_2 + 8;
    } while (iVar2 != iVar4);
  }
  *(int *)(param_1 + 0x1048) = iVar3;
  *(int *)(param_1 + 0x104c) = iVar4;
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x8],RAX
XOR EAX,EAX
TEST DL,0x7
JNZ 0x001484cf
MOV R12,RDI
MOV RBX,RSI
MOV R13D,dword ptr [RDI + 0x1048]
MOV EBP,dword ptr [RDI + 0x104c]
TEST EDX,EDX
JLE 0x001484ee
SUB EDX,0x1
SHR EDX,0x3
LEA R14D,[RBP + RDX*0x1 + 0x1]
MOV R15,RSP
MOV RCX,R12
MOV RDX,R15
MOV ESI,EBP
MOV EDI,R13D
CALL 0x0014779c
MOVZX EAX,byte ptr [RBX]
SHL EAX,0x18
MOVZX EDX,byte ptr [RBX + 0x1]
SHL EDX,0x10
OR EAX,EDX
MOVZX EDX,byte ptr [RBX + 0x3]
OR EAX,EDX
MOVZX EDX,byte ptr [RBX + 0x2]
SHL EDX,0x8
OR EAX,EDX
MOV ECX,dword ptr [RSP]
MOV EDX,EAX
XOR EDX,ECX
MOV ESI,EDX
SHR ESI,0x18
MOV byte ptr [RBX],SIL
MOV ESI,EDX
SHR ESI,0x10
MOV byte ptr [RBX + 0x1],SIL
MOVZX EDX,DH
MOV byte ptr [RBX + 0x2],DL
XOR EAX,ECX
MOV byte ptr [RBX + 0x3],AL
MOVZX EAX,byte ptr [RBX + 0x4]
SHL EAX,0x18
MOVZX EDX,byte ptr [RBX + 0x5]
SHL EDX,0x10
OR EAX,EDX
MOVZX EDX,byte ptr [RBX + 0x7]
OR EAX,EDX
MOVZX EDX,byte ptr [RBX + 0x6]
SHL EDX,0x8
OR EAX,EDX
MOV ECX,dword ptr [RSP + 0x4]
MOV EDX,EAX
XOR EDX,ECX
MOV ESI,EDX
SHR ESI,0x18
MOV byte ptr [RBX + 0x4],SIL
MOV ESI,EDX
SHR ESI,0x10
MOV byte ptr [RBX + 0x5],SIL
MOVZX EDX,DH
MOV byte ptr [RBX + 0x6],DL
XOR EAX,ECX
MOV byte ptr [RBX + 0x7],AL
ADD EBP,0x1
CMP EBP,0x1
ADC R13D,0x0
ADD RBX,0x8
CMP EBP,R14D
JNZ 0x001483f4
MOV dword ptr [R12 + 0x1048],R13D
MOV dword ptr [R12 + 0x104c],R14D
MOV RAX,qword ptr [RSP + 0x8]
XOR RAX,qword ptr FS:[0x28]
JNZ 0x001484f3
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
LEA RCX,[0x1c2700]
MOV EDX,0x1b5
LEA RSI,[0x1c2697]
LEA RDI,[0x1c26a2]
CALL 0x00114a20
MOV R14D,EBP
JMP 0x001484a0
CALL 0x00115250
(translation_unit "void FUN_001483a4(long param_1,byte *param_2,uint param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}\n\n" (function_definition "void FUN_001483a4(long param_1,byte *param_2,uint param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001483a4(long param_1,byte *param_2,uint param_3)" identifier (parameter_list "(long param_1,byte *param_2,uint param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "uint local_48;" type_identifier identifier ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if ((param_3 & 7) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" if (parenthesized_expression "((param_3 & 7) != 0)" ( (binary_expression "(param_3 & 7) != 0" (parenthesized_expression "(param_3 & 7)" ( (binary_expression "param_3 & 7" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" { comment (expression_statement "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");" (call_expression "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" identifier (argument_list "("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" ( (string_literal ""(len & 7) == 0"" " string_content ") , (string_literal ""sshblowf.c"" " string_content ") , number_literal , (string_literal ""blowfish_msb_sdctr"" " string_content ") ))) ;) })) (expression_statement "iVar3 = *(int *)(param_1 + 0x1048);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1048)" identifier = (pointer_expression "*(int *)(param_1 + 0x1048)" * (cast_expression "(int *)(param_1 + 0x1048)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1048)" ( (binary_expression "param_1 + 0x1048" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x104c);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x104c)" identifier = (pointer_expression "*(int *)(param_1 + 0x104c)" * (cast_expression "(int *)(param_1 + 0x104c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x104c)" ( (binary_expression "param_1 + 0x104c" identifier + number_literal) ))))) ;) (expression_statement "iVar4 = iVar2;" (assignment_expression "iVar4 = iVar2" identifier = identifier) ;) (if_statement "if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }" if (parenthesized_expression "(0 < (int)param_3)" ( (binary_expression "0 < (int)param_3" number_literal < (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }" { (expression_statement "iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);" (assignment_expression "iVar4 = iVar2 + 1 + (param_3 - 1 >> 3)" identifier = (binary_expression "iVar2 + 1 + (param_3 - 1 >> 3)" (binary_expression "iVar2 + 1" identifier + number_literal) + (parenthesized_expression "(param_3 - 1 >> 3)" ( (binary_expression "param_3 - 1 >> 3" (binary_expression "param_3 - 1" identifier - number_literal) >> number_literal) )))) ;) (do_statement "do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);" do (compound_statement "{\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    }" { (expression_statement "FUN_0014779c(iVar3,iVar2,&local_48,param_1);" (call_expression "FUN_0014779c(iVar3,iVar2,&local_48,param_1)" identifier (argument_list "(iVar3,iVar2,&local_48,param_1)" ( identifier , identifier , (pointer_expression "&local_48" & identifier) , identifier ))) ;) (expression_statement "uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;" (assignment_expression "uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48" identifier = (binary_expression "((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48" (parenthesized_expression "((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8)" ( (binary_expression "(uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8" (binary_expression "(uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10" (binary_expression "(uint)*param_2 << 0x18" (binary_expression "(uint)*param_2" (parenthesized_expression "(uint)" ( identifier )) * identifier) << number_literal) | (binary_expression "(uint)param_2[1] << 0x10" (cast_expression "(uint)param_2[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) << number_literal)) | (binary_expression "(uint)param_2[2] << 8" (cast_expression "(uint)param_2[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[2]" identifier [ number_literal ])) << number_literal)) )) ^ identifier)) ;) (expression_statement "*param_2 = (byte)(uVar1 >> 0x18);" (assignment_expression "*param_2 = (byte)(uVar1 >> 0x18)" (pointer_expression "*param_2" * identifier) = (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "param_2[1] = (byte)(uVar1 >> 0x10);" (assignment_expression "param_2[1] = (byte)(uVar1 >> 0x10)" (subscript_expression "param_2[1]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 0x10)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x10)" ( (binary_expression "uVar1 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "param_2[2] = (byte)(uVar1 >> 8);" (assignment_expression "param_2[2] = (byte)(uVar1 >> 8)" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 8)" ( (binary_expression "uVar1 >> 8" identifier >> number_literal) )))) ;) (expression_statement "param_2[3] = param_2[3] ^ (byte)local_48;" (assignment_expression "param_2[3] = param_2[3] ^ (byte)local_48" (subscript_expression "param_2[3]" identifier [ number_literal ]) = (binary_expression "param_2[3] ^ (byte)local_48" (subscript_expression "param_2[3]" identifier [ number_literal ]) ^ (cast_expression "(byte)local_48" ( (type_descriptor "byte" type_identifier) ) identifier))) ;) (expression_statement "uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;" (assignment_expression "uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44" identifier = (binary_expression "((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44" (parenthesized_expression "((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8)" ( (binary_expression "(uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8" (binary_expression "(uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10" (binary_expression "(uint)param_2[4] << 0x18" (cast_expression "(uint)param_2[4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[4]" identifier [ number_literal ])) << number_literal) | (binary_expression "(uint)param_2[5] << 0x10" (cast_expression "(uint)param_2[5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[5]" identifier [ number_literal ])) << number_literal)) | (binary_expression "(uint)param_2[6] << 8" (cast_expression "(uint)param_2[6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[6]" identifier [ number_literal ])) << number_literal)) )) ^ identifier)) ;) (expression_statement "param_2[4] = (byte)(uVar1 >> 0x18);" (assignment_expression "param_2[4] = (byte)(uVar1 >> 0x18)" (subscript_expression "param_2[4]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "param_2[5] = (byte)(uVar1 >> 0x10);" (assignment_expression "param_2[5] = (byte)(uVar1 >> 0x10)" (subscript_expression "param_2[5]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 0x10)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x10)" ( (binary_expression "uVar1 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "param_2[6] = (byte)(uVar1 >> 8);" (assignment_expression "param_2[6] = (byte)(uVar1 >> 8)" (subscript_expression "param_2[6]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 8)" ( (binary_expression "uVar1 >> 8" identifier >> number_literal) )))) ;) (expression_statement "param_2[7] = param_2[7] ^ (byte)local_44;" (assignment_expression "param_2[7] = param_2[7] ^ (byte)local_44" (subscript_expression "param_2[7]" identifier [ number_literal ]) = (binary_expression "param_2[7] ^ (byte)local_44" (subscript_expression "param_2[7]" identifier [ number_literal ]) ^ (cast_expression "(byte)local_44" ( (type_descriptor "byte" type_identifier) ) identifier))) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = iVar3 + (uint)(iVar2 == 0);" (assignment_expression "iVar3 = iVar3 + (uint)(iVar2 == 0)" identifier = (binary_expression "iVar3 + (uint)(iVar2 == 0)" identifier + (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))))) ;) (expression_statement "param_2 = param_2 + 8;" (assignment_expression "param_2 = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar2 != iVar4)" ( (binary_expression "iVar2 != iVar4" identifier != identifier) )) ;) })) (expression_statement "*(int *)(param_1 + 0x1048) = iVar3;" (assignment_expression "*(int *)(param_1 + 0x1048) = iVar3" (pointer_expression "*(int *)(param_1 + 0x1048)" * (cast_expression "(int *)(param_1 + 0x1048)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1048)" ( (binary_expression "param_1 + 0x1048" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x104c) = iVar4;" (assignment_expression "*(int *)(param_1 + 0x104c) = iVar4" (pointer_expression "*(int *)(param_1 + 0x104c)" * (cast_expression "(int *)(param_1 + 0x104c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x104c)" ( (binary_expression "param_1 + 0x104c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void blowfish_ssh2_sdctr(void *handle,uchar *blk,int len)\n\n{\n  long lVar1;\n  uint uVar2;\n  word32 xR;\n  word32 xL;\n  word32 wVar3;\n  long in_FS_OFFSET;\n  word32 b [2];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((len & 7U) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  xL = *(word32 *)((long)handle + 0x1048);\n  xR = *(word32 *)((long)handle + 0x104c);\n  wVar3 = xR;\n  if (0 < len) {\n    wVar3 = xR + 1 + (len - 1U >> 3);\n    do {\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    } while (xR != wVar3);\n  }\n  *(word32 *)((long)handle + 0x1048) = xL;\n  *(word32 *)((long)handle + 0x104c) = wVar3;\n  if (lVar1 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}\n\n" (function_definition "void blowfish_ssh2_sdctr(void *handle,uchar *blk,int len)\n\n{\n  long lVar1;\n  uint uVar2;\n  word32 xR;\n  word32 xL;\n  word32 wVar3;\n  long in_FS_OFFSET;\n  word32 b [2];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((len & 7U) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  xL = *(word32 *)((long)handle + 0x1048);\n  xR = *(word32 *)((long)handle + 0x104c);\n  wVar3 = xR;\n  if (0 < len) {\n    wVar3 = xR + 1 + (len - 1U >> 3);\n    do {\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    } while (xR != wVar3);\n  }\n  *(word32 *)((long)handle + 0x1048) = xL;\n  *(word32 *)((long)handle + 0x104c) = wVar3;\n  if (lVar1 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" primitive_type (function_declarator "blowfish_ssh2_sdctr(void *handle,uchar *blk,int len)" identifier (parameter_list "(void *handle,uchar *blk,int len)" ( (parameter_declaration "void *handle" primitive_type (pointer_declarator "*handle" * identifier)) , (parameter_declaration "uchar *blk" type_identifier (pointer_declarator "*blk" * identifier)) , (parameter_declaration "int len" primitive_type identifier) ))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  word32 xR;\n  word32 xL;\n  word32 wVar3;\n  long in_FS_OFFSET;\n  word32 b [2];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((len & 7U) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  xL = *(word32 *)((long)handle + 0x1048);\n  xR = *(word32 *)((long)handle + 0x104c);\n  wVar3 = xR;\n  if (0 < len) {\n    wVar3 = xR + 1 + (len - 1U >> 3);\n    do {\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    } while (xR != wVar3);\n  }\n  *(word32 *)((long)handle + 0x1048) = xL;\n  *(word32 *)((long)handle + 0x104c) = wVar3;\n  if (lVar1 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "word32 xR;" type_identifier identifier ;) (declaration "word32 xL;" type_identifier identifier ;) (declaration "word32 wVar3;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "word32 b [2];" type_identifier (array_declarator "b [2]" identifier [ number_literal ]) ;) (expression_statement "lVar1 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar1 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if ((len & 7U) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" if (parenthesized_expression "((len & 7U) != 0)" ( (binary_expression "(len & 7U) != 0" (parenthesized_expression "(len & 7U)" ( (binary_expression "len & 7U" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" { comment (expression_statement "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");" (call_expression "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" identifier (argument_list "("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" ( (string_literal ""(len & 7) == 0"" " string_content ") , (string_literal ""sshblowf.c"" " string_content ") , number_literal , (string_literal ""blowfish_msb_sdctr"" " string_content ") ))) ;) })) (expression_statement "xL = *(word32 *)((long)handle + 0x1048);" (assignment_expression "xL = *(word32 *)((long)handle + 0x1048)" identifier = (pointer_expression "*(word32 *)((long)handle + 0x1048)" * (cast_expression "(word32 *)((long)handle + 0x1048)" ( (type_descriptor "word32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x1048)" ( (binary_expression "(long)handle + 0x1048" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "xR = *(word32 *)((long)handle + 0x104c);" (assignment_expression "xR = *(word32 *)((long)handle + 0x104c)" identifier = (pointer_expression "*(word32 *)((long)handle + 0x104c)" * (cast_expression "(word32 *)((long)handle + 0x104c)" ( (type_descriptor "word32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x104c)" ( (binary_expression "(long)handle + 0x104c" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "wVar3 = xR;" (assignment_expression "wVar3 = xR" identifier = identifier) ;) (if_statement "if (0 < len) {\n    wVar3 = xR + 1 + (len - 1U >> 3);\n    do {\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    } while (xR != wVar3);\n  }" if (parenthesized_expression "(0 < len)" ( (binary_expression "0 < len" number_literal < identifier) )) (compound_statement "{\n    wVar3 = xR + 1 + (len - 1U >> 3);\n    do {\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    } while (xR != wVar3);\n  }" { (expression_statement "wVar3 = xR + 1 + (len - 1U >> 3);" (assignment_expression "wVar3 = xR + 1 + (len - 1U >> 3)" identifier = (binary_expression "xR + 1 + (len - 1U >> 3)" (binary_expression "xR + 1" identifier + number_literal) + (parenthesized_expression "(len - 1U >> 3)" ( (binary_expression "len - 1U >> 3" (binary_expression "len - 1U" identifier - number_literal) >> number_literal) )))) ;) (do_statement "do {\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    } while (xR != wVar3);" do (compound_statement "{\n      blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);\n      uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];\n      *blk = (byte)(uVar2 >> 0x18);\n      blk[1] = (byte)(uVar2 >> 0x10);\n      blk[2] = (byte)(uVar2 >> 8);\n      blk[3] = blk[3] ^ (byte)b[0];\n      uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];\n      blk[4] = (byte)(uVar2 >> 0x18);\n      blk[5] = (byte)(uVar2 >> 0x10);\n      blk[6] = (byte)(uVar2 >> 8);\n      blk[7] = blk[7] ^ (byte)b[1];\n      xR = xR + 1;\n      xL = xL + (xR == 0);\n      blk = blk + 8;\n    }" { (expression_statement "blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle);" (call_expression "blowfish_encrypt(xL,xR,b,(BlowfishContext *)handle)" identifier (argument_list "(xL,xR,b,(BlowfishContext *)handle)" ( identifier , identifier , identifier , (cast_expression "(BlowfishContext *)handle" ( (type_descriptor "BlowfishContext *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0];" (assignment_expression "uVar2 = ((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0]" identifier = (binary_expression "((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8) ^ b[0]" (parenthesized_expression "((uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8)" ( (binary_expression "(uint)*blk << 0x18 | (uint)blk[1] << 0x10 | (uint)blk[2] << 8" (binary_expression "(uint)*blk << 0x18 | (uint)blk[1] << 0x10" (binary_expression "(uint)*blk << 0x18" (binary_expression "(uint)*blk" (parenthesized_expression "(uint)" ( identifier )) * identifier) << number_literal) | (binary_expression "(uint)blk[1] << 0x10" (cast_expression "(uint)blk[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "blk[1]" identifier [ number_literal ])) << number_literal)) | (binary_expression "(uint)blk[2] << 8" (cast_expression "(uint)blk[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "blk[2]" identifier [ number_literal ])) << number_literal)) )) ^ (subscript_expression "b[0]" identifier [ number_literal ]))) ;) (expression_statement "*blk = (byte)(uVar2 >> 0x18);" (assignment_expression "*blk = (byte)(uVar2 >> 0x18)" (pointer_expression "*blk" * identifier) = (call_expression "(byte)(uVar2 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar2 >> 0x18)" ( (binary_expression "uVar2 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "blk[1] = (byte)(uVar2 >> 0x10);" (assignment_expression "blk[1] = (byte)(uVar2 >> 0x10)" (subscript_expression "blk[1]" identifier [ number_literal ]) = (call_expression "(byte)(uVar2 >> 0x10)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar2 >> 0x10)" ( (binary_expression "uVar2 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "blk[2] = (byte)(uVar2 >> 8);" (assignment_expression "blk[2] = (byte)(uVar2 >> 8)" (subscript_expression "blk[2]" identifier [ number_literal ]) = (call_expression "(byte)(uVar2 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar2 >> 8)" ( (binary_expression "uVar2 >> 8" identifier >> number_literal) )))) ;) (expression_statement "blk[3] = blk[3] ^ (byte)b[0];" (assignment_expression "blk[3] = blk[3] ^ (byte)b[0]" (subscript_expression "blk[3]" identifier [ number_literal ]) = (binary_expression "blk[3] ^ (byte)b[0]" (subscript_expression "blk[3]" identifier [ number_literal ]) ^ (cast_expression "(byte)b[0]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "b[0]" identifier [ number_literal ])))) ;) (expression_statement "uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1];" (assignment_expression "uVar2 = ((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1]" identifier = (binary_expression "((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8) ^ b[1]" (parenthesized_expression "((uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8)" ( (binary_expression "(uint)blk[4] << 0x18 | (uint)blk[5] << 0x10 | (uint)blk[6] << 8" (binary_expression "(uint)blk[4] << 0x18 | (uint)blk[5] << 0x10" (binary_expression "(uint)blk[4] << 0x18" (cast_expression "(uint)blk[4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "blk[4]" identifier [ number_literal ])) << number_literal) | (binary_expression "(uint)blk[5] << 0x10" (cast_expression "(uint)blk[5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "blk[5]" identifier [ number_literal ])) << number_literal)) | (binary_expression "(uint)blk[6] << 8" (cast_expression "(uint)blk[6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "blk[6]" identifier [ number_literal ])) << number_literal)) )) ^ (subscript_expression "b[1]" identifier [ number_literal ]))) ;) (expression_statement "blk[4] = (byte)(uVar2 >> 0x18);" (assignment_expression "blk[4] = (byte)(uVar2 >> 0x18)" (subscript_expression "blk[4]" identifier [ number_literal ]) = (call_expression "(byte)(uVar2 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar2 >> 0x18)" ( (binary_expression "uVar2 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "blk[5] = (byte)(uVar2 >> 0x10);" (assignment_expression "blk[5] = (byte)(uVar2 >> 0x10)" (subscript_expression "blk[5]" identifier [ number_literal ]) = (call_expression "(byte)(uVar2 >> 0x10)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar2 >> 0x10)" ( (binary_expression "uVar2 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "blk[6] = (byte)(uVar2 >> 8);" (assignment_expression "blk[6] = (byte)(uVar2 >> 8)" (subscript_expression "blk[6]" identifier [ number_literal ]) = (call_expression "(byte)(uVar2 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar2 >> 8)" ( (binary_expression "uVar2 >> 8" identifier >> number_literal) )))) ;) (expression_statement "blk[7] = blk[7] ^ (byte)b[1];" (assignment_expression "blk[7] = blk[7] ^ (byte)b[1]" (subscript_expression "blk[7]" identifier [ number_literal ]) = (binary_expression "blk[7] ^ (byte)b[1]" (subscript_expression "blk[7]" identifier [ number_literal ]) ^ (cast_expression "(byte)b[1]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "b[1]" identifier [ number_literal ])))) ;) (expression_statement "xR = xR + 1;" (assignment_expression "xR = xR + 1" identifier = (binary_expression "xR + 1" identifier + number_literal)) ;) (expression_statement "xL = xL + (xR == 0);" (assignment_expression "xL = xL + (xR == 0)" identifier = (binary_expression "xL + (xR == 0)" identifier + (parenthesized_expression "(xR == 0)" ( (binary_expression "xR == 0" identifier == number_literal) )))) ;) (expression_statement "blk = blk + 8;" (assignment_expression "blk = blk + 8" identifier = (binary_expression "blk + 8" identifier + number_literal)) ;) }) while (parenthesized_expression "(xR != wVar3)" ( (binary_expression "xR != wVar3" identifier != identifier) )) ;) })) (expression_statement "*(word32 *)((long)handle + 0x1048) = xL;" (assignment_expression "*(word32 *)((long)handle + 0x1048) = xL" (pointer_expression "*(word32 *)((long)handle + 0x1048)" * (cast_expression "(word32 *)((long)handle + 0x1048)" ( (type_descriptor "word32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x1048)" ( (binary_expression "(long)handle + 0x1048" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "*(word32 *)((long)handle + 0x104c) = wVar3;" (assignment_expression "*(word32 *)((long)handle + 0x104c) = wVar3" (pointer_expression "*(word32 *)((long)handle + 0x104c)" * (cast_expression "(word32 *)((long)handle + 0x104c)" ( (type_descriptor "word32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x104c)" ( (binary_expression "(long)handle + 0x104c" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if (lVar1 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(lVar1 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar1 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_001483a4(long param_1,byte *param_2,uint param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}\n\n" (function_definition "void FUN_001483a4(long param_1,byte *param_2,uint param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001483a4(long param_1,byte *param_2,uint param_3)" identifier (parameter_list "(long param_1,byte *param_2,uint param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "uint local_48;" type_identifier identifier ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" if (parenthesized_expression "((param_3 & 7) != 0)" ( (binary_expression "(param_3 & 7) != 0" (parenthesized_expression "(param_3 & 7)" ( (binary_expression "param_3 & 7" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" { (expression_statement "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");" (call_expression "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" identifier (argument_list "("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" ( (string_literal ""(len & 7) == 0"" " string_content ") , (string_literal ""sshblowf.c"" " string_content ") , number_literal , (string_literal ""blowfish_msb_sdctr"" " string_content ") ))) ;) })) (expression_statement "iVar3 = *(int *)(param_1 + 0x1048);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1048)" identifier = (pointer_expression "*(int *)(param_1 + 0x1048)" * (cast_expression "(int *)(param_1 + 0x1048)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1048)" ( (binary_expression "param_1 + 0x1048" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x104c);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x104c)" identifier = (pointer_expression "*(int *)(param_1 + 0x104c)" * (cast_expression "(int *)(param_1 + 0x104c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x104c)" ( (binary_expression "param_1 + 0x104c" identifier + number_literal) ))))) ;) (expression_statement "iVar4 = iVar2;" (assignment_expression "iVar4 = iVar2" identifier = identifier) ;) (if_statement "if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }" if (parenthesized_expression "(0 < (int)param_3)" ( (binary_expression "0 < (int)param_3" number_literal < (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }" { (expression_statement "iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);" (assignment_expression "iVar4 = iVar2 + 1 + (param_3 - 1 >> 3)" identifier = (binary_expression "iVar2 + 1 + (param_3 - 1 >> 3)" (binary_expression "iVar2 + 1" identifier + number_literal) + (parenthesized_expression "(param_3 - 1 >> 3)" ( (binary_expression "param_3 - 1 >> 3" (binary_expression "param_3 - 1" identifier - number_literal) >> number_literal) )))) ;) (do_statement "do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);" do (compound_statement "{\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    }" { (expression_statement "FUN_0014779c(iVar3,iVar2,&local_48,param_1);" (call_expression "FUN_0014779c(iVar3,iVar2,&local_48,param_1)" identifier (argument_list "(iVar3,iVar2,&local_48,param_1)" ( identifier , identifier , (pointer_expression "&local_48" & identifier) , identifier ))) ;) (expression_statement "uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;" (assignment_expression "uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48" identifier = (binary_expression "((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48" (parenthesized_expression "((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8)" ( (binary_expression "(uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8" (binary_expression "(uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10" (binary_expression "(uint)*param_2 << 0x18" (binary_expression "(uint)*param_2" (parenthesized_expression "(uint)" ( identifier )) * identifier) << number_literal) | (binary_expression "(uint)param_2[1] << 0x10" (cast_expression "(uint)param_2[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) << number_literal)) | (binary_expression "(uint)param_2[2] << 8" (cast_expression "(uint)param_2[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[2]" identifier [ number_literal ])) << number_literal)) )) ^ identifier)) ;) (expression_statement "*param_2 = (byte)(uVar1 >> 0x18);" (assignment_expression "*param_2 = (byte)(uVar1 >> 0x18)" (pointer_expression "*param_2" * identifier) = (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "param_2[1] = (byte)(uVar1 >> 0x10);" (assignment_expression "param_2[1] = (byte)(uVar1 >> 0x10)" (subscript_expression "param_2[1]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 0x10)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x10)" ( (binary_expression "uVar1 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "param_2[2] = (byte)(uVar1 >> 8);" (assignment_expression "param_2[2] = (byte)(uVar1 >> 8)" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 8)" ( (binary_expression "uVar1 >> 8" identifier >> number_literal) )))) ;) (expression_statement "param_2[3] = param_2[3] ^ (byte)local_48;" (assignment_expression "param_2[3] = param_2[3] ^ (byte)local_48" (subscript_expression "param_2[3]" identifier [ number_literal ]) = (binary_expression "param_2[3] ^ (byte)local_48" (subscript_expression "param_2[3]" identifier [ number_literal ]) ^ (cast_expression "(byte)local_48" ( (type_descriptor "byte" type_identifier) ) identifier))) ;) (expression_statement "uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;" (assignment_expression "uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44" identifier = (binary_expression "((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44" (parenthesized_expression "((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8)" ( (binary_expression "(uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8" (binary_expression "(uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10" (binary_expression "(uint)param_2[4] << 0x18" (cast_expression "(uint)param_2[4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[4]" identifier [ number_literal ])) << number_literal) | (binary_expression "(uint)param_2[5] << 0x10" (cast_expression "(uint)param_2[5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[5]" identifier [ number_literal ])) << number_literal)) | (binary_expression "(uint)param_2[6] << 8" (cast_expression "(uint)param_2[6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_2[6]" identifier [ number_literal ])) << number_literal)) )) ^ identifier)) ;) (expression_statement "param_2[4] = (byte)(uVar1 >> 0x18);" (assignment_expression "param_2[4] = (byte)(uVar1 >> 0x18)" (subscript_expression "param_2[4]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "param_2[5] = (byte)(uVar1 >> 0x10);" (assignment_expression "param_2[5] = (byte)(uVar1 >> 0x10)" (subscript_expression "param_2[5]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 0x10)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x10)" ( (binary_expression "uVar1 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "param_2[6] = (byte)(uVar1 >> 8);" (assignment_expression "param_2[6] = (byte)(uVar1 >> 8)" (subscript_expression "param_2[6]" identifier [ number_literal ]) = (call_expression "(byte)(uVar1 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 8)" ( (binary_expression "uVar1 >> 8" identifier >> number_literal) )))) ;) (expression_statement "param_2[7] = param_2[7] ^ (byte)local_44;" (assignment_expression "param_2[7] = param_2[7] ^ (byte)local_44" (subscript_expression "param_2[7]" identifier [ number_literal ]) = (binary_expression "param_2[7] ^ (byte)local_44" (subscript_expression "param_2[7]" identifier [ number_literal ]) ^ (cast_expression "(byte)local_44" ( (type_descriptor "byte" type_identifier) ) identifier))) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = iVar3 + (uint)(iVar2 == 0);" (assignment_expression "iVar3 = iVar3 + (uint)(iVar2 == 0)" identifier = (binary_expression "iVar3 + (uint)(iVar2 == 0)" identifier + (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))))) ;) (expression_statement "param_2 = param_2 + 8;" (assignment_expression "param_2 = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar2 != iVar4)" ( (binary_expression "iVar2 != iVar4" identifier != identifier) )) ;) })) (expression_statement "*(int *)(param_1 + 0x1048) = iVar3;" (assignment_expression "*(int *)(param_1 + 0x1048) = iVar3" (pointer_expression "*(int *)(param_1 + 0x1048)" * (cast_expression "(int *)(param_1 + 0x1048)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1048)" ( (binary_expression "param_1 + 0x1048" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x104c) = iVar4;" (assignment_expression "*(int *)(param_1 + 0x104c) = iVar4" (pointer_expression "*(int *)(param_1 + 0x104c)" * (cast_expression "(int *)(param_1 + 0x104c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x104c)" ( (binary_expression "param_1 + 0x104c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" { (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) >> LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) << LIT) | (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) << LIT)) | (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) << LIT)) )) ^ IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) ^ (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) << LIT) | (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) << LIT)) | (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) << LIT)) )) ^ IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) ^ (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (return_statement return ;) })))
(function_definition "void FUN_001483a4(long param_1,byte *param_2,uint param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001483a4(long param_1,byte *param_2,uint param_3)" (identifier "FUN_001483a4") (parameter_list "(long param_1,byte *param_2,uint param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "byte *param_2" (type_identifier "byte") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  uint local_48;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }\n  iVar3 = *(int *)(param_1 + 0x1048);\n  iVar2 = *(int *)(param_1 + 0x104c);\n  iVar4 = iVar2;\n  if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }\n  *(int *)(param_1 + 0x1048) = iVar3;\n  *(int *)(param_1 + 0x104c) = iVar4;\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "uint local_48;" (type_identifier "uint") (identifier "local_48") (; ";")) (declaration "uint local_44;" (type_identifier "uint") (identifier "local_44") (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if ((param_3 & 7) != 0) {\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" (if "if") (parenthesized_expression "((param_3 & 7) != 0)" (( "(") (binary_expression "(param_3 & 7) != 0" (parenthesized_expression "(param_3 & 7)" (( "(") (binary_expression "param_3 & 7" (identifier "param_3") (& "&") (number_literal "7")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");\n  }" ({ "{") (expression_statement "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");" (call_expression "__assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" (identifier "__assert_fail") (argument_list "("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr")" (( "(") (string_literal ""(len & 7) == 0"" (" """) (string_content "(len & 7) == 0") (" """)) (, ",") (string_literal ""sshblowf.c"" (" """) (string_content "sshblowf.c") (" """)) (, ",") (number_literal "0x1b5") (, ",") (string_literal ""blowfish_msb_sdctr"" (" """) (string_content "blowfish_msb_sdctr") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar3 = *(int *)(param_1 + 0x1048);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1048)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x1048)" (* "*") (cast_expression "(int *)(param_1 + 0x1048)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1048)" (( "(") (binary_expression "param_1 + 0x1048" (identifier "param_1") (+ "+") (number_literal "0x1048")) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x104c);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x104c)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x104c)" (* "*") (cast_expression "(int *)(param_1 + 0x104c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x104c)" (( "(") (binary_expression "param_1 + 0x104c" (identifier "param_1") (+ "+") (number_literal "0x104c")) () ")"))))) (; ";")) (expression_statement "iVar4 = iVar2;" (assignment_expression "iVar4 = iVar2" (identifier "iVar4") (= "=") (identifier "iVar2")) (; ";")) (if_statement "if (0 < (int)param_3) {\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }" (if "if") (parenthesized_expression "(0 < (int)param_3)" (( "(") (binary_expression "0 < (int)param_3" (number_literal "0") (< "<") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3"))) () ")")) (compound_statement "{\n    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);\n    do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);\n  }" ({ "{") (expression_statement "iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);" (assignment_expression "iVar4 = iVar2 + 1 + (param_3 - 1 >> 3)" (identifier "iVar4") (= "=") (binary_expression "iVar2 + 1 + (param_3 - 1 >> 3)" (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1")) (+ "+") (parenthesized_expression "(param_3 - 1 >> 3)" (( "(") (binary_expression "param_3 - 1 >> 3" (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) (>> ">>") (number_literal "3")) () ")")))) (; ";")) (do_statement "do {\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    } while (iVar2 != iVar4);" (do "do") (compound_statement "{\n      FUN_0014779c(iVar3,iVar2,&local_48,param_1);\n      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;\n      *param_2 = (byte)(uVar1 >> 0x18);\n      param_2[1] = (byte)(uVar1 >> 0x10);\n      param_2[2] = (byte)(uVar1 >> 8);\n      param_2[3] = param_2[3] ^ (byte)local_48;\n      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;\n      param_2[4] = (byte)(uVar1 >> 0x18);\n      param_2[5] = (byte)(uVar1 >> 0x10);\n      param_2[6] = (byte)(uVar1 >> 8);\n      param_2[7] = param_2[7] ^ (byte)local_44;\n      iVar2 = iVar2 + 1;\n      iVar3 = iVar3 + (uint)(iVar2 == 0);\n      param_2 = param_2 + 8;\n    }" ({ "{") (expression_statement "FUN_0014779c(iVar3,iVar2,&local_48,param_1);" (call_expression "FUN_0014779c(iVar3,iVar2,&local_48,param_1)" (identifier "FUN_0014779c") (argument_list "(iVar3,iVar2,&local_48,param_1)" (( "(") (identifier "iVar3") (, ",") (identifier "iVar2") (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48\n      ;" (assignment_expression "uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48" (identifier "uVar1") (= "=") (binary_expression "((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48" (parenthesized_expression "((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8)" (( "(") (binary_expression "(uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8" (binary_expression "(uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10" (binary_expression "(uint)*param_2 << 0x18" (binary_expression "(uint)*param_2" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "param_2")) (<< "<<") (number_literal "0x18")) (| "|") (binary_expression "(uint)param_2[1] << 0x10" (cast_expression "(uint)param_2[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (<< "<<") (number_literal "0x10"))) (| "|") (binary_expression "(uint)param_2[2] << 8" (cast_expression "(uint)param_2[2]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (<< "<<") (number_literal "8"))) () ")")) (^ "^") (identifier "local_48"))) (; ";")) (expression_statement "*param_2 = (byte)(uVar1 >> 0x18);" (assignment_expression "*param_2 = (byte)(uVar1 >> 0x18)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 0x18)" (( "(") (binary_expression "uVar1 >> 0x18" (identifier "uVar1") (>> ">>") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "param_2[1] = (byte)(uVar1 >> 0x10);" (assignment_expression "param_2[1] = (byte)(uVar1 >> 0x10)" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (= "=") (call_expression "(byte)(uVar1 >> 0x10)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 0x10)" (( "(") (binary_expression "uVar1 >> 0x10" (identifier "uVar1") (>> ">>") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "param_2[2] = (byte)(uVar1 >> 8);" (assignment_expression "param_2[2] = (byte)(uVar1 >> 8)" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (= "=") (call_expression "(byte)(uVar1 >> 8)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 8)" (( "(") (binary_expression "uVar1 >> 8" (identifier "uVar1") (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "param_2[3] = param_2[3] ^ (byte)local_48;" (assignment_expression "param_2[3] = param_2[3] ^ (byte)local_48" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (= "=") (binary_expression "param_2[3] ^ (byte)local_48" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (^ "^") (cast_expression "(byte)local_48" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_48")))) (; ";")) (expression_statement "uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44;" (assignment_expression "uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44" (identifier "uVar1") (= "=") (binary_expression "((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^\n              local_44" (parenthesized_expression "((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8)" (( "(") (binary_expression "(uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8" (binary_expression "(uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10" (binary_expression "(uint)param_2[4] << 0x18" (cast_expression "(uint)param_2[4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]"))) (<< "<<") (number_literal "0x18")) (| "|") (binary_expression "(uint)param_2[5] << 0x10" (cast_expression "(uint)param_2[5]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]"))) (<< "<<") (number_literal "0x10"))) (| "|") (binary_expression "(uint)param_2[6] << 8" (cast_expression "(uint)param_2[6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]"))) (<< "<<") (number_literal "8"))) () ")")) (^ "^") (identifier "local_44"))) (; ";")) (expression_statement "param_2[4] = (byte)(uVar1 >> 0x18);" (assignment_expression "param_2[4] = (byte)(uVar1 >> 0x18)" (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]")) (= "=") (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 0x18)" (( "(") (binary_expression "uVar1 >> 0x18" (identifier "uVar1") (>> ">>") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "param_2[5] = (byte)(uVar1 >> 0x10);" (assignment_expression "param_2[5] = (byte)(uVar1 >> 0x10)" (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")) (= "=") (call_expression "(byte)(uVar1 >> 0x10)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 0x10)" (( "(") (binary_expression "uVar1 >> 0x10" (identifier "uVar1") (>> ">>") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "param_2[6] = (byte)(uVar1 >> 8);" (assignment_expression "param_2[6] = (byte)(uVar1 >> 8)" (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]")) (= "=") (call_expression "(byte)(uVar1 >> 8)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 8)" (( "(") (binary_expression "uVar1 >> 8" (identifier "uVar1") (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "param_2[7] = param_2[7] ^ (byte)local_44;" (assignment_expression "param_2[7] = param_2[7] ^ (byte)local_44" (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]")) (= "=") (binary_expression "param_2[7] ^ (byte)local_44" (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]")) (^ "^") (cast_expression "(byte)local_44" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_44")))) (; ";")) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = iVar3 + (uint)(iVar2 == 0);" (assignment_expression "iVar3 = iVar3 + (uint)(iVar2 == 0)" (identifier "iVar3") (= "=") (binary_expression "iVar3 + (uint)(iVar2 == 0)" (identifier "iVar3") (+ "+") (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "param_2 = param_2 + 8;" (assignment_expression "param_2 = param_2 + 8" (identifier "param_2") (= "=") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar2 != iVar4)" (( "(") (binary_expression "iVar2 != iVar4" (identifier "iVar2") (!= "!=") (identifier "iVar4")) () ")")) (; ";")) (} "}"))) (expression_statement "*(int *)(param_1 + 0x1048) = iVar3;" (assignment_expression "*(int *)(param_1 + 0x1048) = iVar3" (pointer_expression "*(int *)(param_1 + 0x1048)" (* "*") (cast_expression "(int *)(param_1 + 0x1048)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1048)" (( "(") (binary_expression "param_1 + 0x1048" (identifier "param_1") (+ "+") (number_literal "0x1048")) () ")")))) (= "=") (identifier "iVar3")) (; ";")) (expression_statement "*(int *)(param_1 + 0x104c) = iVar4;" (assignment_expression "*(int *)(param_1 + 0x104c) = iVar4" (pointer_expression "*(int *)(param_1 + 0x104c)" (* "*") (cast_expression "(int *)(param_1 + 0x104c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x104c)" (( "(") (binary_expression "param_1 + 0x104c" (identifier "param_1") (+ "+") (number_literal "0x104c")) () ")")))) (= "=") (identifier "iVar4")) (; ";")) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" (if "if") (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (!= "!=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" ({ "{") (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(void *handle,type_1 *var_6,int var_2)

{
  long var_10;
  type_2 var_7;
  type_3 var_4;
  type_3 var_8;
  type_3 var_9;
  long var_1;
  type_3 b [2];
  
  var_10 = *(long *)(var_1 + 0x28);
  if ((var_2 & 7U) != 0) {
                    /* WARNING: Subroutine does not return */
    var_3("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");
  }
  var_8 = *(type_3 *)((long)handle + 0x1048);
  var_4 = *(type_3 *)((long)handle + 0x104c);
  var_9 = var_4;
  if (0 < var_2) {
    var_9 = var_4 + 1 + (var_2 - 1U >> 3);
    do {
      var_5(var_8,var_4,b,(type_4 *)handle);
      var_7 = ((type_2)*var_6 << 0x18 | (type_2)var_6[1] << 0x10 | (type_2)var_6[2] << 8) ^ b[0];
      *var_6 = (type_5)(var_7 >> 0x18);
      var_6[1] = (type_5)(var_7 >> 0x10);
      var_6[2] = (type_5)(var_7 >> 8);
      var_6[3] = var_6[3] ^ (type_5)b[0];
      var_7 = ((type_2)var_6[4] << 0x18 | (type_2)var_6[5] << 0x10 | (type_2)var_6[6] << 8) ^ b[1];
      var_6[4] = (type_5)(var_7 >> 0x18);
      var_6[5] = (type_5)(var_7 >> 0x10);
      var_6[6] = (type_5)(var_7 >> 8);
      var_6[7] = var_6[7] ^ (type_5)b[1];
      var_4 = var_4 + 1;
      var_8 = var_8 + (var_4 == 0);
      var_6 = var_6 + 8;
    } while (var_4 != var_9);
  }
  *(type_3 *)((long)handle + 0x1048) = var_8;
  *(type_3 *)((long)handle + 0x104c) = var_9;
  if (var_10 != *(long *)(var_1 + 0x28)) {
                    /* WARNING: Subroutine does not return */
    var_11();
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))))) (do_statement body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal)))) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal)))) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (return_statement))))

void MASKED(long param_1,byte *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  long in_FS_OFFSET;
  uint local_48;
  uint local_44;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if ((param_3 & 7) != 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("(len & 7) == 0","sshblowf.c",0x1b5,"blowfish_msb_sdctr");
  }
  iVar3 = *(int *)(param_1 + 0x1048);
  iVar2 = *(int *)(param_1 + 0x104c);
  iVar4 = iVar2;
  if (0 < (int)param_3) {
    iVar4 = iVar2 + 1 + (param_3 - 1 >> 3);
    do {
      FUN_0014779c(iVar3,iVar2,&local_48,param_1);
      uVar1 = ((uint)*param_2 << 0x18 | (uint)param_2[1] << 0x10 | (uint)param_2[2] << 8) ^ local_48
      ;
      *param_2 = (byte)(uVar1 >> 0x18);
      param_2[1] = (byte)(uVar1 >> 0x10);
      param_2[2] = (byte)(uVar1 >> 8);
      param_2[3] = param_2[3] ^ (byte)local_48;
      uVar1 = ((uint)param_2[4] << 0x18 | (uint)param_2[5] << 0x10 | (uint)param_2[6] << 8) ^
              local_44;
      param_2[4] = (byte)(uVar1 >> 0x18);
      param_2[5] = (byte)(uVar1 >> 0x10);
      param_2[6] = (byte)(uVar1 >> 8);
      param_2[7] = param_2[7] ^ (byte)local_44;
      iVar2 = iVar2 + 1;
      iVar3 = iVar3 + (uint)(iVar2 == 0);
      param_2 = param_2 + 8;
    } while (iVar2 != iVar4);
  }
  *(int *)(param_1 + 0x1048) = iVar3;
  *(int *)(param_1 + 0x104c) = iVar4;
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}

