
int dh_set_pg(uchar *p,ulong plen,uchar *g,ulong glen,dh_key *key)

{
  undefined *puVar1;
  int iVar2;
  
  puVar1 = PTR_ltc_mp_001ecec8;
  if (key == (dh_key *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);
  }
  if (p == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);
  }
  if (g == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);
  }
  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {
    iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);
    if (iVar2 != 0) {
      return iVar2;
    }
    iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);
    if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {
      return 0;
    }
    dh_free(key);
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);
}



ulong dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)

{
  undefined *puVar1;
  ulong uVar2;
  
  puVar1 = PTR_ltc_mp_001ecec8;
  if (param_5 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);
  }
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);
  }
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);
  }
  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {
    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);
    if ((int)uVar2 != 0) {
      return uVar2;
    }
    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);
    if (((int)uVar2 == 0) &&
       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),
       (int)uVar2 == 0)) {
      return uVar2;
    }
    dh_free(param_5);
    return uVar2 & 0xffffffff;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
TEST R8,R8
JZ 0x00185897
MOV R12,RDI
TEST RDI,RDI
JZ 0x0018587f
MOV R15,RDX
TEST RDX,RDX
JZ 0x00185867
MOV RBP,qword ptr [0x001ecec8]
CMP qword ptr [RBP],0x0
JZ 0x0018584f
MOV R14,RSI
MOV R13,RCX
MOV RBX,R8
XOR EAX,EAX
LEA RCX,[R8 + 0x20]
LEA RDX,[R8 + 0x18]
LEA RSI,[R8 + 0x10]
LEA RDI,[R8 + 0x8]
XOR R8D,R8D
CALL 0x001135b0
TEST EAX,EAX
JNZ 0x00185820
MOV RDI,qword ptr [RBX + 0x18]
MOV RDX,R13
MOV RSI,R15
CALL qword ptr [RBP + 0xa0]
TEST EAX,EAX
JNZ 0x00185830
MOV RDI,qword ptr [RBX + 0x20]
MOV RDX,R14
MOV RSI,R12
CALL qword ptr [RBP + 0xa0]
TEST EAX,EAX
JNZ 0x00185830
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,RBX
MOV dword ptr [RSP + 0xc],EAX
CALL 0x00114d10
MOV EAX,dword ptr [RSP + 0xc]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDX,0x21
LEA RSI,[0x1d53e7]
LEA RDI,[0x1d53bd]
CALL 0x00114270
MOV EDX,0x20
LEA RSI,[0x1d53e7]
LEA RDI,[0x1d558c]
CALL 0x00114270
MOV EDX,0x1f
LEA RSI,[0x1d53e7]
LEA RDI,[0x1d557d]
CALL 0x00114270
MOV EDX,0x1e
LEA RSI,[0x1d53e7]
LEA RDI,[0x1d547d]
CALL 0x00114270
(translation_unit "ulong dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)\n\n{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}\n\n" (function_definition "ulong dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)\n\n{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" type_identifier (function_declarator "dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)" identifier (parameter_list "(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "long param_5" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (expression_statement "puVar1 = PTR_ltc_mp_001ecec8;" (assignment_expression "puVar1 = PTR_ltc_mp_001ecec8" identifier = identifier) ;) (if_statement "if (param_5 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e)" identifier (argument_list "("key != NULL","src/pk/dh/dh_set.c",0x1e)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\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("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }" { comment (expression_statement "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);" (call_expression "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f)" identifier (argument_list "("p != NULL","src/pk/dh/dh_set.c",0x1f)" ( (string_literal ""p != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\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("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }" { comment (expression_statement "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);" (call_expression "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20)" identifier (argument_list "("g != NULL","src/pk/dh/dh_set.c",0x20)" ( (string_literal ""g != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }" if (parenthesized_expression "(*(long *)PTR_ltc_mp_001ecec8 != 0)" ( (binary_expression "*(long *)PTR_ltc_mp_001ecec8 != 0" (pointer_expression "*(long *)PTR_ltc_mp_001ecec8" * (cast_expression "(long *)PTR_ltc_mp_001ecec8" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }" { (expression_statement "uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);" (assignment_expression "uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" identifier = (call_expression "ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" identifier (argument_list "(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" ( (binary_expression "param_5 + 8" identifier + number_literal) , (binary_expression "param_5 + 0x10" identifier + number_literal) , (binary_expression "param_5 + 0x18" identifier + number_literal) , (binary_expression "param_5 + 0x20" identifier + number_literal) , number_literal )))) ;) (if_statement "if ((int)uVar2 != 0) {\n      return uVar2;\n    }" if (parenthesized_expression "((int)uVar2 != 0)" ( (binary_expression "(int)uVar2 != 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);" (assignment_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" identifier = (call_expression "(**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" ( (pointer_expression "**(code **)(puVar1 + 0xa0)" * (pointer_expression "*(code **)(puVar1 + 0xa0)" * (cast_expression "(code **)(puVar1 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar1 + 0xa0)" ( (binary_expression "puVar1 + 0xa0" identifier + number_literal) ))))) )) (argument_list "(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" ( (pointer_expression "*(undefined8 *)(param_5 + 0x18)" * (cast_expression "(undefined8 *)(param_5 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_5 + 0x18)" ( (binary_expression "param_5 + 0x18" identifier + number_literal) )))) , identifier , identifier )))) ;) (if_statement "if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }" if (parenthesized_expression "(((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0))" ( (binary_expression "((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)" (parenthesized_expression "((int)uVar2 == 0)" ( (binary_expression "(int)uVar2 == 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) && (parenthesized_expression "(uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)" ( (comma_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0" (assignment_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" identifier = (call_expression "(**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" ( (pointer_expression "**(code **)(puVar1 + 0xa0)" * (pointer_expression "*(code **)(puVar1 + 0xa0)" * (cast_expression "(code **)(puVar1 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar1 + 0xa0)" ( (binary_expression "puVar1 + 0xa0" identifier + number_literal) ))))) )) (argument_list "(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" ( (pointer_expression "*(undefined8 *)(param_5 + 0x20)" * (cast_expression "(undefined8 *)(param_5 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_5 + 0x20)" ( (binary_expression "param_5 + 0x20" identifier + number_literal) )))) , identifier , identifier )))) , (binary_expression "(int)uVar2 == 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal)) ))) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "dh_free(param_5);" (call_expression "dh_free(param_5)" identifier (argument_list "(param_5)" ( identifier ))) ;) (return_statement "return uVar2 & 0xffffffff;" return (binary_expression "uVar2 & 0xffffffff" identifier & number_literal) ;) })) comment (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" identifier (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" ( (string_literal ""ltc_mp.name != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "int dh_set_pg(uchar *p,ulong plen,uchar *g,ulong glen,dh_key *key)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (p == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (g == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar2 != 0) {\n      return iVar2;\n    }\n    iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);\n    if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {\n      return 0;\n    }\n    dh_free(key);\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}\n\n" (function_definition "int dh_set_pg(uchar *p,ulong plen,uchar *g,ulong glen,dh_key *key)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (p == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (g == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar2 != 0) {\n      return iVar2;\n    }\n    iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);\n    if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {\n      return 0;\n    }\n    dh_free(key);\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" primitive_type (function_declarator "dh_set_pg(uchar *p,ulong plen,uchar *g,ulong glen,dh_key *key)" identifier (parameter_list "(uchar *p,ulong plen,uchar *g,ulong glen,dh_key *key)" ( (parameter_declaration "uchar *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "ulong plen" type_identifier identifier) , (parameter_declaration "uchar *g" type_identifier (pointer_declarator "*g" * identifier)) , (parameter_declaration "ulong glen" type_identifier identifier) , (parameter_declaration "dh_key *key" type_identifier (pointer_declarator "*key" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (p == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (g == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar2 != 0) {\n      return iVar2;\n    }\n    iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);\n    if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {\n      return 0;\n    }\n    dh_free(key);\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (expression_statement "puVar1 = PTR_ltc_mp_001ecec8;" (assignment_expression "puVar1 = PTR_ltc_mp_001ecec8" identifier = identifier) ;) (if_statement "if (key == (dh_key *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\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.c",0x1e);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e)" identifier (argument_list "("key != NULL","src/pk/dh/dh_set.c",0x1e)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (p == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }" if (parenthesized_expression "(p == (uchar *)0x0)" ( (binary_expression "p == (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("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }" { comment (expression_statement "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);" (call_expression "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f)" identifier (argument_list "("p != NULL","src/pk/dh/dh_set.c",0x1f)" ( (string_literal ""p != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (g == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }" if (parenthesized_expression "(g == (uchar *)0x0)" ( (binary_expression "g == (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("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }" { comment (expression_statement "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);" (call_expression "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20)" identifier (argument_list "("g != NULL","src/pk/dh/dh_set.c",0x20)" ( (string_literal ""g != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar2 != 0) {\n      return iVar2;\n    }\n    iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);\n    if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {\n      return 0;\n    }\n    dh_free(key);\n    return iVar2;\n  }" if (parenthesized_expression "(*(long *)PTR_ltc_mp_001ecec8 != 0)" ( (binary_expression "*(long *)PTR_ltc_mp_001ecec8 != 0" (pointer_expression "*(long *)PTR_ltc_mp_001ecec8" * (cast_expression "(long *)PTR_ltc_mp_001ecec8" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n    iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);\n    if (iVar2 != 0) {\n      return iVar2;\n    }\n    iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);\n    if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {\n      return 0;\n    }\n    dh_free(key);\n    return iVar2;\n  }" { (expression_statement "iVar2 = ltc_init_multi(&key->x,&key->y,&key->base,&key->prime,0);" (assignment_expression "iVar2 = 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 (iVar2 != 0) {\n      return iVar2;\n    }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar2;\n    }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen);" (assignment_expression "iVar2 = (**(code **)(puVar1 + 0xa0))(key->base,g,glen)" identifier = (call_expression "(**(code **)(puVar1 + 0xa0))(key->base,g,glen)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" ( (pointer_expression "**(code **)(puVar1 + 0xa0)" * (pointer_expression "*(code **)(puVar1 + 0xa0)" * (cast_expression "(code **)(puVar1 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar1 + 0xa0)" ( (binary_expression "puVar1 + 0xa0" identifier + number_literal) ))))) )) (argument_list "(key->base,g,glen)" ( (field_expression "key->base" identifier -> field_identifier) , identifier , identifier )))) ;) (if_statement "if ((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)) {\n      return 0;\n    }" if (parenthesized_expression "((iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0))" ( (binary_expression "(iVar2 == 0) && (iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) && (parenthesized_expression "(iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0)" ( (comma_expression "iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen), iVar2 == 0" (assignment_expression "iVar2 = (**(code **)(puVar1 + 0xa0))(key->prime,p,plen)" identifier = (call_expression "(**(code **)(puVar1 + 0xa0))(key->prime,p,plen)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" ( (pointer_expression "**(code **)(puVar1 + 0xa0)" * (pointer_expression "*(code **)(puVar1 + 0xa0)" * (cast_expression "(code **)(puVar1 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar1 + 0xa0)" ( (binary_expression "puVar1 + 0xa0" identifier + number_literal) ))))) )) (argument_list "(key->prime,p,plen)" ( (field_expression "key->prime" identifier -> field_identifier) , identifier , identifier )))) , (binary_expression "iVar2 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "dh_free(key);" (call_expression "dh_free(key)" identifier (argument_list "(key)" ( identifier ))) ;) (return_statement "return iVar2;" return identifier ;) })) comment (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" identifier (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" ( (string_literal ""ltc_mp.name != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "ulong dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)\n\n{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    \n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}\n\n" (function_definition "ulong dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)\n\n{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    \n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" type_identifier (function_declarator "dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)" identifier (parameter_list "(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "long param_5" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    \n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (expression_statement "puVar1 = PTR_ltc_mp_001ecec8;" (assignment_expression "puVar1 = PTR_ltc_mp_001ecec8" identifier = identifier) ;) (if_statement "if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }" { (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e)" identifier (argument_list "("key != NULL","src/pk/dh/dh_set.c",0x1e)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }" { (expression_statement "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);" (call_expression "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f)" identifier (argument_list "("p != NULL","src/pk/dh/dh_set.c",0x1f)" ( (string_literal ""p != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }" { (expression_statement "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);" (call_expression "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20)" identifier (argument_list "("g != NULL","src/pk/dh/dh_set.c",0x20)" ( (string_literal ""g != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }" if (parenthesized_expression "(*(long *)PTR_ltc_mp_001ecec8 != 0)" ( (binary_expression "*(long *)PTR_ltc_mp_001ecec8 != 0" (pointer_expression "*(long *)PTR_ltc_mp_001ecec8" * (cast_expression "(long *)PTR_ltc_mp_001ecec8" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }" { (expression_statement "uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);" (assignment_expression "uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" identifier = (call_expression "ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" identifier (argument_list "(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" ( (binary_expression "param_5 + 8" identifier + number_literal) , (binary_expression "param_5 + 0x10" identifier + number_literal) , (binary_expression "param_5 + 0x18" identifier + number_literal) , (binary_expression "param_5 + 0x20" identifier + number_literal) , number_literal )))) ;) (if_statement "if ((int)uVar2 != 0) {\n      return uVar2;\n    }" if (parenthesized_expression "((int)uVar2 != 0)" ( (binary_expression "(int)uVar2 != 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);" (assignment_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" identifier = (call_expression "(**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" ( (pointer_expression "**(code **)(puVar1 + 0xa0)" * (pointer_expression "*(code **)(puVar1 + 0xa0)" * (cast_expression "(code **)(puVar1 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar1 + 0xa0)" ( (binary_expression "puVar1 + 0xa0" identifier + number_literal) ))))) )) (argument_list "(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" ( (pointer_expression "*(undefined8 *)(param_5 + 0x18)" * (cast_expression "(undefined8 *)(param_5 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_5 + 0x18)" ( (binary_expression "param_5 + 0x18" identifier + number_literal) )))) , identifier , identifier )))) ;) (if_statement "if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }" if (parenthesized_expression "(((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0))" ( (binary_expression "((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)" (parenthesized_expression "((int)uVar2 == 0)" ( (binary_expression "(int)uVar2 == 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) && (parenthesized_expression "(uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)" ( (comma_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0" (assignment_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" identifier = (call_expression "(**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" ( (pointer_expression "**(code **)(puVar1 + 0xa0)" * (pointer_expression "*(code **)(puVar1 + 0xa0)" * (cast_expression "(code **)(puVar1 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar1 + 0xa0)" ( (binary_expression "puVar1 + 0xa0" identifier + number_literal) ))))) )) (argument_list "(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" ( (pointer_expression "*(undefined8 *)(param_5 + 0x20)" * (cast_expression "(undefined8 *)(param_5 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_5 + 0x20)" ( (binary_expression "param_5 + 0x20" identifier + number_literal) )))) , identifier , identifier )))) , (binary_expression "(int)uVar2 == 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal)) ))) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "dh_free(param_5);" (call_expression "dh_free(param_5)" identifier (argument_list "(param_5)" ( identifier ))) ;) (return_statement "return uVar2 & 0xffffffff;" return (binary_expression "uVar2 & 0xffffffff" identifier & number_literal) ;) })) (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" identifier (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" ( (string_literal ""ltc_mp.name != NULL"" " string_content ") , (string_literal ""src/pk/dh/dh_set.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = 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 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 (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) 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 { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT )))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT)) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (binary_expression IDENT & LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })))
(function_definition "ulong dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)\n\n{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    \n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" (type_identifier "ulong") (function_declarator "dh_set_pg(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)" (identifier "dh_set_pg") (parameter_list "(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "long param_5" (sized_type_specifier "long" (long "long")) (identifier "param_5")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  ulong uVar2;\n  \n  puVar1 = PTR_ltc_mp_001ecec8;\n  if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }\n  if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }\n  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }\n                    \n  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (expression_statement "puVar1 = PTR_ltc_mp_001ecec8;" (assignment_expression "puVar1 = PTR_ltc_mp_001ecec8" (identifier "puVar1") (= "=") (identifier "PTR_ltc_mp_001ecec8")) (; ";")) (if_statement "if (param_5 == 0) {\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);\n  }" ({ "{") (expression_statement "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);" (call_expression "crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e)" (identifier "crypt_argchk") (argument_list "("key != NULL","src/pk/dh/dh_set.c",0x1e)" (( "(") (string_literal ""key != NULL"" (" """) (string_content "key != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set.c"" (" """) (string_content "src/pk/dh/dh_set.c") (" """)) (, ",") (number_literal "0x1e") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1 == 0) {\n                    \n    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);\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("p != NULL","src/pk/dh/dh_set.c",0x1f);\n  }" ({ "{") (expression_statement "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);" (call_expression "crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f)" (identifier "crypt_argchk") (argument_list "("p != NULL","src/pk/dh/dh_set.c",0x1f)" (( "(") (string_literal ""p != NULL"" (" """) (string_content "p != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set.c"" (" """) (string_content "src/pk/dh/dh_set.c") (" """)) (, ",") (number_literal "0x1f") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_3 == 0) {\n                    \n    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);\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("g != NULL","src/pk/dh/dh_set.c",0x20);\n  }" ({ "{") (expression_statement "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);" (call_expression "crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20)" (identifier "crypt_argchk") (argument_list "("g != NULL","src/pk/dh/dh_set.c",0x20)" (( "(") (string_literal ""g != NULL"" (" """) (string_content "g != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set.c"" (" """) (string_content "src/pk/dh/dh_set.c") (" """)) (, ",") (number_literal "0x20") () ")"))) (; ";")) (} "}"))) (if_statement "if (*(long *)PTR_ltc_mp_001ecec8 != 0) {\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }" (if "if") (parenthesized_expression "(*(long *)PTR_ltc_mp_001ecec8 != 0)" (( "(") (binary_expression "*(long *)PTR_ltc_mp_001ecec8 != 0" (pointer_expression "*(long *)PTR_ltc_mp_001ecec8" (* "*") (cast_expression "(long *)PTR_ltc_mp_001ecec8" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_ltc_mp_001ecec8"))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);\n    if ((int)uVar2 != 0) {\n      return uVar2;\n    }\n    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);\n    if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }\n    dh_free(param_5);\n    return uVar2 & 0xffffffff;\n  }" ({ "{") (expression_statement "uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);" (assignment_expression "uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" (identifier "uVar2") (= "=") (call_expression "ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" (identifier "ltc_init_multi") (argument_list "(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0)" (( "(") (binary_expression "param_5 + 8" (identifier "param_5") (+ "+") (number_literal "8")) (, ",") (binary_expression "param_5 + 0x10" (identifier "param_5") (+ "+") (number_literal "0x10")) (, ",") (binary_expression "param_5 + 0x18" (identifier "param_5") (+ "+") (number_literal "0x18")) (, ",") (binary_expression "param_5 + 0x20" (identifier "param_5") (+ "+") (number_literal "0x20")) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if ((int)uVar2 != 0) {\n      return uVar2;\n    }" (if "if") (parenthesized_expression "((int)uVar2 != 0)" (( "(") (binary_expression "(int)uVar2 != 0" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return uVar2;\n    }" ({ "{") (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (expression_statement "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);" (assignment_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" (( "(") (pointer_expression "**(code **)(puVar1 + 0xa0)" (* "*") (pointer_expression "*(code **)(puVar1 + 0xa0)" (* "*") (cast_expression "(code **)(puVar1 + 0xa0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar1 + 0xa0)" (( "(") (binary_expression "puVar1 + 0xa0" (identifier "puVar1") (+ "+") (number_literal "0xa0")) () ")"))))) () ")")) (argument_list "(*(undefined8 *)(param_5 + 0x18),param_3,param_4)" (( "(") (pointer_expression "*(undefined8 *)(param_5 + 0x18)" (* "*") (cast_expression "(undefined8 *)(param_5 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_5 + 0x18)" (( "(") (binary_expression "param_5 + 0x18" (identifier "param_5") (+ "+") (number_literal "0x18")) () ")")))) (, ",") (identifier "param_3") (, ",") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)) {\n      return uVar2;\n    }" (if "if") (parenthesized_expression "(((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0))" (( "(") (binary_expression "((int)uVar2 == 0) &&\n       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)" (parenthesized_expression "((int)uVar2 == 0)" (( "(") (binary_expression "(int)uVar2 == 0" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0)" (( "(") (comma_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),\n       (int)uVar2 == 0" (assignment_expression "uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" (parenthesized_expression "(**(code **)(puVar1 + 0xa0))" (( "(") (pointer_expression "**(code **)(puVar1 + 0xa0)" (* "*") (pointer_expression "*(code **)(puVar1 + 0xa0)" (* "*") (cast_expression "(code **)(puVar1 + 0xa0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar1 + 0xa0)" (( "(") (binary_expression "puVar1 + 0xa0" (identifier "puVar1") (+ "+") (number_literal "0xa0")) () ")"))))) () ")")) (argument_list "(*(undefined8 *)(param_5 + 0x20),param_1,param_2)" (( "(") (pointer_expression "*(undefined8 *)(param_5 + 0x20)" (* "*") (cast_expression "(undefined8 *)(param_5 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_5 + 0x20)" (( "(") (binary_expression "param_5 + 0x20" (identifier "param_5") (+ "+") (number_literal "0x20")) () ")")))) (, ",") (identifier "param_1") (, ",") (identifier "param_2") () ")")))) (, ",") (binary_expression "(int)uVar2 == 0" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      return uVar2;\n    }" ({ "{") (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (expression_statement "dh_free(param_5);" (call_expression "dh_free(param_5)" (identifier "dh_free") (argument_list "(param_5)" (( "(") (identifier "param_5") () ")"))) (; ";")) (return_statement "return uVar2 & 0xffffffff;" (return "return") (binary_expression "uVar2 & 0xffffffff" (identifier "uVar2") (& "&") (number_literal "0xffffffff")) (; ";")) (} "}"))) (expression_statement "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);" (call_expression "crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" (identifier "crypt_argchk") (argument_list "("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21)" (( "(") (string_literal ""ltc_mp.name != NULL"" (" """) (string_content "ltc_mp.name != NULL") (" """)) (, ",") (string_literal ""src/pk/dh/dh_set.c"" (" """) (string_content "src/pk/dh/dh_set.c") (" """)) (, ",") (number_literal "0x21") () ")"))) (; ";")) (} "}")))

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

{
  type_4 *var_7;
  int var_6;
  
  var_7 = PTR_ltc_mp_001ecec8;
  if (var_1 == (type_3 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("key != NULL","src/pk/dh/dh_set.c",0x1e);
  }
  if (var_3 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("p != NULL","src/pk/dh/dh_set.c",0x1f);
  }
  if (var_4 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("g != NULL","src/pk/dh/dh_set.c",0x20);
  }
  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {
    var_6 = var_5(&var_1->x,&var_1->y,&var_1->base,&var_1->prime,0);
    if (var_6 != 0) {
      return var_6;
    }
    var_6 = (**(type_5 **)(var_7 + 0xa0))(var_1->base,var_4,glen);
    if ((var_6 == 0) && (var_6 = (**(type_5 **)(var_7 + 0xa0))(var_1->prime,var_3,plen), var_6 == 0)) {
      return 0;
    }
    var_8(var_1);
    return var_6;
  }
                    /* WARNING: Subroutine does not return */
  var_2("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);
}


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

ulong MASKED(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long param_5)

{
  undefined *puVar1;
  ulong uVar2;
  
  puVar1 = PTR_ltc_mp_001ecec8;
  if (param_5 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/pk/dh/dh_set.c",0x1e);
  }
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("p != NULL","src/pk/dh/dh_set.c",0x1f);
  }
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("g != NULL","src/pk/dh/dh_set.c",0x20);
  }
  if (*(long *)PTR_ltc_mp_001ecec8 != 0) {
    uVar2 = ltc_init_multi(param_5 + 8,param_5 + 0x10,param_5 + 0x18,param_5 + 0x20,0);
    if ((int)uVar2 != 0) {
      return uVar2;
    }
    uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x18),param_3,param_4);
    if (((int)uVar2 == 0) &&
       (uVar2 = (**(code **)(puVar1 + 0xa0))(*(undefined8 *)(param_5 + 0x20),param_1,param_2),
       (int)uVar2 == 0)) {
      return uVar2;
    }
    dh_free(param_5);
    return uVar2 & 0xffffffff;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("ltc_mp.name != NULL","src/pk/dh/dh_set.c",0x21);
}

