
int sha3_shake_memory(int num,uchar *in,ulong inlen,uchar *out,ulong *outlen)

{
  int iVar1;
  long in_FS_OFFSET;
  hash_state md;
  long local_30;
  
  local_30 = *(long *)(in_FS_OFFSET + 0x28);
  if (in == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);
  }
  if (out == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);
  }
  if (outlen == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);
  }
  iVar1 = sha3_shake_init(&md,num);
  if (iVar1 == 0) {
    iVar1 = sha3_process(&md,in,inlen);
    if (iVar1 == 0) {
      iVar1 = sha3_shake_done(&md,out,*outlen);
    }
  }
  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
    return iVar1;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}



void sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,
                      undefined8 *param_5)

{
  int iVar1;
  long in_FS_OFFSET;
  undefined1 auStack_1d8 [424];
  long local_30;
  
  local_30 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);
  }
  if (param_4 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);
  }
  if (param_5 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);
  }
  iVar1 = sha3_shake_init(auStack_1d8,param_1);
  if (iVar1 == 0) {
    iVar1 = sha3_process(auStack_1d8,param_2,param_3);
    if (iVar1 == 0) {
      sha3_shake_done(auStack_1d8,param_4,*param_5);
    }
  }
  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x1b0
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x1a8],RAX
XOR EAX,EAX
TEST RSI,RSI
JZ 0x00154653
MOV R12,RCX
TEST RCX,RCX
JZ 0x0015463b
MOV R13,R8
TEST R8,R8
JZ 0x00154623
MOV RBX,RSP
MOV RBP,RSI
MOV ESI,EDI
MOV R14,RDX
MOV RDI,RBX
CALL 0x00113ec0
TEST EAX,EAX
JZ 0x00154600
MOV RCX,qword ptr [RSP + 0x1a8]
XOR RCX,qword ptr FS:[0x28]
JNZ 0x0015466b
ADD RSP,0x1b0
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV RDX,R14
MOV RSI,RBP
MOV RDI,RBX
CALL 0x001136e0
TEST EAX,EAX
JNZ 0x001545d6
MOV RDX,qword ptr [R13]
MOV RSI,R12
MOV RDI,RBX
CALL 0x001138b0
JMP 0x001545d6
MOV EDX,0x127
LEA RSI,[0x1aefa6]
LEA RDI,[0x1ae804]
CALL 0x00114270
MOV EDX,0x126
LEA RSI,[0x1aefa6]
LEA RDI,[0x1a87a1]
CALL 0x00114270
MOV EDX,0x125
LEA RSI,[0x1aefa6]
LEA RDI,[0x1a8790]
CALL 0x00114270
CALL 0x00113880
(translation_unit "void sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "void sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" primitive_type (function_declarator "sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)" identifier (parameter_list "(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auStack_1d8 [424];" type_identifier (array_declarator "auStack_1d8 [424]" identifier [ number_literal ]) ;) (declaration "long local_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(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_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" { comment (expression_statement "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);" (call_expression "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125)" identifier (argument_list "("in != NULL","src/hashes/sha3.c",0x125)" ( (string_literal ""in != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_4 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" { comment (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126)" identifier (argument_list "("out != NULL","src/hashes/sha3.c",0x126)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" if (parenthesized_expression "(param_5 == (undefined8 *)0x0)" ( (binary_expression "param_5 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" { comment (expression_statement "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);" (call_expression "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127)" identifier (argument_list "("outlen != NULL","src/hashes/sha3.c",0x127)" ( (string_literal ""outlen != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "iVar1 = sha3_shake_init(auStack_1d8,param_1);" (assignment_expression "iVar1 = sha3_shake_init(auStack_1d8,param_1)" identifier = (call_expression "sha3_shake_init(auStack_1d8,param_1)" identifier (argument_list "(auStack_1d8,param_1)" ( identifier , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }" { (expression_statement "iVar1 = sha3_process(auStack_1d8,param_2,param_3);" (assignment_expression "iVar1 = sha3_process(auStack_1d8,param_2,param_3)" identifier = (call_expression "sha3_process(auStack_1d8,param_2,param_3)" identifier (argument_list "(auStack_1d8,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }" { (expression_statement "sha3_shake_done(auStack_1d8,param_4,*param_5);" (call_expression "sha3_shake_done(auStack_1d8,param_4,*param_5)" identifier (argument_list "(auStack_1d8,param_4,*param_5)" ( identifier , identifier , (pointer_expression "*param_5" * identifier) ))) ;) })) })) (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" if (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_30 == *(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    return;\n  }" { (return_statement "return;" return ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "int sha3_shake_memory(int num,uchar *in,ulong inlen,uchar *out,ulong *outlen)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  hash_state md;\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(&md,num);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(&md,in,inlen);\n    if (iVar1 == 0) {\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "int sha3_shake_memory(int num,uchar *in,ulong inlen,uchar *out,ulong *outlen)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  hash_state md;\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(&md,num);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(&md,in,inlen);\n    if (iVar1 == 0) {\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" primitive_type (function_declarator "sha3_shake_memory(int num,uchar *in,ulong inlen,uchar *out,ulong *outlen)" identifier (parameter_list "(int num,uchar *in,ulong inlen,uchar *out,ulong *outlen)" ( (parameter_declaration "int num" primitive_type identifier) , (parameter_declaration "uchar *in" type_identifier (pointer_declarator "*in" * identifier)) , (parameter_declaration "ulong inlen" type_identifier identifier) , (parameter_declaration "uchar *out" type_identifier (pointer_declarator "*out" * identifier)) , (parameter_declaration "ulong *outlen" type_identifier (pointer_declarator "*outlen" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  long in_FS_OFFSET;\n  hash_state md;\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(&md,num);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(&md,in,inlen);\n    if (iVar1 == 0) {\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "hash_state md;" type_identifier identifier ;) (declaration "long local_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(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 (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" if (parenthesized_expression "(in == (uchar *)0x0)" ( (binary_expression "in == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" { comment (expression_statement "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);" (call_expression "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125)" identifier (argument_list "("in != NULL","src/hashes/sha3.c",0x125)" ( (string_literal ""in != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" if (parenthesized_expression "(out == (uchar *)0x0)" ( (binary_expression "out == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" { comment (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126)" identifier (argument_list "("out != NULL","src/hashes/sha3.c",0x126)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" if (parenthesized_expression "(outlen == (ulong *)0x0)" ( (binary_expression "outlen == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" { comment (expression_statement "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);" (call_expression "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127)" identifier (argument_list "("outlen != NULL","src/hashes/sha3.c",0x127)" ( (string_literal ""outlen != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "iVar1 = sha3_shake_init(&md,num);" (assignment_expression "iVar1 = sha3_shake_init(&md,num)" identifier = (call_expression "sha3_shake_init(&md,num)" identifier (argument_list "(&md,num)" ( (pointer_expression "&md" & identifier) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n    iVar1 = sha3_process(&md,in,inlen);\n    if (iVar1 == 0) {\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = sha3_process(&md,in,inlen);\n    if (iVar1 == 0) {\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }\n  }" { (expression_statement "iVar1 = sha3_process(&md,in,inlen);" (assignment_expression "iVar1 = sha3_process(&md,in,inlen)" identifier = (call_expression "sha3_process(&md,in,inlen)" identifier (argument_list "(&md,in,inlen)" ( (pointer_expression "&md" & identifier) , identifier , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar1 = sha3_shake_done(&md,out,*outlen);\n    }" { (expression_statement "iVar1 = sha3_shake_done(&md,out,*outlen);" (assignment_expression "iVar1 = sha3_shake_done(&md,out,*outlen)" identifier = (call_expression "sha3_shake_done(&md,out,*outlen)" identifier (argument_list "(&md,out,*outlen)" ( (pointer_expression "&md" & identifier) , identifier , (pointer_expression "*outlen" * identifier) )))) ;) })) })) (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return iVar1;\n  }" if (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_30 == *(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    return iVar1;\n  }" { (return_statement "return iVar1;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "void sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  __stack_chk_fail();\n}\n\n" (function_definition "void sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  __stack_chk_fail();\n}" primitive_type (function_declarator "sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)" identifier (parameter_list "(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  __stack_chk_fail();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auStack_1d8 [424];" type_identifier (array_declarator "auStack_1d8 [424]" identifier [ number_literal ]) ;) (declaration "long local_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(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_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" { (expression_statement "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);" (call_expression "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125)" identifier (argument_list "("in != NULL","src/hashes/sha3.c",0x125)" ( (string_literal ""in != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" { (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126)" identifier (argument_list "("out != NULL","src/hashes/sha3.c",0x126)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" if (parenthesized_expression "(param_5 == (undefined8 *)0x0)" ( (binary_expression "param_5 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" { (expression_statement "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);" (call_expression "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127)" identifier (argument_list "("outlen != NULL","src/hashes/sha3.c",0x127)" ( (string_literal ""outlen != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "iVar1 = sha3_shake_init(auStack_1d8,param_1);" (assignment_expression "iVar1 = sha3_shake_init(auStack_1d8,param_1)" identifier = (call_expression "sha3_shake_init(auStack_1d8,param_1)" identifier (argument_list "(auStack_1d8,param_1)" ( identifier , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }" { (expression_statement "iVar1 = sha3_process(auStack_1d8,param_2,param_3);" (assignment_expression "iVar1 = sha3_process(auStack_1d8,param_2,param_3)" identifier = (call_expression "sha3_process(auStack_1d8,param_2,param_3)" identifier (argument_list "(auStack_1d8,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }" { (expression_statement "sha3_shake_done(auStack_1d8,param_4,*param_5);" (call_expression "sha3_shake_done(auStack_1d8,param_4,*param_5)" identifier (argument_list "(auStack_1d8,param_4,*param_5)" ( identifier , identifier , (pointer_expression "*param_5" * identifier) ))) ;) })) })) (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" if (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_30 == *(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    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (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 IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * 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 { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)\n\n{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  __stack_chk_fail();\n}" (primitive_type "void") (function_declarator "sha3_shake_memory(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)" (identifier "sha3_shake_memory") (parameter_list "(undefined4 param_1,long param_2,undefined8 param_3,long param_4,\n                      undefined8 *param_5)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "long param_4" (sized_type_specifier "long" (long "long")) (identifier "param_4")) (, ",") (parameter_declaration "undefined8 *param_5" (type_identifier "undefined8") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")"))) (compound_statement "{\n  int iVar1;\n  long in_FS_OFFSET;\n  undefined1 auStack_1d8 [424];\n  long local_30;\n  \n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }\n  if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }\n  iVar1 = sha3_shake_init(auStack_1d8,param_1);\n  if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }\n  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  __stack_chk_fail();\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "undefined1 auStack_1d8 [424];" (type_identifier "undefined1") (array_declarator "auStack_1d8 [424]" (identifier "auStack_1d8") ([ "[") (number_literal "424") (] "]")) (; ";")) (declaration "long local_30;" (sized_type_specifier "long" (long "long")) (identifier "local_30") (; ";")) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_30") (= "=") (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_2 == 0) {\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);\n  }" ({ "{") (expression_statement "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);" (call_expression "crypt_argchk("in != NULL","src/hashes/sha3.c",0x125)" (identifier "crypt_argchk") (argument_list "("in != NULL","src/hashes/sha3.c",0x125)" (( "(") (string_literal ""in != NULL"" (" """) (string_content "in != NULL") (" """)) (, ",") (string_literal ""src/hashes/sha3.c"" (" """) (string_content "src/hashes/sha3.c") (" """)) (, ",") (number_literal "0x125") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_4 == 0) {\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);\n  }" ({ "{") (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x126)" (identifier "crypt_argchk") (argument_list "("out != NULL","src/hashes/sha3.c",0x126)" (( "(") (string_literal ""out != NULL"" (" """) (string_content "out != NULL") (" """)) (, ",") (string_literal ""src/hashes/sha3.c"" (" """) (string_content "src/hashes/sha3.c") (" """)) (, ",") (number_literal "0x126") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" (if "if") (parenthesized_expression "(param_5 == (undefined8 *)0x0)" (( "(") (binary_expression "param_5 == (undefined8 *)0x0" (identifier "param_5") (== "==") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);\n  }" ({ "{") (expression_statement "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);" (call_expression "crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127)" (identifier "crypt_argchk") (argument_list "("outlen != NULL","src/hashes/sha3.c",0x127)" (( "(") (string_literal ""outlen != NULL"" (" """) (string_content "outlen != NULL") (" """)) (, ",") (string_literal ""src/hashes/sha3.c"" (" """) (string_content "src/hashes/sha3.c") (" """)) (, ",") (number_literal "0x127") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar1 = sha3_shake_init(auStack_1d8,param_1);" (assignment_expression "iVar1 = sha3_shake_init(auStack_1d8,param_1)" (identifier "iVar1") (= "=") (call_expression "sha3_shake_init(auStack_1d8,param_1)" (identifier "sha3_shake_init") (argument_list "(auStack_1d8,param_1)" (( "(") (identifier "auStack_1d8") (, ",") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar1 = sha3_process(auStack_1d8,param_2,param_3);\n    if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }\n  }" ({ "{") (expression_statement "iVar1 = sha3_process(auStack_1d8,param_2,param_3);" (assignment_expression "iVar1 = sha3_process(auStack_1d8,param_2,param_3)" (identifier "iVar1") (= "=") (call_expression "sha3_process(auStack_1d8,param_2,param_3)" (identifier "sha3_process") (argument_list "(auStack_1d8,param_2,param_3)" (( "(") (identifier "auStack_1d8") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      sha3_shake_done(auStack_1d8,param_4,*param_5);\n    }" ({ "{") (expression_statement "sha3_shake_done(auStack_1d8,param_4,*param_5);" (call_expression "sha3_shake_done(auStack_1d8,param_4,*param_5)" (identifier "sha3_shake_done") (argument_list "(auStack_1d8,param_4,*param_5)" (( "(") (identifier "auStack_1d8") (, ",") (identifier "param_4") (, ",") (pointer_expression "*param_5" (* "*") (identifier "param_5")) () ")"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" (if "if") (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_30 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_30") (== "==") (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    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

int function_1(int num,type_1 *var_2,type_2 inlen,type_1 *var_4,type_2 *var_5)

{
  int var_7;
  long var_1;
  type_3 md;
  long var_10;
  
  var_10 = *(long *)(var_1 + 0x28);
  if (var_2 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("in != NULL","src/hashes/sha3.c",0x125);
  }
  if (var_4 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("out != NULL","src/hashes/sha3.c",0x126);
  }
  if (var_5 == (type_2 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("outlen != NULL","src/hashes/sha3.c",0x127);
  }
  var_7 = var_6(&md,num);
  if (var_7 == 0) {
    var_7 = var_8(&md,var_2,inlen);
    if (var_7 == 0) {
      var_7 = var_9(&md,var_4,*var_5);
    }
  }
  if (var_10 == *(long *)(var_1 + 0x28)) {
    return var_7;
  }
                    /* WARNING: Subroutine does not return */
  var_11();
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (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: (identifier) 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)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) 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)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (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 (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))))

void MASKED(undefined4 param_1,long param_2,undefined8 param_3,long param_4,
                      undefined8 *param_5)

{
  int iVar1;
  long in_FS_OFFSET;
  undefined1 auStack_1d8 [424];
  long local_30;
  
  local_30 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("in != NULL","src/hashes/sha3.c",0x125);
  }
  if (param_4 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/hashes/sha3.c",0x126);
  }
  if (param_5 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("outlen != NULL","src/hashes/sha3.c",0x127);
  }
  iVar1 = sha3_shake_init(auStack_1d8,param_1);
  if (iVar1 == 0) {
    iVar1 = sha3_process(auStack_1d8,param_2,param_3);
    if (iVar1 == 0) {
      sha3_shake_done(auStack_1d8,param_4,*param_5);
    }
  }
  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

