
int dh_set_pg_dhparam(uchar *dhparam,ulong dhparamlen,dh_key *key)

{
  int iVar1;
  
  if (key == (dh_key *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);
  }
  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);
  }
  if (dhparam == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);
  }
  if (dhparamlen != 0) {
    iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);
    if (iVar1 == 0) {
      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);
      if (iVar1 != 0) {
        dh_free(key);
      }
    }
    return iVar1;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);
}



ulong dh_set_pg_dhparam(long param_1,long param_2,long param_3)

{
  ulong uVar1;
  
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);
  }
  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);
  }
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);
  }
  if (param_2 != 0) {
    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);
    if ((int)uVar1 == 0) {
      uVar1 = der_decode_sequence_multi
                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,
                         *(undefined8 *)(param_3 + 0x18),0,0,0);
      if ((int)uVar1 != 0) {
        dh_free(param_3);
        uVar1 = uVar1 & 0xffffffff;
      }
    }
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);
}


PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x10
TEST RDX,RDX
JZ 0x00178c80
MOV RAX,qword ptr [0x001ddec0]
CMP qword ptr [RAX],0x0
JZ 0x00178cc8
MOV RBP,RDI
TEST RDI,RDI
JZ 0x00178cb0
MOV R12,RSI
TEST RSI,RSI
JZ 0x00178c98
MOV RBX,RDX
LEA RCX,[RDX + 0x20]
XOR R8D,R8D
XOR EAX,EAX
LEA RDX,[RDX + 0x18]
LEA RSI,[RBX + 0x10]
LEA RDI,[RBX + 0x8]
CALL 0x001135b0
TEST EAX,EAX
JZ 0x00178c38
ADD RSP,0x10
POP RBX
POP RBP
POP R12
RET
SUB RSP,0x8
MOV R9D,0x2
MOV RSI,R12
MOV RDI,RBP
PUSH 0x0
MOV ECX,0x1
MOV EDX,0x2
PUSH 0x0
PUSH 0x0
PUSH qword ptr [RBX + 0x18]
MOV R8,qword ptr [RBX + 0x20]
PUSH 0x1
CALL 0x001137c0
ADD RSP,0x30
TEST EAX,EAX
JZ 0x00178c2b
MOV RDI,RBX
MOV dword ptr [RSP + 0xc],EAX
CALL 0x00114d00
MOV EAX,dword ptr [RSP + 0xc]
JMP 0x00178c2b
MOV EDX,0x1c
LEA RSI,[0x1c5de8]
LEA RDI,[0x1c5e5d]
CALL 0x00114270
MOV EDX,0x1f
LEA RSI,[0x1c5de8]
LEA RDI,[0x1c5e16]
CALL 0x00114270
MOV EDX,0x1e
LEA RSI,[0x1c5de8]
LEA RDI,[0x1c5e06]
CALL 0x00114270
MOV EDX,0x1d
LEA RSI,[0x1c5de8]
LEA RDI,[0x1c5d9d]
CALL 0x00114270
(translation_unit "ulong dh_set_pg_dhparam(long param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}\n\n" (function_definition "ulong dh_set_pg_dhparam(long param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" type_identifier (function_declarator "dh_set_pg_dhparam(long param_1,long param_2,long param_3)" identifier (parameter_list "(long param_1,long param_2,long param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" identifier (argument_list "("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" if (parenthesized_expression "(*(long *)PTR_ltc_mp_001ddec0 == 0)" ( (binary_expression "*(long *)PTR_ltc_mp_001ddec0 == 0" (pointer_expression "*(long *)PTR_ltc_mp_001ddec0" * (cast_expression "(long *)PTR_ltc_mp_001ddec0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" { comment (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" identifier (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" ( (string_literal ""ltc_mp.name != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" { comment (expression_statement "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);" (call_expression "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" identifier (argument_list "("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" ( (string_literal ""dhparam != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }" { (expression_statement "uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);" (assignment_expression "uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" identifier = (call_expression "ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" identifier (argument_list "(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" ( (binary_expression "param_3 + 8" identifier + number_literal) , (binary_expression "param_3 + 0x10" identifier + number_literal) , (binary_expression "param_3 + 0x18" identifier + number_literal) , (binary_expression "param_3 + 0x20" identifier + number_literal) , number_literal )))) ;) (if_statement "if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }" if (parenthesized_expression "((int)uVar1 == 0)" ( (binary_expression "(int)uVar1 == 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) (compound_statement "{\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }" { (expression_statement "uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);" (assignment_expression "uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" identifier = (call_expression "der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" identifier (argument_list "(param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" ( identifier , identifier , number_literal , number_literal , (pointer_expression "*(undefined8 *)(param_3 + 0x20)" * (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) , number_literal , number_literal , (pointer_expression "*(undefined8 *)(param_3 + 0x18)" * (cast_expression "(undefined8 *)(param_3 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x18)" ( (binary_expression "param_3 + 0x18" identifier + number_literal) )))) , number_literal , number_literal , number_literal )))) ;) (if_statement "if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }" if (parenthesized_expression "((int)uVar1 != 0)" ( (binary_expression "(int)uVar1 != 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }" { (expression_statement "dh_free(param_3);" (call_expression "dh_free(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (expression_statement "uVar1 = uVar1 & 0xffffffff;" (assignment_expression "uVar1 = uVar1 & 0xffffffff" identifier = (binary_expression "uVar1 & 0xffffffff" identifier & number_literal)) ;) })) })) (return_statement "return uVar1;" return identifier ;) })) comment (expression_statement "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);" (call_expression "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" identifier (argument_list "("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" ( (string_literal ""dhparamlen > 0"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "int dh_set_pg_dhparam(uchar *dhparam,ulong dhparamlen,dh_key *key)\n\n{\n  int iVar1;\n  \n  if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (dhparam == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (dhparamlen != 0) {\n    iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar1 == 0) {\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }\n    return iVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}\n\n" (function_definition "int dh_set_pg_dhparam(uchar *dhparam,ulong dhparamlen,dh_key *key)\n\n{\n  int iVar1;\n  \n  if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (dhparam == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (dhparamlen != 0) {\n    iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar1 == 0) {\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }\n    return iVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" primitive_type (function_declarator "dh_set_pg_dhparam(uchar *dhparam,ulong dhparamlen,dh_key *key)" identifier (parameter_list "(uchar *dhparam,ulong dhparamlen,dh_key *key)" ( (parameter_declaration "uchar *dhparam" type_identifier (pointer_declarator "*dhparam" * identifier)) , (parameter_declaration "ulong dhparamlen" type_identifier identifier) , (parameter_declaration "dh_key *key" type_identifier (pointer_declarator "*key" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  \n  if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (dhparam == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (dhparamlen != 0) {\n    iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar1 == 0) {\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }\n    return iVar1;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (if_statement "if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" if (parenthesized_expression "(key == (dh_key *)0x0)" ( (binary_expression "key == (dh_key *)0x0" identifier == (cast_expression "(dh_key *)0x0" ( (type_descriptor "dh_key *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" identifier (argument_list "("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" if (parenthesized_expression "(*(long *)PTR_ltc_mp_001ddec0 == 0)" ( (binary_expression "*(long *)PTR_ltc_mp_001ddec0 == 0" (pointer_expression "*(long *)PTR_ltc_mp_001ddec0" * (cast_expression "(long *)PTR_ltc_mp_001ddec0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" { comment (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" identifier (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" ( (string_literal ""ltc_mp.name != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (dhparam == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" if (parenthesized_expression "(dhparam == (uchar *)0x0)" ( (binary_expression "dhparam == (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("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" { comment (expression_statement "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);" (call_expression "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" identifier (argument_list "("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" ( (string_literal ""dhparam != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (dhparamlen != 0) {\n    iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar1 == 0) {\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }\n    return iVar1;\n  }" if (parenthesized_expression "(dhparamlen != 0)" ( (binary_expression "dhparamlen != 0" identifier != number_literal) )) (compound_statement "{\n    iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar1 == 0) {\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }\n    return iVar1;\n  }" { (expression_statement "iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);" (assignment_expression "iVar1 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0)" identifier = (call_expression "ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0)" identifier (argument_list "(&key->x,&key->y,&key->base,&key->prime,0)" ( (pointer_expression "&key->x" & (field_expression "key->x" identifier -> field_identifier)) , (pointer_expression "&key->y" & (field_expression "key->y" identifier -> field_identifier)) , (pointer_expression "&key->base" & (field_expression "key->base" identifier -> field_identifier)) , (pointer_expression "&key->prime" & (field_expression "key->prime" identifier -> field_identifier)) , number_literal )))) ;) (if_statement "if (iVar1 == 0) {\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);\n      if (iVar1 != 0) {\n        dh_free(key);\n      }\n    }" { (expression_statement "iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0);" (assignment_expression "iVar1 = der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0)" identifier = (call_expression "der_decode_sequence_multi(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0)" identifier (argument_list "(dhparam,dhparamlen,2,1,key->prime,2,1,key->base,0,0,0)" ( identifier , identifier , number_literal , number_literal , (field_expression "key->prime" identifier -> field_identifier) , number_literal , number_literal , (field_expression "key->base" identifier -> field_identifier) , number_literal , number_literal , number_literal )))) ;) (if_statement "if (iVar1 != 0) {\n        dh_free(key);\n      }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n        dh_free(key);\n      }" { (expression_statement "dh_free(key);" (call_expression "dh_free(key)" identifier (argument_list "(key)" ( identifier ))) ;) })) })) (return_statement "return iVar1;" return identifier ;) })) comment (expression_statement "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);" (call_expression "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" identifier (argument_list "("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" ( (string_literal ""dhparamlen > 0"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "ulong dh_set_pg_dhparam(long param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    \n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}\n\n" (function_definition "ulong dh_set_pg_dhparam(long param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    \n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" type_identifier (function_declarator "dh_set_pg_dhparam(long param_1,long param_2,long param_3)" identifier (parameter_list "(long param_1,long param_2,long param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    \n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" { (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" identifier (argument_list "("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" if (parenthesized_expression "(*(long *)PTR_ltc_mp_001ddec0 == 0)" ( (binary_expression "*(long *)PTR_ltc_mp_001ddec0 == 0" (pointer_expression "*(long *)PTR_ltc_mp_001ddec0" * (cast_expression "(long *)PTR_ltc_mp_001ddec0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" { (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" identifier (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" ( (string_literal ""ltc_mp.name != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" { (expression_statement "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);" (call_expression "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" identifier (argument_list "("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" ( (string_literal ""dhparam != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }" { (expression_statement "uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);" (assignment_expression "uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" identifier = (call_expression "ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" identifier (argument_list "(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" ( (binary_expression "param_3 + 8" identifier + number_literal) , (binary_expression "param_3 + 0x10" identifier + number_literal) , (binary_expression "param_3 + 0x18" identifier + number_literal) , (binary_expression "param_3 + 0x20" identifier + number_literal) , number_literal )))) ;) (if_statement "if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }" if (parenthesized_expression "((int)uVar1 == 0)" ( (binary_expression "(int)uVar1 == 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) (compound_statement "{\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }" { (expression_statement "uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);" (assignment_expression "uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" identifier = (call_expression "der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" identifier (argument_list "(param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" ( identifier , identifier , number_literal , number_literal , (pointer_expression "*(undefined8 *)(param_3 + 0x20)" * (cast_expression "(undefined8 *)(param_3 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) , number_literal , number_literal , (pointer_expression "*(undefined8 *)(param_3 + 0x18)" * (cast_expression "(undefined8 *)(param_3 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x18)" ( (binary_expression "param_3 + 0x18" identifier + number_literal) )))) , number_literal , number_literal , number_literal )))) ;) (if_statement "if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }" if (parenthesized_expression "((int)uVar1 != 0)" ( (binary_expression "(int)uVar1 != 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }" { (expression_statement "dh_free(param_3);" (call_expression "dh_free(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (expression_statement "uVar1 = uVar1 & 0xffffffff;" (assignment_expression "uVar1 = uVar1 & 0xffffffff" identifier = (binary_expression "uVar1 & 0xffffffff" identifier & number_literal)) ;) })) })) (return_statement "return uVar1;" return identifier ;) })) (expression_statement "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);" (call_expression "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" identifier (argument_list "("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" ( (string_literal ""dhparamlen > 0"" " string_content ") , (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (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 (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) 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 != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , LIT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT , LIT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT , LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) })) })) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })))
(function_definition "ulong dh_set_pg_dhparam(long param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    \n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" (type_identifier "ulong") (function_declarator "dh_set_pg_dhparam(long param_1,long param_2,long param_3)" (identifier "dh_set_pg_dhparam") (parameter_list "(long param_1,long param_2,long param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  \n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }\n  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }\n  if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }\n                    \n  crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (if_statement "if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);\n  }" ({ "{") (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" (identifier "crypt_argchk") (argument_list "("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c)" (( "(") (string_literal ""key != NULL"" (" """) (string_content "key != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" (" """) (string_content "src/pk/dh/dh_set_pg_dhparam.c") (" """)) (, ",") (number_literal "0x1c") () ")"))) (; ";")) (} "}"))) (if_statement "if (*(long *)PTR_ltc_mp_001ddec0 == 0) {\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" (if "if") (parenthesized_expression "(*(long *)PTR_ltc_mp_001ddec0 == 0)" (( "(") (binary_expression "*(long *)PTR_ltc_mp_001ddec0 == 0" (pointer_expression "*(long *)PTR_ltc_mp_001ddec0" (* "*") (cast_expression "(long *)PTR_ltc_mp_001ddec0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_ltc_mp_001ddec0"))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);\n  }" ({ "{") (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" (identifier "crypt_argchk") (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d)" (( "(") (string_literal ""ltc_mp.name != NULL"" (" """) (string_content "ltc_mp.name != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" (" """) (string_content "src/pk/dh/dh_set_pg_dhparam.c") (" """)) (, ",") (number_literal "0x1d") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1 == 0) {\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" (if "if") (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);\n  }" ({ "{") (expression_statement "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);" (call_expression "crypt_argchk("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" (identifier "crypt_argchk") (argument_list "("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e)" (( "(") (string_literal ""dhparam != NULL"" (" """) (string_content "dhparam != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" (" """) (string_content "src/pk/dh/dh_set_pg_dhparam.c") (" """)) (, ",") (number_literal "0x1e") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_2 != 0) {\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);\n    if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }\n    return uVar1;\n  }" ({ "{") (expression_statement "uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);" (assignment_expression "uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" (identifier "uVar1") (= "=") (call_expression "ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" (identifier "ltc_init_multi") (argument_list "(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) (, ",") (binary_expression "param_3 + 0x10" (identifier "param_3") (+ "+") (number_literal "0x10")) (, ",") (binary_expression "param_3 + 0x18" (identifier "param_3") (+ "+") (number_literal "0x18")) (, ",") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if ((int)uVar1 == 0) {\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }" (if "if") (parenthesized_expression "((int)uVar1 == 0)" (( "(") (binary_expression "(int)uVar1 == 0" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);\n      if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }\n    }" ({ "{") (expression_statement "uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0);" (assignment_expression "uVar1 = der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" (identifier "uVar1") (= "=") (call_expression "der_decode_sequence_multi\n                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" (identifier "der_decode_sequence_multi") (argument_list "(param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,\n                         *(undefined8 *)(param_3 + 0x18),0,0,0)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (number_literal "2") (, ",") (number_literal "1") (, ",") (pointer_expression "*(undefined8 *)(param_3 + 0x20)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (, ",") (number_literal "2") (, ",") (number_literal "1") (, ",") (pointer_expression "*(undefined8 *)(param_3 + 0x18)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x18)" (( "(") (binary_expression "param_3 + 0x18" (identifier "param_3") (+ "+") (number_literal "0x18")) () ")")))) (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if ((int)uVar1 != 0) {\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }" (if "if") (parenthesized_expression "((int)uVar1 != 0)" (( "(") (binary_expression "(int)uVar1 != 0" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        dh_free(param_3);\n        uVar1 = uVar1 & 0xffffffff;\n      }" ({ "{") (expression_statement "dh_free(param_3);" (call_expression "dh_free(param_3)" (identifier "dh_free") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")"))) (; ";")) (expression_statement "uVar1 = uVar1 & 0xffffffff;" (assignment_expression "uVar1 = uVar1 & 0xffffffff" (identifier "uVar1") (= "=") (binary_expression "uVar1 & 0xffffffff" (identifier "uVar1") (& "&") (number_literal "0xffffffff"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (expression_statement "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);" (call_expression "crypt_argchk("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" (identifier "crypt_argchk") (argument_list "("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f)" (( "(") (string_literal ""dhparamlen > 0"" (" """) (string_content "dhparamlen > 0") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set_pg_dhparam.c"" (" """) (string_content "src/pk/dh/dh_set_pg_dhparam.c") (" """)) (, ",") (number_literal "0x1f") () ")"))) (; ";")) (} "}")))

int function_1(type_1 *var_3,type_2 var_4,type_3 *var_1)

{
  int var_6;
  
  if (var_1 == (type_3 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("key != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1c);
  }
  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {
                    /* WARNING: Subroutine does not return */
    var_2("ltc_mp.name != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1d);
  }
  if (var_3 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("dhparam != NULL","src/pk/dh/dh_set_pg_dhparam.c",0x1e);
  }
  if (var_4 != 0) {
    var_6 = var_5(&var_1->x,&var_1->y,&var_1->base,&var_1->prime,0);
    if (var_6 == 0) {
      var_6 = var_7(var_3,var_4,2,1,var_1->prime,2,1,var_1->base,0,0,0);
      if (var_6 != 0) {
        var_8(var_1);
      }
    }
    return var_6;
  }
                    /* WARNING: Subroutine does not return */
  var_2("dhparamlen > 0","src/pk/dh/dh_set_pg_dhparam.c",0x1f);
}


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

ulong MASKED(long param_1,long param_2,long param_3)

{
  ulong uVar1;
  
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/pk/dh/MASKED.c",0x1c);
  }
  if (*(long *)PTR_ltc_mp_001ddec0 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("ltc_mp.name != NULL","src/pk/dh/MASKED.c",0x1d);
  }
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("dhparam != NULL","src/pk/dh/MASKED.c",0x1e);
  }
  if (param_2 != 0) {
    uVar1 = ltc_init_multi(param_3 + 8,param_3 + 0x10,param_3 + 0x18,param_3 + 0x20,0);
    if ((int)uVar1 == 0) {
      uVar1 = der_decode_sequence_multi
                        (param_1,param_2,2,1,*(undefined8 *)(param_3 + 0x20),2,1,
                         *(undefined8 *)(param_3 + 0x18),0,0,0);
      if ((int)uVar1 != 0) {
        dh_free(param_3);
        uVar1 = uVar1 & 0xffffffff;
      }
    }
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("dhparamlen > 0","src/pk/dh/MASKED.c",0x1f);
}

