
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void * ecdsa_newkey(ssh_signkey *self,char *data,int len)

{
  undefined8 *puVar1;
  int iVar2;
  uint *puVar3;
  char *key;
  long in_FS_OFFSET;
  int local_44;
  char *local_40 [2];
  int slen;
  char *p;
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  puVar1 = (undefined8 *)self->extra;
  local_44 = len;
  local_40[0] = data;
  getstring(local_40,&local_44,&p,&slen);
  key = p;
  if (p == (char *)0x0) goto LAB_00153a26;
  puVar3 = (uint *)(*(code *)*puVar1)();
  if ((*puVar3 & 0xfffffffd) != 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,
                  "ecdsa_newkey");
  }
  if (*puVar3 == 0) {
    getstring(local_40,&local_44,&p,&slen);
    key = p;
    if (p == (char *)0x0) goto LAB_00153a26;
    iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));
    if (iVar2 == 0) {
      key = (char *)0x0;
      goto LAB_00153a26;
    }
  }
  key = (char *)safemalloc(1,0x38);
  *(ssh_signkey **)key = self;
  *(uint **)(key + 8) = puVar3;
  key[0x28] = '\0';
  key[0x10] = '\0';
  key[0x11] = '\0';
  key[0x12] = '\0';
  key[0x13] = '\0';
  key[0x14] = '\0';
  key[0x15] = '\0';
  key[0x16] = '\0';
  key[0x17] = '\0';
  key[0x18] = '\0';
  key[0x19] = '\0';
  key[0x1a] = '\0';
  key[0x1b] = '\0';
  key[0x1c] = '\0';
  key[0x1d] = '\0';
  key[0x1e] = '\0';
  key[0x1f] = '\0';
  key[0x20] = '\0';
  key[0x21] = '\0';
  key[0x22] = '\0';
  key[0x23] = '\0';
  key[0x24] = '\0';
  key[0x25] = '\0';
  key[0x26] = '\0';
  key[0x27] = '\0';
  key[0x30] = '\0';
  key[0x31] = '\0';
  key[0x32] = '\0';
  key[0x33] = '\0';
  key[0x34] = '\0';
  key[0x35] = '\0';
  key[0x36] = '\0';
  key[0x37] = '\0';
  iVar2 = getmppoint(local_40,&local_44,(ec_point *)(key + 8));
  if (iVar2 == 0) {
    ecdsa_freekey(key);
    key = (char *)0x0;
  }
  else if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||
            (*(long *)(key + 0x18) == 0)) ||
           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),
           -1 < iVar2)) ||
          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),
          -1 < iVar2)) {
    ecdsa_freekey(key);
    key = (char *)0x0;
  }
LAB_00153a26:
  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return key;
}



long * FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 *puVar1;
  int iVar2;
  uint *puVar3;
  long *plVar4;
  long in_FS_OFFSET;
  undefined4 local_44;
  undefined8 local_40 [2];
  undefined4 local_2c;
  long *local_28;
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  puVar1 = *(undefined8 **)(param_1 + 0x70);
  local_44 = param_3;
  local_40[0] = param_2;
  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);
  plVar4 = local_28;
  if (local_28 == (long *)0x0) goto LAB_00153a26;
  puVar3 = (uint *)(*(code *)*puVar1)();
  if ((*puVar3 & 0xfffffffd) != 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,
                  "ecdsa_newkey");
  }
  if (*puVar3 == 0) {
    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);
    plVar4 = local_28;
    if (local_28 == (long *)0x0) goto LAB_00153a26;
    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));
    if (iVar2 == 0) {
      plVar4 = (long *)0x0;
      goto LAB_00153a26;
    }
  }
  plVar4 = (long *)FUN_00126895(1,0x38);
  *plVar4 = param_1;
  plVar4[1] = (long)puVar3;
  *(undefined1 *)(plVar4 + 5) = 0;
  plVar4[2] = 0;
  plVar4[3] = 0;
  plVar4[4] = 0;
  plVar4[6] = 0;
  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);
  if (iVar2 == 0) {
    FUN_001515c2(plVar4);
    plVar4 = (long *)0x0;
  }
  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||
           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||
          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {
    FUN_001515c2(plVar4);
    plVar4 = (long *)0x0;
  }
LAB_00153a26:
  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return plVar4;
}


PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x30
MOV R12,RDI
MOV qword ptr [RSP + 0x8],RSI
MOV dword ptr [RSP + 0x4],EDX
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x28],RAX
XOR EAX,EAX
MOV RBP,qword ptr [RDI + 0x70]
LEA RCX,[RSP + 0x1c]
LEA RDX,[RSP + 0x20]
LEA RSI,[RSP + 0x4]
LEA RDI,[RSP + 0x8]
CALL 0x001531f3
MOV RBX,qword ptr [RSP + 0x20]
TEST RBX,RBX
JZ 0x00153a26
CALL qword ptr [RBP]
MOV RBP,RAX
MOV EAX,dword ptr [RAX]
TEST EAX,0xfffffffd
JNZ 0x00153a42
TEST EAX,EAX
JNZ 0x001539a8
LEA RCX,[RSP + 0x1c]
LEA RDX,[RSP + 0x20]
LEA RSI,[RSP + 0x4]
LEA RDI,[RSP + 0x8]
CALL 0x001531f3
MOV RBX,qword ptr [RSP + 0x20]
TEST RBX,RBX
JZ 0x00153a26
MOV RDX,qword ptr [RBP + 0x8]
MOV RSI,RBX
MOV EDI,dword ptr [RSP + 0x1c]
CALL 0x001277dc
TEST EAX,EAX
JZ 0x00153a83
MOV ESI,0x38
MOV EDI,0x1
CALL 0x00126895
MOV RBX,RAX
MOV qword ptr [RAX],R12
MOV qword ptr [RAX + 0x8],RBP
MOV byte ptr [RAX + 0x28],0x0
MOV qword ptr [RAX + 0x10],0x0
MOV qword ptr [RAX + 0x18],0x0
MOV qword ptr [RAX + 0x20],0x0
MOV qword ptr [RAX + 0x30],0x0
LEA RDX,[RAX + 0x8]
LEA RSI,[RSP + 0x4]
LEA RDI,[RSP + 0x8]
CALL 0x001538a6
TEST EAX,EAX
JZ 0x00153a61
MOV RDI,qword ptr [RBX + 0x10]
TEST RDI,RDI
JZ 0x00153a19
CMP qword ptr [RBX + 0x18],0x0
JZ 0x00153a19
MOV RSI,qword ptr [RBP + 0x20]
CALL 0x0014a527
TEST EAX,EAX
JS 0x00153a70
MOV RDI,RBX
CALL 0x001515c2
MOV EBX,0x0
MOV RAX,RBX
MOV RCX,qword ptr [RSP + 0x28]
XOR RCX,qword ptr FS:[0x28]
JNZ 0x00153a8a
ADD RSP,0x30
POP RBX
POP RBP
POP R12
RET
LEA RCX,[0x1c57e0]
MOV EDX,0x6e9
LEA RSI,[0x1c5141]
LEA RDI,[0x1c5250]
CALL 0x00114a20
MOV RDI,RBX
CALL 0x001515c2
MOV EBX,0x0
JMP 0x00153a26
MOV RSI,qword ptr [RBP + 0x20]
MOV RDI,qword ptr [RBX + 0x18]
CALL 0x0014a527
TEST EAX,EAX
JS 0x00153a26
JMP 0x00153a19
MOV EBX,0x0
JMP 0x00153a26
CALL 0x00115250
(translation_unit "long * FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return plVar4;\n}\n\n" (function_definition "long * FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return plVar4;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)" * (function_declarator "FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined4 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return plVar4;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_44;" type_identifier identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "long *local_28;" (sized_type_specifier "long" long) (pointer_declarator "*local_28" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "puVar1 = *(undefined8 **)(param_1 + 0x70);" (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 0x70)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x70)" * (cast_expression "(undefined8 **)(param_1 + 0x70)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "local_44 = param_3;" (assignment_expression "local_44 = param_3" identifier = identifier) ;) (expression_statement "local_40[0] = param_2;" (assignment_expression "local_40[0] = param_2" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_001531f3(local_40,&local_44,&local_28,&local_2c);" (call_expression "FUN_001531f3(local_40,&local_44,&local_28,&local_2c)" identifier (argument_list "(local_40,&local_44,&local_28,&local_2c)" ( identifier , (pointer_expression "&local_44" & identifier) , (pointer_expression "&local_28" & identifier) , (pointer_expression "&local_2c" & identifier) ))) ;) (expression_statement "plVar4 = local_28;" (assignment_expression "plVar4 = local_28" identifier = identifier) ;) (if_statement "if (local_28 == (long *)0x0) goto LAB_00153a26;" if (parenthesized_expression "(local_28 == (long *)0x0)" ( (binary_expression "local_28 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;)) (expression_statement "puVar3 = (uint *)(*(code *)*puVar1)();" (assignment_expression "puVar3 = (uint *)(*(code *)*puVar1)()" identifier = (cast_expression "(uint *)(*(code *)*puVar1)()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)*puVar1)()" (parenthesized_expression "(*(code *)*puVar1)" ( (pointer_expression "*(code *)*puVar1" * (cast_expression "(code *)*puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) )) (argument_list "()" ( ))))) ;) (if_statement "if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" if (parenthesized_expression "((*puVar3 & 0xfffffffd) != 0)" ( (binary_expression "(*puVar3 & 0xfffffffd) != 0" (parenthesized_expression "(*puVar3 & 0xfffffffd)" ( (binary_expression "*puVar3 & 0xfffffffd" (pointer_expression "*puVar3" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" { comment (expression_statement "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");" (call_expression "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" identifier (argument_list "("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" ( (string_literal ""curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS"" " string_content ") , (string_literal ""sshecc.c"" " string_content ") , number_literal , (string_literal ""ecdsa_newkey"" " string_content ") ))) ;) })) (if_statement "if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }" if (parenthesized_expression "(*puVar3 == 0)" ( (binary_expression "*puVar3 == 0" (pointer_expression "*puVar3" * identifier) == number_literal) )) (compound_statement "{\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }" { (expression_statement "FUN_001531f3(local_40,&local_44,&local_28,&local_2c);" (call_expression "FUN_001531f3(local_40,&local_44,&local_28,&local_2c)" identifier (argument_list "(local_40,&local_44,&local_28,&local_2c)" ( identifier , (pointer_expression "&local_44" & identifier) , (pointer_expression "&local_28" & identifier) , (pointer_expression "&local_2c" & identifier) ))) ;) (expression_statement "plVar4 = local_28;" (assignment_expression "plVar4 = local_28" identifier = identifier) ;) (if_statement "if (local_28 == (long *)0x0) goto LAB_00153a26;" if (parenthesized_expression "(local_28 == (long *)0x0)" ( (binary_expression "local_28 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;)) (expression_statement "iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));" (assignment_expression "iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" identifier = (call_expression "FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" identifier (argument_list "(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" ( identifier , identifier , (pointer_expression "*(undefined8 *)(puVar3 + 2)" * (cast_expression "(undefined8 *)(puVar3 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }" { (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;) })) })) (expression_statement "plVar4 = (long *)FUN_00126895(1,0x38);" (assignment_expression "plVar4 = (long *)FUN_00126895(1,0x38)" identifier = (cast_expression "(long *)FUN_00126895(1,0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00126895(1,0x38)" identifier (argument_list "(1,0x38)" ( number_literal , number_literal ))))) ;) (expression_statement "*plVar4 = param_1;" (assignment_expression "*plVar4 = param_1" (pointer_expression "*plVar4" * identifier) = identifier) ;) (expression_statement "plVar4[1] = (long)puVar3;" (assignment_expression "plVar4[1] = (long)puVar3" (subscript_expression "plVar4[1]" identifier [ number_literal ]) = (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(undefined1 *)(plVar4 + 5) = 0;" (assignment_expression "*(undefined1 *)(plVar4 + 5) = 0" (pointer_expression "*(undefined1 *)(plVar4 + 5)" * (cast_expression "(undefined1 *)(plVar4 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 5)" ( (binary_expression "plVar4 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "plVar4[2] = 0;" (assignment_expression "plVar4[2] = 0" (subscript_expression "plVar4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "plVar4[3] = 0;" (assignment_expression "plVar4[3] = 0" (subscript_expression "plVar4[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "plVar4[4] = 0;" (assignment_expression "plVar4[4] = 0" (subscript_expression "plVar4[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "plVar4[6] = 0;" (assignment_expression "plVar4[6] = 0" (subscript_expression "plVar4[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);" (assignment_expression "iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1)" identifier = (call_expression "FUN_001538a6(local_40,&local_44,plVar4 + 1)" identifier (argument_list "(local_40,&local_44,plVar4 + 1)" ( identifier , (pointer_expression "&local_44" & identifier) , (binary_expression "plVar4 + 1" identifier + number_literal) )))) ;) (if_statement "if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" { (expression_statement "FUN_001515c2(plVar4);" (call_expression "FUN_001515c2(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" else (if_statement "if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" if (parenthesized_expression "((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2))" ( (binary_expression "(((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (parenthesized_expression "(((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2))" ( (binary_expression "((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (parenthesized_expression "((plVar4[2] == 0) || (plVar4[3] == 0))" ( (binary_expression "(plVar4[2] == 0) || (plVar4[3] == 0)" (parenthesized_expression "(plVar4[2] == 0)" ( (binary_expression "plVar4[2] == 0" (subscript_expression "plVar4[2]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "(plVar4[3] == 0)" ( (binary_expression "plVar4[3] == 0" (subscript_expression "plVar4[3]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "(iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" ( (comma_expression "iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2" (assignment_expression "iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8))" identifier = (call_expression "FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8))" identifier (argument_list "(plVar4[2],*(undefined8 *)(puVar3 + 8))" ( (subscript_expression "plVar4[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined8 *)(puVar3 + 8)" * (cast_expression "(undefined8 *)(puVar3 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) ))) )) || (parenthesized_expression "(iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" ( (comma_expression "iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2" (assignment_expression "iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8))" identifier = (call_expression "FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8))" identifier (argument_list "(plVar4[3],*(undefined8 *)(puVar3 + 8))" ( (subscript_expression "plVar4[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined8 *)(puVar3 + 8)" * (cast_expression "(undefined8 *)(puVar3 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) ))) )) (compound_statement "{\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" { (expression_statement "FUN_001515c2(plVar4);" (call_expression "FUN_001515c2(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })))) (labeled_statement "LAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" statement_identifier : (if_statement "if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_20 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return plVar4;" return identifier ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nvoid * ecdsa_newkey(ssh_signkey *self,char *data,int len)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  char *key;\n  long in_FS_OFFSET;\n  int local_44;\n  char *local_40 [2];\n  int slen;\n  char *p;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = (undefined8 *)self->extra;\n  local_44 = len;\n  local_40[0] = data;\n  getstring(local_40,&local_44,&p,&slen);\n  key = p;\n  if (p == (char *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    getstring(local_40,&local_44,&p,&slen);\n    key = p;\n    if (p == (char *)0x0) goto LAB_00153a26;\n    iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));\n    if (iVar2 == 0) {\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  key = (char *)safemalloc(1,0x38);\n  *(ssh_signkey **)key = self;\n  *(uint **)(key + 8) = puVar3;\n  key[0x28] = '\0';\n  key[0x10] = '\0';\n  key[0x11] = '\0';\n  key[0x12] = '\0';\n  key[0x13] = '\0';\n  key[0x14] = '\0';\n  key[0x15] = '\0';\n  key[0x16] = '\0';\n  key[0x17] = '\0';\n  key[0x18] = '\0';\n  key[0x19] = '\0';\n  key[0x1a] = '\0';\n  key[0x1b] = '\0';\n  key[0x1c] = '\0';\n  key[0x1d] = '\0';\n  key[0x1e] = '\0';\n  key[0x1f] = '\0';\n  key[0x20] = '\0';\n  key[0x21] = '\0';\n  key[0x22] = '\0';\n  key[0x23] = '\0';\n  key[0x24] = '\0';\n  key[0x25] = '\0';\n  key[0x26] = '\0';\n  key[0x27] = '\0';\n  key[0x30] = '\0';\n  key[0x31] = '\0';\n  key[0x32] = '\0';\n  key[0x33] = '\0';\n  key[0x34] = '\0';\n  key[0x35] = '\0';\n  key[0x36] = '\0';\n  key[0x37] = '\0';\n  iVar2 = getmppoint(local_40,&local_44,(ec_point *)(key + 8));\n  if (iVar2 == 0) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\n  else if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return key;\n}\n\n" comment (function_definition "void * ecdsa_newkey(ssh_signkey *self,char *data,int len)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  char *key;\n  long in_FS_OFFSET;\n  int local_44;\n  char *local_40 [2];\n  int slen;\n  char *p;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = (undefined8 *)self->extra;\n  local_44 = len;\n  local_40[0] = data;\n  getstring(local_40,&local_44,&p,&slen);\n  key = p;\n  if (p == (char *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    getstring(local_40,&local_44,&p,&slen);\n    key = p;\n    if (p == (char *)0x0) goto LAB_00153a26;\n    iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));\n    if (iVar2 == 0) {\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  key = (char *)safemalloc(1,0x38);\n  *(ssh_signkey **)key = self;\n  *(uint **)(key + 8) = puVar3;\n  key[0x28] = '\0';\n  key[0x10] = '\0';\n  key[0x11] = '\0';\n  key[0x12] = '\0';\n  key[0x13] = '\0';\n  key[0x14] = '\0';\n  key[0x15] = '\0';\n  key[0x16] = '\0';\n  key[0x17] = '\0';\n  key[0x18] = '\0';\n  key[0x19] = '\0';\n  key[0x1a] = '\0';\n  key[0x1b] = '\0';\n  key[0x1c] = '\0';\n  key[0x1d] = '\0';\n  key[0x1e] = '\0';\n  key[0x1f] = '\0';\n  key[0x20] = '\0';\n  key[0x21] = '\0';\n  key[0x22] = '\0';\n  key[0x23] = '\0';\n  key[0x24] = '\0';\n  key[0x25] = '\0';\n  key[0x26] = '\0';\n  key[0x27] = '\0';\n  key[0x30] = '\0';\n  key[0x31] = '\0';\n  key[0x32] = '\0';\n  key[0x33] = '\0';\n  key[0x34] = '\0';\n  key[0x35] = '\0';\n  key[0x36] = '\0';\n  key[0x37] = '\0';\n  iVar2 = getmppoint(local_40,&local_44,(ec_point *)(key + 8));\n  if (iVar2 == 0) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\n  else if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return key;\n}" primitive_type (pointer_declarator "* ecdsa_newkey(ssh_signkey *self,char *data,int len)" * (function_declarator "ecdsa_newkey(ssh_signkey *self,char *data,int len)" identifier (parameter_list "(ssh_signkey *self,char *data,int len)" ( (parameter_declaration "ssh_signkey *self" type_identifier (pointer_declarator "*self" * identifier)) , (parameter_declaration "char *data" primitive_type (pointer_declarator "*data" * identifier)) , (parameter_declaration "int len" primitive_type identifier) )))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  char *key;\n  long in_FS_OFFSET;\n  int local_44;\n  char *local_40 [2];\n  int slen;\n  char *p;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = (undefined8 *)self->extra;\n  local_44 = len;\n  local_40[0] = data;\n  getstring(local_40,&local_44,&p,&slen);\n  key = p;\n  if (p == (char *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    getstring(local_40,&local_44,&p,&slen);\n    key = p;\n    if (p == (char *)0x0) goto LAB_00153a26;\n    iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));\n    if (iVar2 == 0) {\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  key = (char *)safemalloc(1,0x38);\n  *(ssh_signkey **)key = self;\n  *(uint **)(key + 8) = puVar3;\n  key[0x28] = '\0';\n  key[0x10] = '\0';\n  key[0x11] = '\0';\n  key[0x12] = '\0';\n  key[0x13] = '\0';\n  key[0x14] = '\0';\n  key[0x15] = '\0';\n  key[0x16] = '\0';\n  key[0x17] = '\0';\n  key[0x18] = '\0';\n  key[0x19] = '\0';\n  key[0x1a] = '\0';\n  key[0x1b] = '\0';\n  key[0x1c] = '\0';\n  key[0x1d] = '\0';\n  key[0x1e] = '\0';\n  key[0x1f] = '\0';\n  key[0x20] = '\0';\n  key[0x21] = '\0';\n  key[0x22] = '\0';\n  key[0x23] = '\0';\n  key[0x24] = '\0';\n  key[0x25] = '\0';\n  key[0x26] = '\0';\n  key[0x27] = '\0';\n  key[0x30] = '\0';\n  key[0x31] = '\0';\n  key[0x32] = '\0';\n  key[0x33] = '\0';\n  key[0x34] = '\0';\n  key[0x35] = '\0';\n  key[0x36] = '\0';\n  key[0x37] = '\0';\n  iVar2 = getmppoint(local_40,&local_44,(ec_point *)(key + 8));\n  if (iVar2 == 0) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\n  else if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return key;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char *key;" primitive_type (pointer_declarator "*key" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_44;" primitive_type identifier ;) (declaration "char *local_40 [2];" primitive_type (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (declaration "int slen;" primitive_type identifier ;) (declaration "char *p;" primitive_type (pointer_declarator "*p" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "puVar1 = (undefined8 *)self->extra;" (assignment_expression "puVar1 = (undefined8 *)self->extra" identifier = (cast_expression "(undefined8 *)self->extra" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "self->extra" identifier -> field_identifier))) ;) (expression_statement "local_44 = len;" (assignment_expression "local_44 = len" identifier = identifier) ;) (expression_statement "local_40[0] = data;" (assignment_expression "local_40[0] = data" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "getstring(local_40,&local_44,&p,&slen);" (call_expression "getstring(local_40,&local_44,&p,&slen)" identifier (argument_list "(local_40,&local_44,&p,&slen)" ( identifier , (pointer_expression "&local_44" & identifier) , (pointer_expression "&p" & identifier) , (pointer_expression "&slen" & identifier) ))) ;) (expression_statement "key = p;" (assignment_expression "key = p" identifier = identifier) ;) (if_statement "if (p == (char *)0x0) goto LAB_00153a26;" if (parenthesized_expression "(p == (char *)0x0)" ( (binary_expression "p == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;)) (expression_statement "puVar3 = (uint *)(*(code *)*puVar1)();" (assignment_expression "puVar3 = (uint *)(*(code *)*puVar1)()" identifier = (cast_expression "(uint *)(*(code *)*puVar1)()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)*puVar1)()" (parenthesized_expression "(*(code *)*puVar1)" ( (pointer_expression "*(code *)*puVar1" * (cast_expression "(code *)*puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) )) (argument_list "()" ( ))))) ;) (if_statement "if ((*puVar3 & 0xfffffffd) != 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" if (parenthesized_expression "((*puVar3 & 0xfffffffd) != 0)" ( (binary_expression "(*puVar3 & 0xfffffffd) != 0" (parenthesized_expression "(*puVar3 & 0xfffffffd)" ( (binary_expression "*puVar3 & 0xfffffffd" (pointer_expression "*puVar3" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" { comment (expression_statement "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");" (call_expression "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" identifier (argument_list "("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" ( (string_literal ""curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS"" " string_content ") , (string_literal ""sshecc.c"" " string_content ") , number_literal , (string_literal ""ecdsa_newkey"" " string_content ") ))) ;) })) (if_statement "if (*puVar3 == 0) {\n    getstring(local_40,&local_44,&p,&slen);\n    key = p;\n    if (p == (char *)0x0) goto LAB_00153a26;\n    iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));\n    if (iVar2 == 0) {\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }\n  }" if (parenthesized_expression "(*puVar3 == 0)" ( (binary_expression "*puVar3 == 0" (pointer_expression "*puVar3" * identifier) == number_literal) )) (compound_statement "{\n    getstring(local_40,&local_44,&p,&slen);\n    key = p;\n    if (p == (char *)0x0) goto LAB_00153a26;\n    iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));\n    if (iVar2 == 0) {\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }\n  }" { (expression_statement "getstring(local_40,&local_44,&p,&slen);" (call_expression "getstring(local_40,&local_44,&p,&slen)" identifier (argument_list "(local_40,&local_44,&p,&slen)" ( identifier , (pointer_expression "&local_44" & identifier) , (pointer_expression "&p" & identifier) , (pointer_expression "&slen" & identifier) ))) ;) (expression_statement "key = p;" (assignment_expression "key = p" identifier = identifier) ;) (if_statement "if (p == (char *)0x0) goto LAB_00153a26;" if (parenthesized_expression "(p == (char *)0x0)" ( (binary_expression "p == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;)) (expression_statement "iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2));" (assignment_expression "iVar2 = match_ssh_id(slen,p,*(char **)(puVar3 + 2))" identifier = (call_expression "match_ssh_id(slen,p,*(char **)(puVar3 + 2))" identifier (argument_list "(slen,p,*(char **)(puVar3 + 2))" ( identifier , identifier , (pointer_expression "*(char **)(puVar3 + 2)" * (cast_expression "(char **)(puVar3 + 2)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar2 == 0) {\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      key = (char *)0x0;\n      goto LAB_00153a26;\n    }" { (expression_statement "key = (char *)0x0;" (assignment_expression "key = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;) })) })) (expression_statement "key = (char *)safemalloc(1,0x38);" (assignment_expression "key = (char *)safemalloc(1,0x38)" identifier = (cast_expression "(char *)safemalloc(1,0x38)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc(1,0x38)" identifier (argument_list "(1,0x38)" ( number_literal , number_literal ))))) ;) (expression_statement "*(ssh_signkey **)key = self;" (assignment_expression "*(ssh_signkey **)key = self" (pointer_expression "*(ssh_signkey **)key" * (cast_expression "(ssh_signkey **)key" ( (type_descriptor "ssh_signkey **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = identifier) ;) (expression_statement "*(uint **)(key + 8) = puVar3;" (assignment_expression "*(uint **)(key + 8) = puVar3" (pointer_expression "*(uint **)(key + 8)" * (cast_expression "(uint **)(key + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(key + 8)" ( (binary_expression "key + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "key[0x28] = '\0';" (assignment_expression "key[0x28] = '\0'" (subscript_expression "key[0x28]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x10] = '\0';" (assignment_expression "key[0x10] = '\0'" (subscript_expression "key[0x10]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x11] = '\0';" (assignment_expression "key[0x11] = '\0'" (subscript_expression "key[0x11]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x12] = '\0';" (assignment_expression "key[0x12] = '\0'" (subscript_expression "key[0x12]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x13] = '\0';" (assignment_expression "key[0x13] = '\0'" (subscript_expression "key[0x13]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x14] = '\0';" (assignment_expression "key[0x14] = '\0'" (subscript_expression "key[0x14]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x15] = '\0';" (assignment_expression "key[0x15] = '\0'" (subscript_expression "key[0x15]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x16] = '\0';" (assignment_expression "key[0x16] = '\0'" (subscript_expression "key[0x16]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x17] = '\0';" (assignment_expression "key[0x17] = '\0'" (subscript_expression "key[0x17]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x18] = '\0';" (assignment_expression "key[0x18] = '\0'" (subscript_expression "key[0x18]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x19] = '\0';" (assignment_expression "key[0x19] = '\0'" (subscript_expression "key[0x19]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x1a] = '\0';" (assignment_expression "key[0x1a] = '\0'" (subscript_expression "key[0x1a]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x1b] = '\0';" (assignment_expression "key[0x1b] = '\0'" (subscript_expression "key[0x1b]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x1c] = '\0';" (assignment_expression "key[0x1c] = '\0'" (subscript_expression "key[0x1c]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x1d] = '\0';" (assignment_expression "key[0x1d] = '\0'" (subscript_expression "key[0x1d]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x1e] = '\0';" (assignment_expression "key[0x1e] = '\0'" (subscript_expression "key[0x1e]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x1f] = '\0';" (assignment_expression "key[0x1f] = '\0'" (subscript_expression "key[0x1f]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x20] = '\0';" (assignment_expression "key[0x20] = '\0'" (subscript_expression "key[0x20]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x21] = '\0';" (assignment_expression "key[0x21] = '\0'" (subscript_expression "key[0x21]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x22] = '\0';" (assignment_expression "key[0x22] = '\0'" (subscript_expression "key[0x22]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x23] = '\0';" (assignment_expression "key[0x23] = '\0'" (subscript_expression "key[0x23]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x24] = '\0';" (assignment_expression "key[0x24] = '\0'" (subscript_expression "key[0x24]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x25] = '\0';" (assignment_expression "key[0x25] = '\0'" (subscript_expression "key[0x25]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x26] = '\0';" (assignment_expression "key[0x26] = '\0'" (subscript_expression "key[0x26]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x27] = '\0';" (assignment_expression "key[0x27] = '\0'" (subscript_expression "key[0x27]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x30] = '\0';" (assignment_expression "key[0x30] = '\0'" (subscript_expression "key[0x30]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x31] = '\0';" (assignment_expression "key[0x31] = '\0'" (subscript_expression "key[0x31]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x32] = '\0';" (assignment_expression "key[0x32] = '\0'" (subscript_expression "key[0x32]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x33] = '\0';" (assignment_expression "key[0x33] = '\0'" (subscript_expression "key[0x33]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x34] = '\0';" (assignment_expression "key[0x34] = '\0'" (subscript_expression "key[0x34]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x35] = '\0';" (assignment_expression "key[0x35] = '\0'" (subscript_expression "key[0x35]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x36] = '\0';" (assignment_expression "key[0x36] = '\0'" (subscript_expression "key[0x36]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "key[0x37] = '\0';" (assignment_expression "key[0x37] = '\0'" (subscript_expression "key[0x37]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "iVar2 = getmppoint(local_40,&local_44,(ec_point *)(key + 8));" (assignment_expression "iVar2 = getmppoint(local_40,&local_44,(ec_point *)(key + 8))" identifier = (call_expression "getmppoint(local_40,&local_44,(ec_point *)(key + 8))" identifier (argument_list "(local_40,&local_44,(ec_point *)(key + 8))" ( identifier , (pointer_expression "&local_44" & identifier) , (cast_expression "(ec_point *)(key + 8)" ( (type_descriptor "ec_point *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 8)" ( (binary_expression "key + 8" identifier + number_literal) ))) )))) ;) (if_statement "if (iVar2 == 0) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }\n  else if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }" { (expression_statement "ecdsa_freekey(key);" (call_expression "ecdsa_freekey(key)" identifier (argument_list "(key)" ( identifier ))) ;) (expression_statement "key = (char *)0x0;" (assignment_expression "key = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }" else (if_statement "if ((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)) {\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }" if (parenthesized_expression "((((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2))" ( (binary_expression "(((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)) ||\n          (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)" (parenthesized_expression "(((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2))" ( (binary_expression "((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)) ||\n           (iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)" (parenthesized_expression "((*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0))" ( (binary_expression "(*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0) ||\n            (*(long *)(key + 0x18) == 0)" (parenthesized_expression "(*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0)" ( (binary_expression "*(Bignum_conflict *)(key + 0x10) == (Bignum_conflict)0x0" (pointer_expression "*(Bignum_conflict *)(key + 0x10)" * (cast_expression "(Bignum_conflict *)(key + 0x10)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x10)" ( (binary_expression "key + 0x10" identifier + number_literal) )))) == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) || (parenthesized_expression "(*(long *)(key + 0x18) == 0)" ( (binary_expression "*(long *)(key + 0x18) == 0" (pointer_expression "*(long *)(key + 0x18)" * (cast_expression "(long *)(key + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x18)" ( (binary_expression "key + 0x18" identifier + number_literal) )))) == number_literal) ))) )) || (parenthesized_expression "(iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2)" ( (comma_expression "iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8)),\n           -1 < iVar2" (assignment_expression "iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8))" identifier = (call_expression "bignum_cmp(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8))" identifier (argument_list "(*(Bignum_conflict *)(key + 0x10),*(Bignum_conflict *)(puVar3 + 8))" ( (pointer_expression "*(Bignum_conflict *)(key + 0x10)" * (cast_expression "(Bignum_conflict *)(key + 0x10)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x10)" ( (binary_expression "key + 0x10" identifier + number_literal) )))) , (pointer_expression "*(Bignum_conflict *)(puVar3 + 8)" * (cast_expression "(Bignum_conflict *)(puVar3 + 8)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) ))) )) || (parenthesized_expression "(iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2)" ( (comma_expression "iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8)),\n          -1 < iVar2" (assignment_expression "iVar2 = bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8))" identifier = (call_expression "bignum_cmp(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8))" identifier (argument_list "(*(Bignum_conflict *)(key + 0x18),*(Bignum_conflict *)(puVar3 + 8))" ( (pointer_expression "*(Bignum_conflict *)(key + 0x18)" * (cast_expression "(Bignum_conflict *)(key + 0x18)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x18)" ( (binary_expression "key + 0x18" identifier + number_literal) )))) , (pointer_expression "*(Bignum_conflict *)(puVar3 + 8)" * (cast_expression "(Bignum_conflict *)(puVar3 + 8)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) ))) )) (compound_statement "{\n    ecdsa_freekey(key);\n    key = (char *)0x0;\n  }" { (expression_statement "ecdsa_freekey(key);" (call_expression "ecdsa_freekey(key)" identifier (argument_list "(key)" ( identifier ))) ;) (expression_statement "key = (char *)0x0;" (assignment_expression "key = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })))) (labeled_statement "LAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" statement_identifier : (if_statement "if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_20 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return key;" return identifier ;) })))
(translation_unit "long * FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return plVar4;\n}\n\n" (function_definition "long * FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return plVar4;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)" * (function_declarator "FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined4 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return plVar4;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_44;" type_identifier identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "long *local_28;" (sized_type_specifier "long" long) (pointer_declarator "*local_28" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "puVar1 = *(undefined8 **)(param_1 + 0x70);" (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 0x70)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x70)" * (cast_expression "(undefined8 **)(param_1 + 0x70)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "local_44 = param_3;" (assignment_expression "local_44 = param_3" identifier = identifier) ;) (expression_statement "local_40[0] = param_2;" (assignment_expression "local_40[0] = param_2" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_001531f3(local_40,&local_44,&local_28,&local_2c);" (call_expression "FUN_001531f3(local_40,&local_44,&local_28,&local_2c)" identifier (argument_list "(local_40,&local_44,&local_28,&local_2c)" ( identifier , (pointer_expression "&local_44" & identifier) , (pointer_expression "&local_28" & identifier) , (pointer_expression "&local_2c" & identifier) ))) ;) (expression_statement "plVar4 = local_28;" (assignment_expression "plVar4 = local_28" identifier = identifier) ;) (if_statement "if (local_28 == (long *)0x0) goto LAB_00153a26;" if (parenthesized_expression "(local_28 == (long *)0x0)" ( (binary_expression "local_28 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;)) (expression_statement "puVar3 = (uint *)(*(code *)*puVar1)();" (assignment_expression "puVar3 = (uint *)(*(code *)*puVar1)()" identifier = (cast_expression "(uint *)(*(code *)*puVar1)()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)*puVar1)()" (parenthesized_expression "(*(code *)*puVar1)" ( (pointer_expression "*(code *)*puVar1" * (cast_expression "(code *)*puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) )) (argument_list "()" ( ))))) ;) (if_statement "if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" if (parenthesized_expression "((*puVar3 & 0xfffffffd) != 0)" ( (binary_expression "(*puVar3 & 0xfffffffd) != 0" (parenthesized_expression "(*puVar3 & 0xfffffffd)" ( (binary_expression "*puVar3 & 0xfffffffd" (pointer_expression "*puVar3" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" { (expression_statement "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");" (call_expression "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" identifier (argument_list "("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" ( (string_literal ""curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS"" " string_content ") , (string_literal ""sshecc.c"" " string_content ") , number_literal , (string_literal ""ecdsa_newkey"" " string_content ") ))) ;) })) (if_statement "if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }" if (parenthesized_expression "(*puVar3 == 0)" ( (binary_expression "*puVar3 == 0" (pointer_expression "*puVar3" * identifier) == number_literal) )) (compound_statement "{\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }" { (expression_statement "FUN_001531f3(local_40,&local_44,&local_28,&local_2c);" (call_expression "FUN_001531f3(local_40,&local_44,&local_28,&local_2c)" identifier (argument_list "(local_40,&local_44,&local_28,&local_2c)" ( identifier , (pointer_expression "&local_44" & identifier) , (pointer_expression "&local_28" & identifier) , (pointer_expression "&local_2c" & identifier) ))) ;) (expression_statement "plVar4 = local_28;" (assignment_expression "plVar4 = local_28" identifier = identifier) ;) (if_statement "if (local_28 == (long *)0x0) goto LAB_00153a26;" if (parenthesized_expression "(local_28 == (long *)0x0)" ( (binary_expression "local_28 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;)) (expression_statement "iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));" (assignment_expression "iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" identifier = (call_expression "FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" identifier (argument_list "(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" ( identifier , identifier , (pointer_expression "*(undefined8 *)(puVar3 + 2)" * (cast_expression "(undefined8 *)(puVar3 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }" { (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00153a26;" goto statement_identifier ;) })) })) (expression_statement "plVar4 = (long *)FUN_00126895(1,0x38);" (assignment_expression "plVar4 = (long *)FUN_00126895(1,0x38)" identifier = (cast_expression "(long *)FUN_00126895(1,0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00126895(1,0x38)" identifier (argument_list "(1,0x38)" ( number_literal , number_literal ))))) ;) (expression_statement "*plVar4 = param_1;" (assignment_expression "*plVar4 = param_1" (pointer_expression "*plVar4" * identifier) = identifier) ;) (expression_statement "plVar4[1] = (long)puVar3;" (assignment_expression "plVar4[1] = (long)puVar3" (subscript_expression "plVar4[1]" identifier [ number_literal ]) = (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(undefined1 *)(plVar4 + 5) = 0;" (assignment_expression "*(undefined1 *)(plVar4 + 5) = 0" (pointer_expression "*(undefined1 *)(plVar4 + 5)" * (cast_expression "(undefined1 *)(plVar4 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 5)" ( (binary_expression "plVar4 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "plVar4[2] = 0;" (assignment_expression "plVar4[2] = 0" (subscript_expression "plVar4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "plVar4[3] = 0;" (assignment_expression "plVar4[3] = 0" (subscript_expression "plVar4[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "plVar4[4] = 0;" (assignment_expression "plVar4[4] = 0" (subscript_expression "plVar4[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "plVar4[6] = 0;" (assignment_expression "plVar4[6] = 0" (subscript_expression "plVar4[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);" (assignment_expression "iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1)" identifier = (call_expression "FUN_001538a6(local_40,&local_44,plVar4 + 1)" identifier (argument_list "(local_40,&local_44,plVar4 + 1)" ( identifier , (pointer_expression "&local_44" & identifier) , (binary_expression "plVar4 + 1" identifier + number_literal) )))) ;) (if_statement "if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" { (expression_statement "FUN_001515c2(plVar4);" (call_expression "FUN_001515c2(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" else (if_statement "if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" if (parenthesized_expression "((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2))" ( (binary_expression "(((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (parenthesized_expression "(((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2))" ( (binary_expression "((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (parenthesized_expression "((plVar4[2] == 0) || (plVar4[3] == 0))" ( (binary_expression "(plVar4[2] == 0) || (plVar4[3] == 0)" (parenthesized_expression "(plVar4[2] == 0)" ( (binary_expression "plVar4[2] == 0" (subscript_expression "plVar4[2]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "(plVar4[3] == 0)" ( (binary_expression "plVar4[3] == 0" (subscript_expression "plVar4[3]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "(iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" ( (comma_expression "iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2" (assignment_expression "iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8))" identifier = (call_expression "FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8))" identifier (argument_list "(plVar4[2],*(undefined8 *)(puVar3 + 8))" ( (subscript_expression "plVar4[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined8 *)(puVar3 + 8)" * (cast_expression "(undefined8 *)(puVar3 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) ))) )) || (parenthesized_expression "(iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" ( (comma_expression "iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2" (assignment_expression "iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8))" identifier = (call_expression "FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8))" identifier (argument_list "(plVar4[3],*(undefined8 *)(puVar3 + 8))" ( (subscript_expression "plVar4[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined8 *)(puVar3 + 8)" * (cast_expression "(undefined8 *)(puVar3 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) ))) )) (compound_statement "{\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" { (expression_statement "FUN_001515c2(plVar4);" (call_expression "FUN_001515c2(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })))) (labeled_statement "LAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" statement_identifier : (if_statement "if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_20 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" { (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return plVar4;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) , (binary_expression LIT < IDENT)) ))) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) , (binary_expression LIT < IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) })))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "long * FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return plVar4;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)" (* "*") (function_declarator "FUN_00153903(long param_1,undefined8 param_2,undefined4 param_3)" (identifier "FUN_00153903") (parameter_list "(long param_1,undefined8 param_2,undefined4 param_3)" (( "(") (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 "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")")))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  uint *puVar3;\n  long *plVar4;\n  long in_FS_OFFSET;\n  undefined4 local_44;\n  undefined8 local_40 [2];\n  undefined4 local_2c;\n  long *local_28;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  puVar1 = *(undefined8 **)(param_1 + 0x70);\n  local_44 = param_3;\n  local_40[0] = param_2;\n  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n  plVar4 = local_28;\n  if (local_28 == (long *)0x0) goto LAB_00153a26;\n  puVar3 = (uint *)(*(code *)*puVar1)();\n  if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }\n  if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }\n  plVar4 = (long *)FUN_00126895(1,0x38);\n  *plVar4 = param_1;\n  plVar4[1] = (long)puVar3;\n  *(undefined1 *)(plVar4 + 5) = 0;\n  plVar4[2] = 0;\n  plVar4[3] = 0;\n  plVar4[4] = 0;\n  plVar4[6] = 0;\n  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);\n  if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\nLAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return plVar4;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "undefined4 local_44;" (type_identifier "undefined4") (identifier "local_44") (; ";")) (declaration "undefined8 local_40 [2];" (type_identifier "undefined8") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (declaration "undefined4 local_2c;" (type_identifier "undefined4") (identifier "local_2c") (; ";")) (declaration "long *local_28;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*local_28" (* "*") (identifier "local_28")) (; ";")) (declaration "long local_20;" (sized_type_specifier "long" (long "long")) (identifier "local_20") (; ";")) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "puVar1 = *(undefined8 **)(param_1 + 0x70);" (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 0x70)" (identifier "puVar1") (= "=") (pointer_expression "*(undefined8 **)(param_1 + 0x70)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x70)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")"))))) (; ";")) (expression_statement "local_44 = param_3;" (assignment_expression "local_44 = param_3" (identifier "local_44") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_40[0] = param_2;" (assignment_expression "local_40[0] = param_2" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "FUN_001531f3(local_40,&local_44,&local_28,&local_2c);" (call_expression "FUN_001531f3(local_40,&local_44,&local_28,&local_2c)" (identifier "FUN_001531f3") (argument_list "(local_40,&local_44,&local_28,&local_2c)" (( "(") (identifier "local_40") (, ",") (pointer_expression "&local_44" (& "&") (identifier "local_44")) (, ",") (pointer_expression "&local_28" (& "&") (identifier "local_28")) (, ",") (pointer_expression "&local_2c" (& "&") (identifier "local_2c")) () ")"))) (; ";")) (expression_statement "plVar4 = local_28;" (assignment_expression "plVar4 = local_28" (identifier "plVar4") (= "=") (identifier "local_28")) (; ";")) (if_statement "if (local_28 == (long *)0x0) goto LAB_00153a26;" (if "if") (parenthesized_expression "(local_28 == (long *)0x0)" (( "(") (binary_expression "local_28 == (long *)0x0" (identifier "local_28") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00153a26;" (goto "goto") (statement_identifier "LAB_00153a26") (; ";"))) (expression_statement "puVar3 = (uint *)(*(code *)*puVar1)();" (assignment_expression "puVar3 = (uint *)(*(code *)*puVar1)()" (identifier "puVar3") (= "=") (cast_expression "(uint *)(*(code *)*puVar1)()" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)*puVar1)()" (parenthesized_expression "(*(code *)*puVar1)" (( "(") (pointer_expression "*(code *)*puVar1" (* "*") (cast_expression "(code *)*puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) () ")")) (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if ((*puVar3 & 0xfffffffd) != 0) {\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" (if "if") (parenthesized_expression "((*puVar3 & 0xfffffffd) != 0)" (( "(") (binary_expression "(*puVar3 & 0xfffffffd) != 0" (parenthesized_expression "(*puVar3 & 0xfffffffd)" (( "(") (binary_expression "*puVar3 & 0xfffffffd" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (& "&") (number_literal "0xfffffffd")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");\n  }" ({ "{") (expression_statement "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey");" (call_expression "__assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" (identifier "__assert_fail") (argument_list "("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,\n                  "ecdsa_newkey")" (( "(") (string_literal ""curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS"" (" """) (string_content "curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS") (" """)) (, ",") (string_literal ""sshecc.c"" (" """) (string_content "sshecc.c") (" """)) (, ",") (number_literal "0x6e9") (, ",") (string_literal ""ecdsa_newkey"" (" """) (string_content "ecdsa_newkey") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (*puVar3 == 0) {\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }" (if "if") (parenthesized_expression "(*puVar3 == 0)" (( "(") (binary_expression "*puVar3 == 0" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);\n    plVar4 = local_28;\n    if (local_28 == (long *)0x0) goto LAB_00153a26;\n    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));\n    if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }\n  }" ({ "{") (expression_statement "FUN_001531f3(local_40,&local_44,&local_28,&local_2c);" (call_expression "FUN_001531f3(local_40,&local_44,&local_28,&local_2c)" (identifier "FUN_001531f3") (argument_list "(local_40,&local_44,&local_28,&local_2c)" (( "(") (identifier "local_40") (, ",") (pointer_expression "&local_44" (& "&") (identifier "local_44")) (, ",") (pointer_expression "&local_28" (& "&") (identifier "local_28")) (, ",") (pointer_expression "&local_2c" (& "&") (identifier "local_2c")) () ")"))) (; ";")) (expression_statement "plVar4 = local_28;" (assignment_expression "plVar4 = local_28" (identifier "plVar4") (= "=") (identifier "local_28")) (; ";")) (if_statement "if (local_28 == (long *)0x0) goto LAB_00153a26;" (if "if") (parenthesized_expression "(local_28 == (long *)0x0)" (( "(") (binary_expression "local_28 == (long *)0x0" (identifier "local_28") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00153a26;" (goto "goto") (statement_identifier "LAB_00153a26") (; ";"))) (expression_statement "iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));" (assignment_expression "iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" (identifier "iVar2") (= "=") (call_expression "FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" (identifier "FUN_001277dc") (argument_list "(local_2c,local_28,*(undefined8 *)(puVar3 + 2))" (( "(") (identifier "local_2c") (, ",") (identifier "local_28") (, ",") (pointer_expression "*(undefined8 *)(puVar3 + 2)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 2)" (( "(") (binary_expression "puVar3 + 2" (identifier "puVar3") (+ "+") (number_literal "2")) () ")")))) () ")")))) (; ";")) (if_statement "if (iVar2 == 0) {\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      plVar4 = (long *)0x0;\n      goto LAB_00153a26;\n    }" ({ "{") (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" (identifier "plVar4") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto LAB_00153a26;" (goto "goto") (statement_identifier "LAB_00153a26") (; ";")) (} "}"))) (} "}"))) (expression_statement "plVar4 = (long *)FUN_00126895(1,0x38);" (assignment_expression "plVar4 = (long *)FUN_00126895(1,0x38)" (identifier "plVar4") (= "=") (cast_expression "(long *)FUN_00126895(1,0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00126895(1,0x38)" (identifier "FUN_00126895") (argument_list "(1,0x38)" (( "(") (number_literal "1") (, ",") (number_literal "0x38") () ")"))))) (; ";")) (expression_statement "*plVar4 = param_1;" (assignment_expression "*plVar4 = param_1" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (= "=") (identifier "param_1")) (; ";")) (expression_statement "plVar4[1] = (long)puVar3;" (assignment_expression "plVar4[1] = (long)puVar3" (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(long)puVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar3"))) (; ";")) (expression_statement "*(undefined1 *)(plVar4 + 5) = 0;" (assignment_expression "*(undefined1 *)(plVar4 + 5) = 0" (pointer_expression "*(undefined1 *)(plVar4 + 5)" (* "*") (cast_expression "(undefined1 *)(plVar4 + 5)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4 + 5)" (( "(") (binary_expression "plVar4 + 5" (identifier "plVar4") (+ "+") (number_literal "5")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "plVar4[2] = 0;" (assignment_expression "plVar4[2] = 0" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "plVar4[3] = 0;" (assignment_expression "plVar4[3] = 0" (subscript_expression "plVar4[3]" (identifier "plVar4") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "plVar4[4] = 0;" (assignment_expression "plVar4[4] = 0" (subscript_expression "plVar4[4]" (identifier "plVar4") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "plVar4[6] = 0;" (assignment_expression "plVar4[6] = 0" (subscript_expression "plVar4[6]" (identifier "plVar4") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);" (assignment_expression "iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1)" (identifier "iVar2") (= "=") (call_expression "FUN_001538a6(local_40,&local_44,plVar4 + 1)" (identifier "FUN_001538a6") (argument_list "(local_40,&local_44,plVar4 + 1)" (( "(") (identifier "local_40") (, ",") (pointer_expression "&local_44" (& "&") (identifier "local_44")) (, ",") (binary_expression "plVar4 + 1" (identifier "plVar4") (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if (iVar2 == 0) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }\n  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" ({ "{") (expression_statement "FUN_001515c2(plVar4);" (call_expression "FUN_001515c2(plVar4)" (identifier "FUN_001515c2") (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")"))) (; ";")) (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" (identifier "plVar4") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" (else "else") (if_statement "if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" (if "if") (parenthesized_expression "((((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2))" (( "(") (binary_expression "(((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||\n          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (parenthesized_expression "(((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2))" (( "(") (binary_expression "((plVar4[2] == 0) || (plVar4[3] == 0)) ||\n           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (parenthesized_expression "((plVar4[2] == 0) || (plVar4[3] == 0))" (( "(") (binary_expression "(plVar4[2] == 0) || (plVar4[3] == 0)" (parenthesized_expression "(plVar4[2] == 0)" (( "(") (binary_expression "plVar4[2] == 0" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(plVar4[3] == 0)" (( "(") (binary_expression "plVar4[3] == 0" (subscript_expression "plVar4[3]" (identifier "plVar4") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (( "(") (comma_expression "iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2" (assignment_expression "iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8))" (identifier "iVar2") (= "=") (call_expression "FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8))" (identifier "FUN_0014a527") (argument_list "(plVar4[2],*(undefined8 *)(puVar3 + 8))" (( "(") (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (, ",") (pointer_expression "*(undefined8 *)(puVar3 + 8)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 8)" (( "(") (binary_expression "puVar3 + 8" (identifier "puVar3") (+ "+") (number_literal "8")) () ")")))) () ")")))) (, ",") (binary_expression "-1 < iVar2" (number_literal "-1") (< "<") (identifier "iVar2"))) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)" (( "(") (comma_expression "iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2" (assignment_expression "iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8))" (identifier "iVar2") (= "=") (call_expression "FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8))" (identifier "FUN_0014a527") (argument_list "(plVar4[3],*(undefined8 *)(puVar3 + 8))" (( "(") (subscript_expression "plVar4[3]" (identifier "plVar4") ([ "[") (number_literal "3") (] "]")) (, ",") (pointer_expression "*(undefined8 *)(puVar3 + 8)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 8)" (( "(") (binary_expression "puVar3 + 8" (identifier "puVar3") (+ "+") (number_literal "8")) () ")")))) () ")")))) (, ",") (binary_expression "-1 < iVar2" (number_literal "-1") (< "<") (identifier "iVar2"))) () ")"))) () ")")) (compound_statement "{\n    FUN_001515c2(plVar4);\n    plVar4 = (long *)0x0;\n  }" ({ "{") (expression_statement "FUN_001515c2(plVar4);" (call_expression "FUN_001515c2(plVar4)" (identifier "FUN_001515c2") (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")"))) (; ";")) (expression_statement "plVar4 = (long *)0x0;" (assignment_expression "plVar4 = (long *)0x0" (identifier "plVar4") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}"))))) (labeled_statement "LAB_00153a26:\n  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" (statement_identifier "LAB_00153a26") (: ":") (if_statement "if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" (if "if") (parenthesized_expression "(local_20 != *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_20 != *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (!= "!=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" ({ "{") (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return plVar4;" (return "return") (identifier "plVar4") (; ";")) (} "}")))

/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void * function_1(type_1 *self,char *data,int len)

{
  type_2 *puVar1;
  int var_7;
  type_3 *var_6;
  char *var_9;
  long var_1;
  int local_44;
  char *local_40 [2];
  int slen;
  char *var_3;
  long var_13;
  
  var_13 = *(long *)(var_1 + 0x28);
  puVar1 = (type_2 *)self->extra;
  local_44 = len;
  local_40[0] = data;
  var_2(local_40,&local_44,&var_3,&slen);
  var_9 = var_3;
  if (var_3 == (char *)0x0) goto LAB_00153a26;
  var_6 = (type_3 *)(*(type_4 *)*puVar1)();
  if ((*var_6 & 0xfffffffd) != 0) {
                    /* WARNING: Subroutine does not return */
    var_4("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,
                  "ecdsa_newkey");
  }
  if (*var_6 == 0) {
    var_2(local_40,&local_44,&var_3,&slen);
    var_9 = var_3;
    if (var_3 == (char *)0x0) goto LAB_00153a26;
    var_7 = var_5(slen,var_3,*(char **)(var_6 + 2));
    if (var_7 == 0) {
      var_9 = (char *)0x0;
      goto LAB_00153a26;
    }
  }
  var_9 = (char *)var_8(1,0x38);
  *(type_1 **)var_9 = self;
  *(type_3 **)(var_9 + 8) = var_6;
  var_9[0x28] = '\0';
  var_9[0x10] = '\0';
  var_9[0x11] = '\0';
  var_9[0x12] = '\0';
  var_9[0x13] = '\0';
  var_9[0x14] = '\0';
  var_9[0x15] = '\0';
  var_9[0x16] = '\0';
  var_9[0x17] = '\0';
  var_9[0x18] = '\0';
  var_9[0x19] = '\0';
  var_9[0x1a] = '\0';
  var_9[0x1b] = '\0';
  var_9[0x1c] = '\0';
  var_9[0x1d] = '\0';
  var_9[0x1e] = '\0';
  var_9[0x1f] = '\0';
  var_9[0x20] = '\0';
  var_9[0x21] = '\0';
  var_9[0x22] = '\0';
  var_9[0x23] = '\0';
  var_9[0x24] = '\0';
  var_9[0x25] = '\0';
  var_9[0x26] = '\0';
  var_9[0x27] = '\0';
  var_9[0x30] = '\0';
  var_9[0x31] = '\0';
  var_9[0x32] = '\0';
  var_9[0x33] = '\0';
  var_9[0x34] = '\0';
  var_9[0x35] = '\0';
  var_9[0x36] = '\0';
  var_9[0x37] = '\0';
  var_7 = var_10(local_40,&local_44,(type_5 *)(var_9 + 8));
  if (var_7 == 0) {
    var_11(var_9);
    var_9 = (char *)0x0;
  }
  else if ((((*(type_6 *)(var_9 + 0x10) == (type_6)0x0) ||
            (*(long *)(var_9 + 0x18) == 0)) ||
           (var_7 = var_12(*(type_6 *)(var_9 + 0x10),*(type_6 *)(var_6 + 8)),
           -1 < var_7)) ||
          (var_7 = var_12(*(type_6 *)(var_9 + 0x18),*(type_6 *)(var_6 + 8)),
          -1 < var_7)) {
    var_11(var_9);
    var_9 = (char *)0x0;
  }
LAB_00153a26:
  if (var_13 != *(long *)(var_1 + 0x28)) {
                    /* WARNING: Subroutine does not return */
    var_14();
  }
  return var_9;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (pointer_declarator 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: (type_identifier) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) arguments: (argument_list))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (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))))) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (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)))))))) right: (binary_expression left: (number_literal) right: (identifier)))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (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)))))))) right: (binary_expression left: (number_literal) right: (identifier)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement (identifier)))))

long * MASKED(long param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 *puVar1;
  int iVar2;
  uint *puVar3;
  long *plVar4;
  long in_FS_OFFSET;
  undefined4 local_44;
  undefined8 local_40 [2];
  undefined4 local_2c;
  long *local_28;
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  puVar1 = *(undefined8 **)(param_1 + 0x70);
  local_44 = param_3;
  local_40[0] = param_2;
  FUN_001531f3(local_40,&local_44,&local_28,&local_2c);
  plVar4 = local_28;
  if (local_28 == (long *)0x0) goto LAB_00153a26;
  puVar3 = (uint *)(*(code *)*puVar1)();
  if ((*puVar3 & 0xfffffffd) != 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("curve->type == EC_WEIERSTRASS || curve->type == EC_EDWARDS","sshecc.c",0x6e9,
                  "ecdsa_newkey");
  }
  if (*puVar3 == 0) {
    FUN_001531f3(local_40,&local_44,&local_28,&local_2c);
    plVar4 = local_28;
    if (local_28 == (long *)0x0) goto LAB_00153a26;
    iVar2 = FUN_001277dc(local_2c,local_28,*(undefined8 *)(puVar3 + 2));
    if (iVar2 == 0) {
      plVar4 = (long *)0x0;
      goto LAB_00153a26;
    }
  }
  plVar4 = (long *)FUN_00126895(1,0x38);
  *plVar4 = param_1;
  plVar4[1] = (long)puVar3;
  *(undefined1 *)(plVar4 + 5) = 0;
  plVar4[2] = 0;
  plVar4[3] = 0;
  plVar4[4] = 0;
  plVar4[6] = 0;
  iVar2 = FUN_001538a6(local_40,&local_44,plVar4 + 1);
  if (iVar2 == 0) {
    FUN_001515c2(plVar4);
    plVar4 = (long *)0x0;
  }
  else if ((((plVar4[2] == 0) || (plVar4[3] == 0)) ||
           (iVar2 = FUN_0014a527(plVar4[2],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) ||
          (iVar2 = FUN_0014a527(plVar4[3],*(undefined8 *)(puVar3 + 8)), -1 < iVar2)) {
    FUN_001515c2(plVar4);
    plVar4 = (long *)0x0;
  }
LAB_00153a26:
  if (local_20 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return plVar4;
}

