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

void * ssh_ecdhkex_newkey(ssh_kex *kex)

{
  undefined *puVar1;
  undefined *puVar2;
  int *piVar3;
  undefined4 *puVar4;
  Bignum_conflict pBVar5;
  ec_point *peVar6;
  Bignum pvVar7;
  int iVar8;
  int *piVar9;
  undefined4 *puVar10;
  uchar bytes [32];
  int local_1c;
  
  puVar2 = PTR___stack_chk_guard_000b0c9c;
                    /* WARNING: Load size is inaccurate */
  local_1c = *(int *)PTR___stack_chk_guard_000b0c9c;
  piVar3 = (int *)(**kex->extra)();
  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);
  iVar8 = *piVar3;
  *puVar4 = 0;
  puVar4[1] = piVar3;
  if (iVar8 == 1) {
    bytes[0] = '\0';
    bytes[1] = '\0';
    bytes[2] = '\0';
    bytes[3] = '\0';
    bytes[4] = '\0';
    bytes[5] = '\0';
    bytes[6] = '\0';
    bytes[7] = '\0';
    bytes[8] = '\0';
    bytes[9] = '\0';
    bytes[10] = '\0';
    bytes[0xb] = '\0';
    bytes[0xc] = '\0';
    bytes[0xd] = '\0';
    bytes[0xe] = '\0';
    bytes[0xf] = '\0';
    bytes[0x10] = '\0';
    bytes[0x11] = '\0';
    bytes[0x12] = '\0';
    bytes[0x13] = '\0';
    bytes[0x14] = '\0';
    bytes[0x15] = '\0';
    bytes[0x16] = '\0';
    bytes[0x17] = '\0';
    bytes[0x18] = '\0';
    bytes[0x19] = '\0';
    bytes[0x1a] = '\0';
    bytes[0x1b] = '\0';
    bytes[0x1c] = '\0';
    bytes[0x1d] = '\0';
    bytes[0x1e] = '\0';
    bytes[0x1f] = '\0';
    piVar3 = (int *)bytes;
    do {
      piVar9 = (int *)((int)piVar3 + 1);
      iVar8 = random_byte();
      *(uchar *)piVar3 = (uchar)iVar8;
      piVar3 = piVar9;
    } while (&local_1c != piVar9);
    bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;
    bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;
    pBVar5 = bignum_from_bytes_le(bytes,0x20);
    puVar1 = PTR_smemclr_000b0240;
    puVar4[6] = pBVar5;
    (*(code *)puVar1)(bytes,0x20);
    if ((Bignum)puVar4[6] == (Bignum)0x0) {
LAB_00067a7c:
      puVar10 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar4);
      goto LAB_000679e8;
    }
    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);
    if (peVar6 == (ec_point *)0x0) {
                    /* WARNING: Subroutine does not return */
      freebn((Bignum_conflict)puVar4[6]);
    }
  }
  else {
    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])
    ;
    puVar4[6] = pBVar5;
    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;
    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);
    if (peVar6 == (ec_point *)0x0) {
                    /* WARNING: Subroutine does not return */
      freebn((Bignum_conflict)puVar4[6]);
    }
  }
  puVar1 = PTR_safefree_000b01b0;
  pvVar7 = peVar6->y;
  puVar4[2] = peVar6->x;
  puVar4[3] = pvVar7;
  puVar4[4] = 0;
  (*(code *)puVar1)(peVar6);
  puVar10 = puVar4;
LAB_000679e8:
  if (local_1c == *(int *)puVar2) {
    return puVar10;
  }
  iVar8 = local_1c;
  (*(code *)PTR___stack_chk_fail_000b0c70)();
                    /* WARNING: Subroutine does not return */
  bignum_bitcount(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10));
}



undefined4 * ssh_ecdhkex_newkey(int param_1)

{
  undefined *puVar1;
  int *piVar2;
  undefined4 *puVar3;
  undefined1 uVar5;
  undefined4 uVar4;
  int iVar6;
  uint uVar7;
  undefined1 *puVar8;
  int *piVar9;
  uint *puVar10;
  uint *puVar11;
  int iVar12;
  int iVar13;
  undefined4 *puVar14;
  undefined *puVar15;
  code *pcVar16;
  uint local_3c [9];
  
  puVar15 = PTR___stack_chk_guard_000b0c9c;
  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;
  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();
  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);
  iVar6 = *piVar2;
  *puVar3 = 0;
  puVar3[1] = piVar2;
  if (iVar6 == 1) {
    local_3c[0] = 0;
    local_3c[1] = 0;
    local_3c[2] = 0;
    local_3c[3] = 0;
    local_3c[4] = 0;
    local_3c[5] = 0;
    local_3c[6] = 0;
    local_3c[7] = 0;
    puVar10 = local_3c;
    do {
      puVar11 = (uint *)((int)puVar10 + 1);
      uVar5 = random_byte();
      *(undefined1 *)puVar10 = uVar5;
      puVar10 = puVar11;
    } while (local_3c + 8 != puVar11);
    local_3c[0] = local_3c[0] & 0xf8ffffff;
    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;
    uVar4 = bignum_from_bytes_le(local_3c,0x20);
    puVar1 = PTR_smemclr_000b0240;
    puVar3[6] = uVar4;
    (*(code *)puVar1)(local_3c,0x20);
    piVar9 = (int *)puVar3[6];
    piVar2 = piVar9;
    if (piVar9 == (int *)0x0) {
LAB_00067a7c:
      piVar9 = piVar2;
      puVar14 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar3);
      goto LAB_000679e8;
    }
    iVar6 = ecp_mul(puVar3[1] + 0x1c);
    if (iVar6 == 0) {
      freebn(puVar3[6]);
      puVar14 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar3);
      goto LAB_000679e8;
    }
  }
  else {
    piVar2 = (int *)piVar2[7];
    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);
    puVar3[6] = piVar9;
    if (piVar9 == (int *)0x0) goto LAB_00067a7c;
    iVar6 = ecp_mul(puVar3[1] + 0x20);
    if (iVar6 == 0) {
      freebn(puVar3[6]);
      puVar14 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar3);
      goto LAB_000679e8;
    }
  }
  puVar1 = PTR_safefree_000b01b0;
  uVar4 = *(undefined4 *)(iVar6 + 8);
  puVar3[2] = *(undefined4 *)(iVar6 + 4);
  puVar3[3] = uVar4;
  puVar3[4] = 0;
  (*(code *)puVar1)(iVar6);
  puVar14 = puVar3;
LAB_000679e8:
  if (local_3c[8] == *(int *)puVar15) {
    return puVar14;
  }
  uVar7 = local_3c[8];
  puVar15 = PTR___stack_chk_fail_000b0c70;
  (*(code *)PTR___stack_chk_fail_000b0c70)();
  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));
  iVar13 = iVar6 + 7;
  if (iVar13 < 0) {
    iVar13 = iVar6 + 0xe;
  }
  iVar13 = iVar13 >> 3;
  iVar12 = iVar13;
  if (**(int **)(uVar7 + 4) == 0) {
    iVar12 = iVar13 * 2 + 1;
  }
  pcVar16 = *(code **)(puVar15 + 0x48720);
  *piVar9 = iVar12;
  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);
  if (**(int **)(uVar7 + 4) == 0) {
    *(undefined1 *)puVar3 = 4;
    iVar6 = iVar13 + -1;
    puVar8 = (undefined1 *)((int)puVar3 + 1);
    if (iVar13 != 0) {
      do {
        iVar12 = iVar6 + -1;
        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);
        *puVar8 = uVar5;
        iVar6 = iVar12;
        puVar8 = puVar8 + 1;
      } while (iVar12 != -1);
      iVar6 = iVar13 + -1;
      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;
      do {
        iVar13 = iVar6 + -1;
        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);
        *puVar8 = uVar5;
        iVar6 = iVar13;
        puVar8 = puVar8 + 1;
      } while (iVar13 != -1);
      return puVar3;
    }
  }
  else {
    iVar12 = 0;
    if (0 < iVar6) {
      do {
        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);
        puVar8 = (undefined1 *)((int)puVar3 + iVar12);
        iVar12 = iVar12 + 1;
        *puVar8 = uVar5;
      } while (iVar12 < iVar13);
    }
  }
  return puVar3;
}


lui gp,0x5
addiu gp,gp,0x8b4
addu gp,gp,t9
addiu sp,sp,-0x58
lw v0,0x10(a0)
sw s3,0x4c(sp)
lw s3,-0x74b4(gp)
lw t9,0x0(v0)
sw gp,0x10(sp)
sw ra,0x54(sp)
sw s2,0x48(sp)
sw s0,0x40(sp)
sw s4,0x50(sp)
sw s1,0x44(sp)
lw v0,0x0(s3)
sw v0,0x3c(sp)
jalr t9
_nop
li a0,0x1
lw gp,0x10(sp)
or s0,v0,zero
lw t9,-0x7f68(gp)
jalr t9
_li a1,0x1c
li v1,0x1
lw a0,0x0(s0)
or s2,v0,zero
lw gp,0x10(sp)
sw zero,0x0(v0)
bne a0,v1,0x00067a18
_sw s0,0x4(v0)
addiu s4,sp,0x1c
sw zero,0x1c(sp)
addiu s1,sp,0x3c
sw zero,0x20(sp)
sw zero,0x24(sp)
or s0,s4,zero
sw zero,0x28(sp)
sw zero,0x2c(sp)
sw zero,0x30(sp)
sw zero,0x34(sp)
sw zero,0x38(sp)
lw t9,-0x7ae8(gp)
bal 0x0006f1e0
_addiu s0,s0,0x1
lw gp,0x10(sp)
bne s1,s0,0x00067944
_sb v0,-0x1(s0)
lbu v0,0x3b(sp)
li a1,0x20
lbu v1,0x1c(sp)
or a0,s4,zero
lw t9,-0x789c(gp)
andi v0,v0,0x7f
andi v1,v1,0xf8
ori v0,v0,0x40
sb v1,0x1c(sp)
bal 0x000571d8
_sb v0,0x3b(sp)
li a1,0x20
lw gp,0x10(sp)
or a0,s4,zero
lw t9,-0x7f10(gp)
jalr t9
_sw v0,0x18(s2)
lw a1,0x18(s2)
beq a1,zero,0x00067a7c
_lw gp,0x10(sp)
lw a0,0x4(s2)
lw t9,-0x788c(gp)
bal 0x00065878
_addiu a0,a0,0x1c
beq v0,zero,0x00067a94
_lw gp,0x10(sp)
lw v1,0x4(v0)
or a0,v0,zero
lw v0,0x8(v0)
lw t9,-0x7fa0(gp)
sw v1,0x8(s2)
sw v0,0xc(s2)
jalr t9
_sw zero,0x10(s2)
lw gp,0x10(sp)
lw a0,0x3c(sp)
or v0,s2,zero
lw v1,0x0(s3)
bne a0,v1,0x00067abc
_lw ra,0x54(sp)
lw s4,0x50(sp)
lw s3,0x4c(sp)
lw s2,0x48(sp)
lw s1,0x44(sp)
lw s0,0x40(sp)
jr ra
_addiu sp,sp,0x58
lw v0,-0x7900(gp)
lw t9,-0x7884(gp)
lw a1,0x1c(s0)
bal 0x00057974
_lw a0,0x0(v0)
lw gp,0x10(sp)
beq v0,zero,0x00067a7c
_sw v0,0x18(s2)
lw a0,0x4(s2)
or a1,v0,zero
lw t9,-0x788c(gp)
bal 0x00065878
_addiu a0,a0,0x20
bne v0,zero,0x000679c4
_lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_lw a0,0x18(s2)
or a0,s2,zero
lw gp,0x10(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or s2,zero,zero
b 0x000679e8
_lw gp,0x10(sp)
lw t9,-0x7fa0(gp)
or a0,s2,zero
jalr t9
_or s2,zero,zero
b 0x000679e8
_lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_lw a0,0x18(s2)
or a0,s2,zero
lw gp,0x10(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or s2,zero,zero
b 0x000679e8
_lw gp,0x10(sp)
lw t9,-0x74e0(gp)
jalr t9
_nop
(translation_unit "undefined4 * ssh_ecdhkex_newkey(int param_1)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}\n\n" (function_definition "undefined4 * ssh_ecdhkex_newkey(int param_1)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}" type_identifier (pointer_declarator "* ssh_ecdhkex_newkey(int param_1)" * (function_declarator "ssh_ecdhkex_newkey(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) )))) (compound_statement "{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "undefined1 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "undefined4 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "undefined *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "code *pcVar16;" type_identifier (pointer_declarator "*pcVar16" * identifier) ;) (declaration "uint local_3c [9];" type_identifier (array_declarator "local_3c [9]" identifier [ number_literal ]) ;) (expression_statement "puVar15 = PTR___stack_chk_guard_000b0c9c;" (assignment_expression "puVar15 = PTR___stack_chk_guard_000b0c9c" identifier = identifier) ;) (expression_statement "local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;" (assignment_expression "local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c" (subscript_expression "local_3c[8]" identifier [ number_literal ]) = (pointer_expression "*(uint *)PTR___stack_chk_guard_000b0c9c" * (cast_expression "(uint *)PTR___stack_chk_guard_000b0c9c" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();" (assignment_expression "piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))()" identifier = (cast_expression "(int *)(*(code *)**(undefined4 **)(param_1 + 0x10))()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)**(undefined4 **)(param_1 + 0x10))()" (parenthesized_expression "(*(code *)**(undefined4 **)(param_1 + 0x10))" ( (pointer_expression "*(code *)**(undefined4 **)(param_1 + 0x10)" * (cast_expression "(code *)**(undefined4 **)(param_1 + 0x10)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(param_1 + 0x10)" * (pointer_expression "*(undefined4 **)(param_1 + 0x10)" * (cast_expression "(undefined4 **)(param_1 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))))) )) (argument_list "()" ( ))))) ;) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(1,0x1c)" ( number_literal , number_literal ))))) ;) (expression_statement "iVar6 = *piVar2;" (assignment_expression "iVar6 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (expression_statement "*puVar3 = 0;" (assignment_expression "*puVar3 = 0" (pointer_expression "*puVar3" * identifier) = number_literal) ;) (expression_statement "puVar3[1] = piVar2;" (assignment_expression "puVar3[1] = piVar2" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" if (parenthesized_expression "(iVar6 == 1)" ( (binary_expression "iVar6 == 1" identifier == number_literal) )) (compound_statement "{\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" { (expression_statement "local_3c[0] = 0;" (assignment_expression "local_3c[0] = 0" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[1] = 0;" (assignment_expression "local_3c[1] = 0" (subscript_expression "local_3c[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[2] = 0;" (assignment_expression "local_3c[2] = 0" (subscript_expression "local_3c[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[3] = 0;" (assignment_expression "local_3c[3] = 0" (subscript_expression "local_3c[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[4] = 0;" (assignment_expression "local_3c[4] = 0" (subscript_expression "local_3c[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[5] = 0;" (assignment_expression "local_3c[5] = 0" (subscript_expression "local_3c[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[6] = 0;" (assignment_expression "local_3c[6] = 0" (subscript_expression "local_3c[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[7] = 0;" (assignment_expression "local_3c[7] = 0" (subscript_expression "local_3c[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar10 = local_3c;" (assignment_expression "puVar10 = local_3c" identifier = identifier) ;) (do_statement "do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);" do (compound_statement "{\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    }" { (expression_statement "puVar11 = (uint *)((int)puVar10 + 1);" (assignment_expression "puVar11 = (uint *)((int)puVar10 + 1)" identifier = (cast_expression "(uint *)((int)puVar10 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 + 1)" ( (binary_expression "(int)puVar10 + 1" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar5 = random_byte();" (assignment_expression "uVar5 = random_byte()" identifier = (call_expression "random_byte()" identifier (argument_list "()" ( )))) ;) (expression_statement "*(undefined1 *)puVar10 = uVar5;" (assignment_expression "*(undefined1 *)puVar10 = uVar5" (pointer_expression "*(undefined1 *)puVar10" * (cast_expression "(undefined1 *)puVar10" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "puVar10 = puVar11;" (assignment_expression "puVar10 = puVar11" identifier = identifier) ;) }) while (parenthesized_expression "(local_3c + 8 != puVar11)" ( (binary_expression "local_3c + 8 != puVar11" (binary_expression "local_3c + 8" identifier + number_literal) != identifier) )) ;) (expression_statement "local_3c[0] = local_3c[0] & 0xf8ffffff;" (assignment_expression "local_3c[0] = local_3c[0] & 0xf8ffffff" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = (binary_expression "local_3c[0] & 0xf8ffffff" (subscript_expression "local_3c[0]" identifier [ number_literal ]) & number_literal)) ;) (expression_statement "local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;" (assignment_expression "local_3c[7] = local_3c[7] & 0xffffff7f | 0x40" (subscript_expression "local_3c[7]" identifier [ number_literal ]) = (binary_expression "local_3c[7] & 0xffffff7f | 0x40" (binary_expression "local_3c[7] & 0xffffff7f" (subscript_expression "local_3c[7]" identifier [ number_literal ]) & number_literal) | number_literal)) ;) (expression_statement "uVar4 = bignum_from_bytes_le(local_3c,0x20);" (assignment_expression "uVar4 = bignum_from_bytes_le(local_3c,0x20)" identifier = (call_expression "bignum_from_bytes_le(local_3c,0x20)" identifier (argument_list "(local_3c,0x20)" ( identifier , number_literal )))) ;) (expression_statement "puVar1 = PTR_smemclr_000b0240;" (assignment_expression "puVar1 = PTR_smemclr_000b0240" identifier = identifier) ;) (expression_statement "puVar3[6] = uVar4;" (assignment_expression "puVar3[6] = uVar4" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "(*(code *)puVar1)(local_3c,0x20);" (call_expression "(*(code *)puVar1)(local_3c,0x20)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_3c,0x20)" ( identifier , number_literal ))) ;) (expression_statement "piVar9 = (int *)puVar3[6];" (assignment_expression "piVar9 = (int *)puVar3[6]" identifier = (cast_expression "(int *)puVar3[6]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar3[6]" identifier [ number_literal ]))) ;) (expression_statement "piVar2 = piVar9;" (assignment_expression "piVar2 = piVar9" identifier = identifier) ;) (if_statement "if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" { (labeled_statement "LAB_00067a7c:\n      piVar9 = piVar2;" statement_identifier : (expression_statement "piVar9 = piVar2;" (assignment_expression "piVar9 = piVar2" identifier = identifier) ;)) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) (expression_statement "iVar6 = ecp_mul(puVar3[1] + 0x1c);" (assignment_expression "iVar6 = ecp_mul(puVar3[1] + 0x1c)" identifier = (call_expression "ecp_mul(puVar3[1] + 0x1c)" identifier (argument_list "(puVar3[1] + 0x1c)" ( (binary_expression "puVar3[1] + 0x1c" (subscript_expression "puVar3[1]" identifier [ number_literal ]) + number_literal) )))) ;) (if_statement "if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" { (expression_statement "freebn(puVar3[6]);" (call_expression "freebn(puVar3[6])" identifier (argument_list "(puVar3[6])" ( (subscript_expression "puVar3[6]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) }) (else_clause "else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" else (compound_statement "{\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" { (expression_statement "piVar2 = (int *)piVar2[7];" (assignment_expression "piVar2 = (int *)piVar2[7]" identifier = (cast_expression "(int *)piVar2[7]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar2[7]" identifier [ number_literal ]))) ;) (expression_statement "piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);" (assignment_expression "piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" identifier = (cast_expression "(int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" identifier (argument_list "(*(undefined4 *)PTR_One_000b0850)" ( (pointer_expression "*(undefined4 *)PTR_One_000b0850" * (cast_expression "(undefined4 *)PTR_One_000b0850" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;) (expression_statement "puVar3[6] = piVar9;" (assignment_expression "puVar3[6] = piVar9" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (piVar9 == (int *)0x0) goto LAB_00067a7c;" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00067a7c;" goto statement_identifier ;)) (expression_statement "iVar6 = ecp_mul(puVar3[1] + 0x20);" (assignment_expression "iVar6 = ecp_mul(puVar3[1] + 0x20)" identifier = (call_expression "ecp_mul(puVar3[1] + 0x20)" identifier (argument_list "(puVar3[1] + 0x20)" ( (binary_expression "puVar3[1] + 0x20" (subscript_expression "puVar3[1]" identifier [ number_literal ]) + number_literal) )))) ;) (if_statement "if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" { (expression_statement "freebn(puVar3[6]);" (call_expression "freebn(puVar3[6])" identifier (argument_list "(puVar3[6])" ( (subscript_expression "puVar3[6]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) }))) (expression_statement "puVar1 = PTR_safefree_000b01b0;" (assignment_expression "puVar1 = PTR_safefree_000b01b0" identifier = identifier) ;) (expression_statement "uVar4 = *(undefined4 *)(iVar6 + 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar6 + 8)" identifier = (pointer_expression "*(undefined4 *)(iVar6 + 8)" * (cast_expression "(undefined4 *)(iVar6 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 8)" ( (binary_expression "iVar6 + 8" identifier + number_literal) ))))) ;) (expression_statement "puVar3[2] = *(undefined4 *)(iVar6 + 4);" (assignment_expression "puVar3[2] = *(undefined4 *)(iVar6 + 4)" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (pointer_expression "*(undefined4 *)(iVar6 + 4)" * (cast_expression "(undefined4 *)(iVar6 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar3[3] = uVar4;" (assignment_expression "puVar3[3] = uVar4" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3[4] = 0;" (assignment_expression "puVar3[4] = 0" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "(*(code *)puVar1)(iVar6);" (call_expression "(*(code *)puVar1)(iVar6)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar6)" ( identifier ))) ;) (expression_statement "puVar14 = puVar3;" (assignment_expression "puVar14 = puVar3" identifier = identifier) ;) (labeled_statement "LAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }" statement_identifier : (if_statement "if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }" if (parenthesized_expression "(local_3c[8] == *(int *)puVar15)" ( (binary_expression "local_3c[8] == *(int *)puVar15" (subscript_expression "local_3c[8]" identifier [ number_literal ]) == (pointer_expression "*(int *)puVar15" * (cast_expression "(int *)puVar15" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return puVar14;\n  }" { (return_statement "return puVar14;" return identifier ;) }))) (expression_statement "uVar7 = local_3c[8];" (assignment_expression "uVar7 = local_3c[8]" identifier = (subscript_expression "local_3c[8]" identifier [ number_literal ])) ;) (expression_statement "puVar15 = PTR___stack_chk_fail_000b0c70;" (assignment_expression "puVar15 = PTR___stack_chk_fail_000b0c70" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000b0c70)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b0c70)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b0c70)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000b0c70" * (cast_expression "(code *)PTR___stack_chk_fail_000b0c70" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));" (assignment_expression "iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" identifier = (call_expression "bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" identifier (argument_list "(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" ( (pointer_expression "*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10)" * (cast_expression "(undefined4 *)(*(int *)(uVar7 + 4) + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(uVar7 + 4) + 0x10)" ( (binary_expression "*(int *)(uVar7 + 4) + 0x10" (pointer_expression "*(int *)(uVar7 + 4)" * (cast_expression "(int *)(uVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 4)" ( (binary_expression "uVar7 + 4" identifier + number_literal) )))) + number_literal) )))) )))) ;) (expression_statement "iVar13 = iVar6 + 7;" (assignment_expression "iVar13 = iVar6 + 7" identifier = (binary_expression "iVar6 + 7" identifier + number_literal)) ;) (if_statement "if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }" if (parenthesized_expression "(iVar13 < 0)" ( (binary_expression "iVar13 < 0" identifier < number_literal) )) (compound_statement "{\n    iVar13 = iVar6 + 0xe;\n  }" { (expression_statement "iVar13 = iVar6 + 0xe;" (assignment_expression "iVar13 = iVar6 + 0xe" identifier = (binary_expression "iVar6 + 0xe" identifier + number_literal)) ;) })) (expression_statement "iVar13 = iVar13 >> 3;" (assignment_expression "iVar13 = iVar13 >> 3" identifier = (binary_expression "iVar13 >> 3" identifier >> number_literal)) ;) (expression_statement "iVar12 = iVar13;" (assignment_expression "iVar12 = iVar13" identifier = identifier) ;) (if_statement "if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }" if (parenthesized_expression "(**(int **)(uVar7 + 4) == 0)" ( (binary_expression "**(int **)(uVar7 + 4) == 0" (pointer_expression "**(int **)(uVar7 + 4)" * (pointer_expression "*(int **)(uVar7 + 4)" * (cast_expression "(int **)(uVar7 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar7 + 4)" ( (binary_expression "uVar7 + 4" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n    iVar12 = iVar13 * 2 + 1;\n  }" { (expression_statement "iVar12 = iVar13 * 2 + 1;" (assignment_expression "iVar12 = iVar13 * 2 + 1" identifier = (binary_expression "iVar13 * 2 + 1" (binary_expression "iVar13 * 2" identifier * number_literal) + number_literal)) ;) })) (expression_statement "pcVar16 = *(code **)(puVar15 + 0x48720);" (assignment_expression "pcVar16 = *(code **)(puVar15 + 0x48720)" identifier = (pointer_expression "*(code **)(puVar15 + 0x48720)" * (cast_expression "(code **)(puVar15 + 0x48720)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x48720)" ( (binary_expression "puVar15 + 0x48720" identifier + number_literal) ))))) ;) (expression_statement "*piVar9 = iVar12;" (assignment_expression "*piVar9 = iVar12" (pointer_expression "*piVar9" * identifier) = identifier) ;) (expression_statement "puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);" (assignment_expression "puVar3 = (undefined4 *)(*pcVar16)(iVar12,1)" identifier = (cast_expression "(undefined4 *)(*pcVar16)(iVar12,1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar16)(iVar12,1)" (parenthesized_expression "(*pcVar16)" ( (pointer_expression "*pcVar16" * identifier) )) (argument_list "(iVar12,1)" ( identifier , number_literal ))))) ;) (if_statement "if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" if (parenthesized_expression "(**(int **)(uVar7 + 4) == 0)" ( (binary_expression "**(int **)(uVar7 + 4) == 0" (pointer_expression "**(int **)(uVar7 + 4)" * (pointer_expression "*(int **)(uVar7 + 4)" * (cast_expression "(int **)(uVar7 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar7 + 4)" ( (binary_expression "uVar7 + 4" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }" { (expression_statement "*(undefined1 *)puVar3 = 4;" (assignment_expression "*(undefined1 *)puVar3 = 4" (pointer_expression "*(undefined1 *)puVar3" * (cast_expression "(undefined1 *)puVar3" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = number_literal) ;) (expression_statement "iVar6 = iVar13 + -1;" (assignment_expression "iVar6 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + 1);" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + 1)" identifier = (cast_expression "(undefined1 *)((int)puVar3 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 1)" ( (binary_expression "(int)puVar3 + 1" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }" if (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }" { (do_statement "do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);" do (compound_statement "{\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "iVar12 = iVar6 + -1;" (assignment_expression "iVar12 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6)" identifier = (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6)" identifier (argument_list "(*(undefined4 *)(uVar7 + 8),iVar6)" ( (pointer_expression "*(undefined4 *)(uVar7 + 8)" * (cast_expression "(undefined4 *)(uVar7 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 8)" ( (binary_expression "uVar7 + 8" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "iVar6 = iVar12;" (assignment_expression "iVar6 = iVar12" identifier = identifier) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar12 != -1)" ( (binary_expression "iVar12 != -1" identifier != number_literal) )) ;) (expression_statement "iVar6 = iVar13 + -1;" (assignment_expression "iVar6 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13" identifier = (binary_expression "(undefined1 *)((int)puVar3 + 1) + iVar13" (cast_expression "(undefined1 *)((int)puVar3 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 1)" ( (binary_expression "(int)puVar3 + 1" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))) + identifier)) ;) (do_statement "do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);" do (compound_statement "{\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "iVar13 = iVar6 + -1;" (assignment_expression "iVar13 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6)" identifier = (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6)" identifier (argument_list "(*(undefined4 *)(uVar7 + 0xc),iVar6)" ( (pointer_expression "*(undefined4 *)(uVar7 + 0xc)" * (cast_expression "(undefined4 *)(uVar7 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 0xc)" ( (binary_expression "uVar7 + 0xc" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "iVar6 = iVar13;" (assignment_expression "iVar6 = iVar13" identifier = identifier) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar13 != -1)" ( (binary_expression "iVar13 != -1" identifier != number_literal) )) ;) (return_statement "return puVar3;" return identifier ;) })) }) (else_clause "else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" else (compound_statement "{\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" { (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }" { (do_statement "do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);" do (compound_statement "{\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      }" { (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12)" identifier = (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12)" identifier (argument_list "(*(undefined4 *)(uVar7 + 8),iVar12)" ( (pointer_expression "*(undefined4 *)(uVar7 + 8)" * (cast_expression "(undefined4 *)(uVar7 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 8)" ( (binary_expression "uVar7 + 8" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + iVar12);" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + iVar12)" identifier = (cast_expression "(undefined1 *)((int)puVar3 + iVar12)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + iVar12)" ( (binary_expression "(int)puVar3 + iVar12" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" identifier = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" * identifier) = identifier) ;) }) while (parenthesized_expression "(iVar12 < iVar13)" ( (binary_expression "iVar12 < iVar13" identifier < identifier) )) ;) })) }))) (return_statement "return puVar3;" return identifier ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nvoid * ssh_ecdhkex_newkey(ssh_kex *kex)\n\n{\n  undefined *puVar1;\n  undefined *puVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  Bignum_conflict pBVar5;\n  ec_point *peVar6;\n  Bignum pvVar7;\n  int iVar8;\n  int *piVar9;\n  undefined4 *puVar10;\n  uchar bytes [32];\n  int local_1c;\n  \n  puVar2 = PTR___stack_chk_guard_000b0c9c;\n                    /* WARNING: Load size is inaccurate */\n  local_1c = *(int *)PTR___stack_chk_guard_000b0c9c;\n  piVar3 = (int *)(**kex->extra)();\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar8 = *piVar3;\n  *puVar4 = 0;\n  puVar4[1] = piVar3;\n  if (iVar8 == 1) {\n    bytes[0] = '\0';\n    bytes[1] = '\0';\n    bytes[2] = '\0';\n    bytes[3] = '\0';\n    bytes[4] = '\0';\n    bytes[5] = '\0';\n    bytes[6] = '\0';\n    bytes[7] = '\0';\n    bytes[8] = '\0';\n    bytes[9] = '\0';\n    bytes[10] = '\0';\n    bytes[0xb] = '\0';\n    bytes[0xc] = '\0';\n    bytes[0xd] = '\0';\n    bytes[0xe] = '\0';\n    bytes[0xf] = '\0';\n    bytes[0x10] = '\0';\n    bytes[0x11] = '\0';\n    bytes[0x12] = '\0';\n    bytes[0x13] = '\0';\n    bytes[0x14] = '\0';\n    bytes[0x15] = '\0';\n    bytes[0x16] = '\0';\n    bytes[0x17] = '\0';\n    bytes[0x18] = '\0';\n    bytes[0x19] = '\0';\n    bytes[0x1a] = '\0';\n    bytes[0x1b] = '\0';\n    bytes[0x1c] = '\0';\n    bytes[0x1d] = '\0';\n    bytes[0x1e] = '\0';\n    bytes[0x1f] = '\0';\n    piVar3 = (int *)bytes;\n    do {\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    } while (&local_1c != piVar9);\n    bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;\n    bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;\n    pBVar5 = bignum_from_bytes_le(bytes,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar4[6] = pBVar5;\n    (*(code *)puVar1)(bytes,0x20);\n    if ((Bignum)puVar4[6] == (Bignum)0x0) {\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  else {\n    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;\n    puVar4[6] = pBVar5;\n    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  pvVar7 = peVar6->y;\n  puVar4[2] = peVar6->x;\n  puVar4[3] = pvVar7;\n  puVar4[4] = 0;\n  (*(code *)puVar1)(peVar6);\n  puVar10 = puVar4;\nLAB_000679e8:\n  if (local_1c == *(int *)puVar2) {\n    return puVar10;\n  }\n  iVar8 = local_1c;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n                    /* WARNING: Subroutine does not return */\n  bignum_bitcount(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10));\n}\n\n" comment (function_definition "void * ssh_ecdhkex_newkey(ssh_kex *kex)\n\n{\n  undefined *puVar1;\n  undefined *puVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  Bignum_conflict pBVar5;\n  ec_point *peVar6;\n  Bignum pvVar7;\n  int iVar8;\n  int *piVar9;\n  undefined4 *puVar10;\n  uchar bytes [32];\n  int local_1c;\n  \n  puVar2 = PTR___stack_chk_guard_000b0c9c;\n                    /* WARNING: Load size is inaccurate */\n  local_1c = *(int *)PTR___stack_chk_guard_000b0c9c;\n  piVar3 = (int *)(**kex->extra)();\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar8 = *piVar3;\n  *puVar4 = 0;\n  puVar4[1] = piVar3;\n  if (iVar8 == 1) {\n    bytes[0] = '\0';\n    bytes[1] = '\0';\n    bytes[2] = '\0';\n    bytes[3] = '\0';\n    bytes[4] = '\0';\n    bytes[5] = '\0';\n    bytes[6] = '\0';\n    bytes[7] = '\0';\n    bytes[8] = '\0';\n    bytes[9] = '\0';\n    bytes[10] = '\0';\n    bytes[0xb] = '\0';\n    bytes[0xc] = '\0';\n    bytes[0xd] = '\0';\n    bytes[0xe] = '\0';\n    bytes[0xf] = '\0';\n    bytes[0x10] = '\0';\n    bytes[0x11] = '\0';\n    bytes[0x12] = '\0';\n    bytes[0x13] = '\0';\n    bytes[0x14] = '\0';\n    bytes[0x15] = '\0';\n    bytes[0x16] = '\0';\n    bytes[0x17] = '\0';\n    bytes[0x18] = '\0';\n    bytes[0x19] = '\0';\n    bytes[0x1a] = '\0';\n    bytes[0x1b] = '\0';\n    bytes[0x1c] = '\0';\n    bytes[0x1d] = '\0';\n    bytes[0x1e] = '\0';\n    bytes[0x1f] = '\0';\n    piVar3 = (int *)bytes;\n    do {\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    } while (&local_1c != piVar9);\n    bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;\n    bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;\n    pBVar5 = bignum_from_bytes_le(bytes,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar4[6] = pBVar5;\n    (*(code *)puVar1)(bytes,0x20);\n    if ((Bignum)puVar4[6] == (Bignum)0x0) {\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  else {\n    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;\n    puVar4[6] = pBVar5;\n    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  pvVar7 = peVar6->y;\n  puVar4[2] = peVar6->x;\n  puVar4[3] = pvVar7;\n  puVar4[4] = 0;\n  (*(code *)puVar1)(peVar6);\n  puVar10 = puVar4;\nLAB_000679e8:\n  if (local_1c == *(int *)puVar2) {\n    return puVar10;\n  }\n  iVar8 = local_1c;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n                    /* WARNING: Subroutine does not return */\n  bignum_bitcount(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10));\n}" primitive_type (pointer_declarator "* ssh_ecdhkex_newkey(ssh_kex *kex)" * (function_declarator "ssh_ecdhkex_newkey(ssh_kex *kex)" identifier (parameter_list "(ssh_kex *kex)" ( (parameter_declaration "ssh_kex *kex" type_identifier (pointer_declarator "*kex" * identifier)) )))) (compound_statement "{\n  undefined *puVar1;\n  undefined *puVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  Bignum_conflict pBVar5;\n  ec_point *peVar6;\n  Bignum pvVar7;\n  int iVar8;\n  int *piVar9;\n  undefined4 *puVar10;\n  uchar bytes [32];\n  int local_1c;\n  \n  puVar2 = PTR___stack_chk_guard_000b0c9c;\n                    /* WARNING: Load size is inaccurate */\n  local_1c = *(int *)PTR___stack_chk_guard_000b0c9c;\n  piVar3 = (int *)(**kex->extra)();\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar8 = *piVar3;\n  *puVar4 = 0;\n  puVar4[1] = piVar3;\n  if (iVar8 == 1) {\n    bytes[0] = '\0';\n    bytes[1] = '\0';\n    bytes[2] = '\0';\n    bytes[3] = '\0';\n    bytes[4] = '\0';\n    bytes[5] = '\0';\n    bytes[6] = '\0';\n    bytes[7] = '\0';\n    bytes[8] = '\0';\n    bytes[9] = '\0';\n    bytes[10] = '\0';\n    bytes[0xb] = '\0';\n    bytes[0xc] = '\0';\n    bytes[0xd] = '\0';\n    bytes[0xe] = '\0';\n    bytes[0xf] = '\0';\n    bytes[0x10] = '\0';\n    bytes[0x11] = '\0';\n    bytes[0x12] = '\0';\n    bytes[0x13] = '\0';\n    bytes[0x14] = '\0';\n    bytes[0x15] = '\0';\n    bytes[0x16] = '\0';\n    bytes[0x17] = '\0';\n    bytes[0x18] = '\0';\n    bytes[0x19] = '\0';\n    bytes[0x1a] = '\0';\n    bytes[0x1b] = '\0';\n    bytes[0x1c] = '\0';\n    bytes[0x1d] = '\0';\n    bytes[0x1e] = '\0';\n    bytes[0x1f] = '\0';\n    piVar3 = (int *)bytes;\n    do {\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    } while (&local_1c != piVar9);\n    bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;\n    bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;\n    pBVar5 = bignum_from_bytes_le(bytes,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar4[6] = pBVar5;\n    (*(code *)puVar1)(bytes,0x20);\n    if ((Bignum)puVar4[6] == (Bignum)0x0) {\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  else {\n    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;\n    puVar4[6] = pBVar5;\n    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  pvVar7 = peVar6->y;\n  puVar4[2] = peVar6->x;\n  puVar4[3] = pvVar7;\n  puVar4[4] = 0;\n  (*(code *)puVar1)(peVar6);\n  puVar10 = puVar4;\nLAB_000679e8:\n  if (local_1c == *(int *)puVar2) {\n    return puVar10;\n  }\n  iVar8 = local_1c;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n                    /* WARNING: Subroutine does not return */\n  bignum_bitcount(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10));\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "Bignum_conflict pBVar5;" type_identifier identifier ;) (declaration "ec_point *peVar6;" type_identifier (pointer_declarator "*peVar6" * identifier) ;) (declaration "Bignum pvVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "undefined4 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uchar bytes [32];" type_identifier (array_declarator "bytes [32]" identifier [ number_literal ]) ;) (declaration "int local_1c;" primitive_type identifier ;) (expression_statement "puVar2 = PTR___stack_chk_guard_000b0c9c;" (assignment_expression "puVar2 = PTR___stack_chk_guard_000b0c9c" identifier = identifier) ;) comment (expression_statement "local_1c = *(int *)PTR___stack_chk_guard_000b0c9c;" (assignment_expression "local_1c = *(int *)PTR___stack_chk_guard_000b0c9c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000b0c9c" * (cast_expression "(int *)PTR___stack_chk_guard_000b0c9c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar3 = (int *)(**kex->extra)();" (assignment_expression "piVar3 = (int *)(**kex->extra)()" identifier = (cast_expression "(int *)(**kex->extra)()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(**kex->extra)()" (parenthesized_expression "(**kex->extra)" ( (pointer_expression "**kex->extra" * (pointer_expression "*kex->extra" * (field_expression "kex->extra" identifier -> field_identifier))) )) (argument_list "()" ( ))))) ;) (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(1,0x1c)" ( number_literal , number_literal ))))) ;) (expression_statement "iVar8 = *piVar3;" (assignment_expression "iVar8 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4[1] = piVar3;" (assignment_expression "puVar4[1] = piVar3" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar8 == 1) {\n    bytes[0] = '\0';\n    bytes[1] = '\0';\n    bytes[2] = '\0';\n    bytes[3] = '\0';\n    bytes[4] = '\0';\n    bytes[5] = '\0';\n    bytes[6] = '\0';\n    bytes[7] = '\0';\n    bytes[8] = '\0';\n    bytes[9] = '\0';\n    bytes[10] = '\0';\n    bytes[0xb] = '\0';\n    bytes[0xc] = '\0';\n    bytes[0xd] = '\0';\n    bytes[0xe] = '\0';\n    bytes[0xf] = '\0';\n    bytes[0x10] = '\0';\n    bytes[0x11] = '\0';\n    bytes[0x12] = '\0';\n    bytes[0x13] = '\0';\n    bytes[0x14] = '\0';\n    bytes[0x15] = '\0';\n    bytes[0x16] = '\0';\n    bytes[0x17] = '\0';\n    bytes[0x18] = '\0';\n    bytes[0x19] = '\0';\n    bytes[0x1a] = '\0';\n    bytes[0x1b] = '\0';\n    bytes[0x1c] = '\0';\n    bytes[0x1d] = '\0';\n    bytes[0x1e] = '\0';\n    bytes[0x1f] = '\0';\n    piVar3 = (int *)bytes;\n    do {\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    } while (&local_1c != piVar9);\n    bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;\n    bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;\n    pBVar5 = bignum_from_bytes_le(bytes,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar4[6] = pBVar5;\n    (*(code *)puVar1)(bytes,0x20);\n    if ((Bignum)puVar4[6] == (Bignum)0x0) {\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }\n  else {\n    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;\n    puVar4[6] = pBVar5;\n    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }" if (parenthesized_expression "(iVar8 == 1)" ( (binary_expression "iVar8 == 1" identifier == number_literal) )) (compound_statement "{\n    bytes[0] = '\0';\n    bytes[1] = '\0';\n    bytes[2] = '\0';\n    bytes[3] = '\0';\n    bytes[4] = '\0';\n    bytes[5] = '\0';\n    bytes[6] = '\0';\n    bytes[7] = '\0';\n    bytes[8] = '\0';\n    bytes[9] = '\0';\n    bytes[10] = '\0';\n    bytes[0xb] = '\0';\n    bytes[0xc] = '\0';\n    bytes[0xd] = '\0';\n    bytes[0xe] = '\0';\n    bytes[0xf] = '\0';\n    bytes[0x10] = '\0';\n    bytes[0x11] = '\0';\n    bytes[0x12] = '\0';\n    bytes[0x13] = '\0';\n    bytes[0x14] = '\0';\n    bytes[0x15] = '\0';\n    bytes[0x16] = '\0';\n    bytes[0x17] = '\0';\n    bytes[0x18] = '\0';\n    bytes[0x19] = '\0';\n    bytes[0x1a] = '\0';\n    bytes[0x1b] = '\0';\n    bytes[0x1c] = '\0';\n    bytes[0x1d] = '\0';\n    bytes[0x1e] = '\0';\n    bytes[0x1f] = '\0';\n    piVar3 = (int *)bytes;\n    do {\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    } while (&local_1c != piVar9);\n    bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;\n    bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;\n    pBVar5 = bignum_from_bytes_le(bytes,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar4[6] = pBVar5;\n    (*(code *)puVar1)(bytes,0x20);\n    if ((Bignum)puVar4[6] == (Bignum)0x0) {\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }" { (expression_statement "bytes[0] = '\0';" (assignment_expression "bytes[0] = '\0'" (subscript_expression "bytes[0]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[1] = '\0';" (assignment_expression "bytes[1] = '\0'" (subscript_expression "bytes[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[2] = '\0';" (assignment_expression "bytes[2] = '\0'" (subscript_expression "bytes[2]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[3] = '\0';" (assignment_expression "bytes[3] = '\0'" (subscript_expression "bytes[3]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[4] = '\0';" (assignment_expression "bytes[4] = '\0'" (subscript_expression "bytes[4]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[5] = '\0';" (assignment_expression "bytes[5] = '\0'" (subscript_expression "bytes[5]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[6] = '\0';" (assignment_expression "bytes[6] = '\0'" (subscript_expression "bytes[6]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[7] = '\0';" (assignment_expression "bytes[7] = '\0'" (subscript_expression "bytes[7]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[8] = '\0';" (assignment_expression "bytes[8] = '\0'" (subscript_expression "bytes[8]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[9] = '\0';" (assignment_expression "bytes[9] = '\0'" (subscript_expression "bytes[9]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[10] = '\0';" (assignment_expression "bytes[10] = '\0'" (subscript_expression "bytes[10]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0xb] = '\0';" (assignment_expression "bytes[0xb] = '\0'" (subscript_expression "bytes[0xb]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0xc] = '\0';" (assignment_expression "bytes[0xc] = '\0'" (subscript_expression "bytes[0xc]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0xd] = '\0';" (assignment_expression "bytes[0xd] = '\0'" (subscript_expression "bytes[0xd]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0xe] = '\0';" (assignment_expression "bytes[0xe] = '\0'" (subscript_expression "bytes[0xe]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0xf] = '\0';" (assignment_expression "bytes[0xf] = '\0'" (subscript_expression "bytes[0xf]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x10] = '\0';" (assignment_expression "bytes[0x10] = '\0'" (subscript_expression "bytes[0x10]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x11] = '\0';" (assignment_expression "bytes[0x11] = '\0'" (subscript_expression "bytes[0x11]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x12] = '\0';" (assignment_expression "bytes[0x12] = '\0'" (subscript_expression "bytes[0x12]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x13] = '\0';" (assignment_expression "bytes[0x13] = '\0'" (subscript_expression "bytes[0x13]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x14] = '\0';" (assignment_expression "bytes[0x14] = '\0'" (subscript_expression "bytes[0x14]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x15] = '\0';" (assignment_expression "bytes[0x15] = '\0'" (subscript_expression "bytes[0x15]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x16] = '\0';" (assignment_expression "bytes[0x16] = '\0'" (subscript_expression "bytes[0x16]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x17] = '\0';" (assignment_expression "bytes[0x17] = '\0'" (subscript_expression "bytes[0x17]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x18] = '\0';" (assignment_expression "bytes[0x18] = '\0'" (subscript_expression "bytes[0x18]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x19] = '\0';" (assignment_expression "bytes[0x19] = '\0'" (subscript_expression "bytes[0x19]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x1a] = '\0';" (assignment_expression "bytes[0x1a] = '\0'" (subscript_expression "bytes[0x1a]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x1b] = '\0';" (assignment_expression "bytes[0x1b] = '\0'" (subscript_expression "bytes[0x1b]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x1c] = '\0';" (assignment_expression "bytes[0x1c] = '\0'" (subscript_expression "bytes[0x1c]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x1d] = '\0';" (assignment_expression "bytes[0x1d] = '\0'" (subscript_expression "bytes[0x1d]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x1e] = '\0';" (assignment_expression "bytes[0x1e] = '\0'" (subscript_expression "bytes[0x1e]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bytes[0x1f] = '\0';" (assignment_expression "bytes[0x1f] = '\0'" (subscript_expression "bytes[0x1f]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "piVar3 = (int *)bytes;" (assignment_expression "piVar3 = (int *)bytes" identifier = (cast_expression "(int *)bytes" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    } while (&local_1c != piVar9);" do (compound_statement "{\n      piVar9 = (int *)((int)piVar3 + 1);\n      iVar8 = random_byte();\n      *(uchar *)piVar3 = (uchar)iVar8;\n      piVar3 = piVar9;\n    }" { (expression_statement "piVar9 = (int *)((int)piVar3 + 1);" (assignment_expression "piVar9 = (int *)((int)piVar3 + 1)" identifier = (cast_expression "(int *)((int)piVar3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar3 + 1)" ( (binary_expression "(int)piVar3 + 1" (cast_expression "(int)piVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "iVar8 = random_byte();" (assignment_expression "iVar8 = random_byte()" identifier = (call_expression "random_byte()" identifier (argument_list "()" ( )))) ;) (expression_statement "*(uchar *)piVar3 = (uchar)iVar8;" (assignment_expression "*(uchar *)piVar3 = (uchar)iVar8" (pointer_expression "*(uchar *)piVar3" * (cast_expression "(uchar *)piVar3" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(uchar)iVar8" ( (type_descriptor "uchar" type_identifier) ) identifier)) ;) (expression_statement "piVar3 = piVar9;" (assignment_expression "piVar3 = piVar9" identifier = identifier) ;) }) while (parenthesized_expression "(&local_1c != piVar9)" ( (binary_expression "&local_1c != piVar9" (pointer_expression "&local_1c" & identifier) != identifier) )) ;) (expression_statement "bytes._0_4_ = bytes._0_4_ & 0xf8ffffff;" (assignment_expression "bytes._0_4_ = bytes._0_4_ & 0xf8ffffff" (field_expression "bytes._0_4_" identifier . field_identifier) = (binary_expression "bytes._0_4_ & 0xf8ffffff" (field_expression "bytes._0_4_" identifier . field_identifier) & number_literal)) ;) (expression_statement "bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40;" (assignment_expression "bytes._28_4_ = bytes._28_4_ & 0xffffff7f | 0x40" (field_expression "bytes._28_4_" identifier . field_identifier) = (binary_expression "bytes._28_4_ & 0xffffff7f | 0x40" (binary_expression "bytes._28_4_ & 0xffffff7f" (field_expression "bytes._28_4_" identifier . field_identifier) & number_literal) | number_literal)) ;) (expression_statement "pBVar5 = bignum_from_bytes_le(bytes,0x20);" (assignment_expression "pBVar5 = bignum_from_bytes_le(bytes,0x20)" identifier = (call_expression "bignum_from_bytes_le(bytes,0x20)" identifier (argument_list "(bytes,0x20)" ( identifier , number_literal )))) ;) (expression_statement "puVar1 = PTR_smemclr_000b0240;" (assignment_expression "puVar1 = PTR_smemclr_000b0240" identifier = identifier) ;) (expression_statement "puVar4[6] = pBVar5;" (assignment_expression "puVar4[6] = pBVar5" (subscript_expression "puVar4[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "(*(code *)puVar1)(bytes,0x20);" (call_expression "(*(code *)puVar1)(bytes,0x20)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(bytes,0x20)" ( identifier , number_literal ))) ;) (if_statement "if ((Bignum)puVar4[6] == (Bignum)0x0) {\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "((Bignum)puVar4[6] == (Bignum)0x0)" ( (binary_expression "(Bignum)puVar4[6] == (Bignum)0x0" (cast_expression "(Bignum)puVar4[6]" ( (type_descriptor "Bignum" type_identifier) ) (subscript_expression "puVar4[6]" identifier [ number_literal ])) == (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal)) )) (compound_statement "{\nLAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar4);\n      goto LAB_000679e8;\n    }" { (labeled_statement "LAB_00067a7c:\n      puVar10 = (undefined4 *)0x0;" statement_identifier : (expression_statement "puVar10 = (undefined4 *)0x0;" (assignment_expression "puVar10 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) (expression_statement "peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6]);" (assignment_expression "peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6])" identifier = (call_expression "ecp_mul((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6])" identifier (argument_list "((ec_point *)(puVar4[1] + 0x1c),(Bignum)puVar4[6])" ( (cast_expression "(ec_point *)(puVar4[1] + 0x1c)" ( (type_descriptor "ec_point *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4[1] + 0x1c)" ( (binary_expression "puVar4[1] + 0x1c" (subscript_expression "puVar4[1]" identifier [ number_literal ]) + number_literal) ))) , (cast_expression "(Bignum)puVar4[6]" ( (type_descriptor "Bignum" type_identifier) ) (subscript_expression "puVar4[6]" identifier [ number_literal ])) )))) ;) (if_statement "if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }" if (parenthesized_expression "(peVar6 == (ec_point *)0x0)" ( (binary_expression "peVar6 == (ec_point *)0x0" identifier == (cast_expression "(ec_point *)0x0" ( (type_descriptor "ec_point *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }" { comment (expression_statement "freebn((Bignum_conflict)puVar4[6]);" (call_expression "freebn((Bignum_conflict)puVar4[6])" identifier (argument_list "((Bignum_conflict)puVar4[6])" ( (cast_expression "(Bignum_conflict)puVar4[6]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "puVar4[6]" identifier [ number_literal ])) ))) ;) })) }) (else_clause "else {\n    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;\n    puVar4[6] = pBVar5;\n    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }" else (compound_statement "{\n    pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;\n    puVar4[6] = pBVar5;\n    if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;\n    peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);\n    if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }\n  }" { (expression_statement "pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])\n    ;" (assignment_expression "pBVar5 = bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])" identifier = (call_expression "bignum_random_in_range(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])" identifier (argument_list "(*(Bignum_conflict *)PTR_One_000b0850,(Bignum_conflict)piVar3[7])" ( (pointer_expression "*(Bignum_conflict *)PTR_One_000b0850" * (cast_expression "(Bignum_conflict *)PTR_One_000b0850" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (cast_expression "(Bignum_conflict)piVar3[7]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "piVar3[7]" identifier [ number_literal ])) )))) ;) (expression_statement "puVar4[6] = pBVar5;" (assignment_expression "puVar4[6] = pBVar5" (subscript_expression "puVar4[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pBVar5 == (Bignum_conflict)0x0) goto LAB_00067a7c;" if (parenthesized_expression "(pBVar5 == (Bignum_conflict)0x0)" ( (binary_expression "pBVar5 == (Bignum_conflict)0x0" identifier == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_00067a7c;" goto statement_identifier ;)) (expression_statement "peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5);" (assignment_expression "peVar6 = ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5)" identifier = (call_expression "ecp_mul((ec_point *)(puVar4[1] + 0x20),pBVar5)" identifier (argument_list "((ec_point *)(puVar4[1] + 0x20),pBVar5)" ( (cast_expression "(ec_point *)(puVar4[1] + 0x20)" ( (type_descriptor "ec_point *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4[1] + 0x20)" ( (binary_expression "puVar4[1] + 0x20" (subscript_expression "puVar4[1]" identifier [ number_literal ]) + number_literal) ))) , identifier )))) ;) (if_statement "if (peVar6 == (ec_point *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }" if (parenthesized_expression "(peVar6 == (ec_point *)0x0)" ( (binary_expression "peVar6 == (ec_point *)0x0" identifier == (cast_expression "(ec_point *)0x0" ( (type_descriptor "ec_point *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      freebn((Bignum_conflict)puVar4[6]);\n    }" { comment (expression_statement "freebn((Bignum_conflict)puVar4[6]);" (call_expression "freebn((Bignum_conflict)puVar4[6])" identifier (argument_list "((Bignum_conflict)puVar4[6])" ( (cast_expression "(Bignum_conflict)puVar4[6]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "puVar4[6]" identifier [ number_literal ])) ))) ;) })) }))) (expression_statement "puVar1 = PTR_safefree_000b01b0;" (assignment_expression "puVar1 = PTR_safefree_000b01b0" identifier = identifier) ;) (expression_statement "pvVar7 = peVar6->y;" (assignment_expression "pvVar7 = peVar6->y" identifier = (field_expression "peVar6->y" identifier -> field_identifier)) ;) (expression_statement "puVar4[2] = peVar6->x;" (assignment_expression "puVar4[2] = peVar6->x" (subscript_expression "puVar4[2]" identifier [ number_literal ]) = (field_expression "peVar6->x" identifier -> field_identifier)) ;) (expression_statement "puVar4[3] = pvVar7;" (assignment_expression "puVar4[3] = pvVar7" (subscript_expression "puVar4[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4[4] = 0;" (assignment_expression "puVar4[4] = 0" (subscript_expression "puVar4[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "(*(code *)puVar1)(peVar6);" (call_expression "(*(code *)puVar1)(peVar6)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(peVar6)" ( identifier ))) ;) (expression_statement "puVar10 = puVar4;" (assignment_expression "puVar10 = puVar4" identifier = identifier) ;) (labeled_statement "LAB_000679e8:\n  if (local_1c == *(int *)puVar2) {\n    return puVar10;\n  }" statement_identifier : (if_statement "if (local_1c == *(int *)puVar2) {\n    return puVar10;\n  }" if (parenthesized_expression "(local_1c == *(int *)puVar2)" ( (binary_expression "local_1c == *(int *)puVar2" identifier == (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return puVar10;\n  }" { (return_statement "return puVar10;" return identifier ;) }))) (expression_statement "iVar8 = local_1c;" (assignment_expression "iVar8 = local_1c" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000b0c70)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b0c70)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b0c70)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000b0c70" * (cast_expression "(code *)PTR___stack_chk_fail_000b0c70" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) comment (expression_statement "bignum_bitcount(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10));" (call_expression "bignum_bitcount(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10))" identifier (argument_list "(*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10))" ( (pointer_expression "*(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10)" * (cast_expression "(Bignum_conflict *)(*(int *)(iVar8 + 4) + 0x10)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar8 + 4) + 0x10)" ( (binary_expression "*(int *)(iVar8 + 4) + 0x10" (pointer_expression "*(int *)(iVar8 + 4)" * (cast_expression "(int *)(iVar8 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 4)" ( (binary_expression "iVar8 + 4" identifier + number_literal) )))) + number_literal) )))) ))) ;) })))
(translation_unit "undefined4 * ssh_ecdhkex_newkey(int param_1)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}\n\n" (function_definition "undefined4 * ssh_ecdhkex_newkey(int param_1)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}" type_identifier (pointer_declarator "* ssh_ecdhkex_newkey(int param_1)" * (function_declarator "ssh_ecdhkex_newkey(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) )))) (compound_statement "{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "undefined1 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "undefined4 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "undefined *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "code *pcVar16;" type_identifier (pointer_declarator "*pcVar16" * identifier) ;) (declaration "uint local_3c [9];" type_identifier (array_declarator "local_3c [9]" identifier [ number_literal ]) ;) (expression_statement "puVar15 = PTR___stack_chk_guard_000b0c9c;" (assignment_expression "puVar15 = PTR___stack_chk_guard_000b0c9c" identifier = identifier) ;) (expression_statement "local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;" (assignment_expression "local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c" (subscript_expression "local_3c[8]" identifier [ number_literal ]) = (pointer_expression "*(uint *)PTR___stack_chk_guard_000b0c9c" * (cast_expression "(uint *)PTR___stack_chk_guard_000b0c9c" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();" (assignment_expression "piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))()" identifier = (cast_expression "(int *)(*(code *)**(undefined4 **)(param_1 + 0x10))()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)**(undefined4 **)(param_1 + 0x10))()" (parenthesized_expression "(*(code *)**(undefined4 **)(param_1 + 0x10))" ( (pointer_expression "*(code *)**(undefined4 **)(param_1 + 0x10)" * (cast_expression "(code *)**(undefined4 **)(param_1 + 0x10)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(param_1 + 0x10)" * (pointer_expression "*(undefined4 **)(param_1 + 0x10)" * (cast_expression "(undefined4 **)(param_1 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))))) )) (argument_list "()" ( ))))) ;) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(1,0x1c)" ( number_literal , number_literal ))))) ;) (expression_statement "iVar6 = *piVar2;" (assignment_expression "iVar6 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (expression_statement "*puVar3 = 0;" (assignment_expression "*puVar3 = 0" (pointer_expression "*puVar3" * identifier) = number_literal) ;) (expression_statement "puVar3[1] = piVar2;" (assignment_expression "puVar3[1] = piVar2" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" if (parenthesized_expression "(iVar6 == 1)" ( (binary_expression "iVar6 == 1" identifier == number_literal) )) (compound_statement "{\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" { (expression_statement "local_3c[0] = 0;" (assignment_expression "local_3c[0] = 0" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[1] = 0;" (assignment_expression "local_3c[1] = 0" (subscript_expression "local_3c[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[2] = 0;" (assignment_expression "local_3c[2] = 0" (subscript_expression "local_3c[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[3] = 0;" (assignment_expression "local_3c[3] = 0" (subscript_expression "local_3c[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[4] = 0;" (assignment_expression "local_3c[4] = 0" (subscript_expression "local_3c[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[5] = 0;" (assignment_expression "local_3c[5] = 0" (subscript_expression "local_3c[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[6] = 0;" (assignment_expression "local_3c[6] = 0" (subscript_expression "local_3c[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_3c[7] = 0;" (assignment_expression "local_3c[7] = 0" (subscript_expression "local_3c[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar10 = local_3c;" (assignment_expression "puVar10 = local_3c" identifier = identifier) ;) (do_statement "do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);" do (compound_statement "{\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    }" { (expression_statement "puVar11 = (uint *)((int)puVar10 + 1);" (assignment_expression "puVar11 = (uint *)((int)puVar10 + 1)" identifier = (cast_expression "(uint *)((int)puVar10 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 + 1)" ( (binary_expression "(int)puVar10 + 1" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar5 = random_byte();" (assignment_expression "uVar5 = random_byte()" identifier = (call_expression "random_byte()" identifier (argument_list "()" ( )))) ;) (expression_statement "*(undefined1 *)puVar10 = uVar5;" (assignment_expression "*(undefined1 *)puVar10 = uVar5" (pointer_expression "*(undefined1 *)puVar10" * (cast_expression "(undefined1 *)puVar10" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "puVar10 = puVar11;" (assignment_expression "puVar10 = puVar11" identifier = identifier) ;) }) while (parenthesized_expression "(local_3c + 8 != puVar11)" ( (binary_expression "local_3c + 8 != puVar11" (binary_expression "local_3c + 8" identifier + number_literal) != identifier) )) ;) (expression_statement "local_3c[0] = local_3c[0] & 0xf8ffffff;" (assignment_expression "local_3c[0] = local_3c[0] & 0xf8ffffff" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = (binary_expression "local_3c[0] & 0xf8ffffff" (subscript_expression "local_3c[0]" identifier [ number_literal ]) & number_literal)) ;) (expression_statement "local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;" (assignment_expression "local_3c[7] = local_3c[7] & 0xffffff7f | 0x40" (subscript_expression "local_3c[7]" identifier [ number_literal ]) = (binary_expression "local_3c[7] & 0xffffff7f | 0x40" (binary_expression "local_3c[7] & 0xffffff7f" (subscript_expression "local_3c[7]" identifier [ number_literal ]) & number_literal) | number_literal)) ;) (expression_statement "uVar4 = bignum_from_bytes_le(local_3c,0x20);" (assignment_expression "uVar4 = bignum_from_bytes_le(local_3c,0x20)" identifier = (call_expression "bignum_from_bytes_le(local_3c,0x20)" identifier (argument_list "(local_3c,0x20)" ( identifier , number_literal )))) ;) (expression_statement "puVar1 = PTR_smemclr_000b0240;" (assignment_expression "puVar1 = PTR_smemclr_000b0240" identifier = identifier) ;) (expression_statement "puVar3[6] = uVar4;" (assignment_expression "puVar3[6] = uVar4" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "(*(code *)puVar1)(local_3c,0x20);" (call_expression "(*(code *)puVar1)(local_3c,0x20)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_3c,0x20)" ( identifier , number_literal ))) ;) (expression_statement "piVar9 = (int *)puVar3[6];" (assignment_expression "piVar9 = (int *)puVar3[6]" identifier = (cast_expression "(int *)puVar3[6]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar3[6]" identifier [ number_literal ]))) ;) (expression_statement "piVar2 = piVar9;" (assignment_expression "piVar2 = piVar9" identifier = identifier) ;) (if_statement "if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" { (labeled_statement "LAB_00067a7c:\n      piVar9 = piVar2;" statement_identifier : (expression_statement "piVar9 = piVar2;" (assignment_expression "piVar9 = piVar2" identifier = identifier) ;)) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) (expression_statement "iVar6 = ecp_mul(puVar3[1] + 0x1c);" (assignment_expression "iVar6 = ecp_mul(puVar3[1] + 0x1c)" identifier = (call_expression "ecp_mul(puVar3[1] + 0x1c)" identifier (argument_list "(puVar3[1] + 0x1c)" ( (binary_expression "puVar3[1] + 0x1c" (subscript_expression "puVar3[1]" identifier [ number_literal ]) + number_literal) )))) ;) (if_statement "if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" { (expression_statement "freebn(puVar3[6]);" (call_expression "freebn(puVar3[6])" identifier (argument_list "(puVar3[6])" ( (subscript_expression "puVar3[6]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) }) (else_clause "else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" else (compound_statement "{\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" { (expression_statement "piVar2 = (int *)piVar2[7];" (assignment_expression "piVar2 = (int *)piVar2[7]" identifier = (cast_expression "(int *)piVar2[7]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar2[7]" identifier [ number_literal ]))) ;) (expression_statement "piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);" (assignment_expression "piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" identifier = (cast_expression "(int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" identifier (argument_list "(*(undefined4 *)PTR_One_000b0850)" ( (pointer_expression "*(undefined4 *)PTR_One_000b0850" * (cast_expression "(undefined4 *)PTR_One_000b0850" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;) (expression_statement "puVar3[6] = piVar9;" (assignment_expression "puVar3[6] = piVar9" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (piVar9 == (int *)0x0) goto LAB_00067a7c;" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00067a7c;" goto statement_identifier ;)) (expression_statement "iVar6 = ecp_mul(puVar3[1] + 0x20);" (assignment_expression "iVar6 = ecp_mul(puVar3[1] + 0x20)" identifier = (call_expression "ecp_mul(puVar3[1] + 0x20)" identifier (argument_list "(puVar3[1] + 0x20)" ( (binary_expression "puVar3[1] + 0x20" (subscript_expression "puVar3[1]" identifier [ number_literal ]) + number_literal) )))) ;) (if_statement "if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" { (expression_statement "freebn(puVar3[6]);" (call_expression "freebn(puVar3[6])" identifier (argument_list "(puVar3[6])" ( (subscript_expression "puVar3[6]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (goto_statement "goto LAB_000679e8;" goto statement_identifier ;) })) }))) (expression_statement "puVar1 = PTR_safefree_000b01b0;" (assignment_expression "puVar1 = PTR_safefree_000b01b0" identifier = identifier) ;) (expression_statement "uVar4 = *(undefined4 *)(iVar6 + 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar6 + 8)" identifier = (pointer_expression "*(undefined4 *)(iVar6 + 8)" * (cast_expression "(undefined4 *)(iVar6 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 8)" ( (binary_expression "iVar6 + 8" identifier + number_literal) ))))) ;) (expression_statement "puVar3[2] = *(undefined4 *)(iVar6 + 4);" (assignment_expression "puVar3[2] = *(undefined4 *)(iVar6 + 4)" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (pointer_expression "*(undefined4 *)(iVar6 + 4)" * (cast_expression "(undefined4 *)(iVar6 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar3[3] = uVar4;" (assignment_expression "puVar3[3] = uVar4" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3[4] = 0;" (assignment_expression "puVar3[4] = 0" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "(*(code *)puVar1)(iVar6);" (call_expression "(*(code *)puVar1)(iVar6)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar6)" ( identifier ))) ;) (expression_statement "puVar14 = puVar3;" (assignment_expression "puVar14 = puVar3" identifier = identifier) ;) (labeled_statement "LAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }" statement_identifier : (if_statement "if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }" if (parenthesized_expression "(local_3c[8] == *(int *)puVar15)" ( (binary_expression "local_3c[8] == *(int *)puVar15" (subscript_expression "local_3c[8]" identifier [ number_literal ]) == (pointer_expression "*(int *)puVar15" * (cast_expression "(int *)puVar15" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return puVar14;\n  }" { (return_statement "return puVar14;" return identifier ;) }))) (expression_statement "uVar7 = local_3c[8];" (assignment_expression "uVar7 = local_3c[8]" identifier = (subscript_expression "local_3c[8]" identifier [ number_literal ])) ;) (expression_statement "puVar15 = PTR___stack_chk_fail_000b0c70;" (assignment_expression "puVar15 = PTR___stack_chk_fail_000b0c70" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000b0c70)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b0c70)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b0c70)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000b0c70" * (cast_expression "(code *)PTR___stack_chk_fail_000b0c70" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));" (assignment_expression "iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" identifier = (call_expression "bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" identifier (argument_list "(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" ( (pointer_expression "*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10)" * (cast_expression "(undefined4 *)(*(int *)(uVar7 + 4) + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(uVar7 + 4) + 0x10)" ( (binary_expression "*(int *)(uVar7 + 4) + 0x10" (pointer_expression "*(int *)(uVar7 + 4)" * (cast_expression "(int *)(uVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 4)" ( (binary_expression "uVar7 + 4" identifier + number_literal) )))) + number_literal) )))) )))) ;) (expression_statement "iVar13 = iVar6 + 7;" (assignment_expression "iVar13 = iVar6 + 7" identifier = (binary_expression "iVar6 + 7" identifier + number_literal)) ;) (if_statement "if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }" if (parenthesized_expression "(iVar13 < 0)" ( (binary_expression "iVar13 < 0" identifier < number_literal) )) (compound_statement "{\n    iVar13 = iVar6 + 0xe;\n  }" { (expression_statement "iVar13 = iVar6 + 0xe;" (assignment_expression "iVar13 = iVar6 + 0xe" identifier = (binary_expression "iVar6 + 0xe" identifier + number_literal)) ;) })) (expression_statement "iVar13 = iVar13 >> 3;" (assignment_expression "iVar13 = iVar13 >> 3" identifier = (binary_expression "iVar13 >> 3" identifier >> number_literal)) ;) (expression_statement "iVar12 = iVar13;" (assignment_expression "iVar12 = iVar13" identifier = identifier) ;) (if_statement "if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }" if (parenthesized_expression "(**(int **)(uVar7 + 4) == 0)" ( (binary_expression "**(int **)(uVar7 + 4) == 0" (pointer_expression "**(int **)(uVar7 + 4)" * (pointer_expression "*(int **)(uVar7 + 4)" * (cast_expression "(int **)(uVar7 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar7 + 4)" ( (binary_expression "uVar7 + 4" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n    iVar12 = iVar13 * 2 + 1;\n  }" { (expression_statement "iVar12 = iVar13 * 2 + 1;" (assignment_expression "iVar12 = iVar13 * 2 + 1" identifier = (binary_expression "iVar13 * 2 + 1" (binary_expression "iVar13 * 2" identifier * number_literal) + number_literal)) ;) })) (expression_statement "pcVar16 = *(code **)(puVar15 + 0x48720);" (assignment_expression "pcVar16 = *(code **)(puVar15 + 0x48720)" identifier = (pointer_expression "*(code **)(puVar15 + 0x48720)" * (cast_expression "(code **)(puVar15 + 0x48720)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x48720)" ( (binary_expression "puVar15 + 0x48720" identifier + number_literal) ))))) ;) (expression_statement "*piVar9 = iVar12;" (assignment_expression "*piVar9 = iVar12" (pointer_expression "*piVar9" * identifier) = identifier) ;) (expression_statement "puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);" (assignment_expression "puVar3 = (undefined4 *)(*pcVar16)(iVar12,1)" identifier = (cast_expression "(undefined4 *)(*pcVar16)(iVar12,1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar16)(iVar12,1)" (parenthesized_expression "(*pcVar16)" ( (pointer_expression "*pcVar16" * identifier) )) (argument_list "(iVar12,1)" ( identifier , number_literal ))))) ;) (if_statement "if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" if (parenthesized_expression "(**(int **)(uVar7 + 4) == 0)" ( (binary_expression "**(int **)(uVar7 + 4) == 0" (pointer_expression "**(int **)(uVar7 + 4)" * (pointer_expression "*(int **)(uVar7 + 4)" * (cast_expression "(int **)(uVar7 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar7 + 4)" ( (binary_expression "uVar7 + 4" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }" { (expression_statement "*(undefined1 *)puVar3 = 4;" (assignment_expression "*(undefined1 *)puVar3 = 4" (pointer_expression "*(undefined1 *)puVar3" * (cast_expression "(undefined1 *)puVar3" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = number_literal) ;) (expression_statement "iVar6 = iVar13 + -1;" (assignment_expression "iVar6 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + 1);" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + 1)" identifier = (cast_expression "(undefined1 *)((int)puVar3 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 1)" ( (binary_expression "(int)puVar3 + 1" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }" if (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }" { (do_statement "do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);" do (compound_statement "{\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "iVar12 = iVar6 + -1;" (assignment_expression "iVar12 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6)" identifier = (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6)" identifier (argument_list "(*(undefined4 *)(uVar7 + 8),iVar6)" ( (pointer_expression "*(undefined4 *)(uVar7 + 8)" * (cast_expression "(undefined4 *)(uVar7 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 8)" ( (binary_expression "uVar7 + 8" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "iVar6 = iVar12;" (assignment_expression "iVar6 = iVar12" identifier = identifier) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar12 != -1)" ( (binary_expression "iVar12 != -1" identifier != number_literal) )) ;) (expression_statement "iVar6 = iVar13 + -1;" (assignment_expression "iVar6 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13" identifier = (binary_expression "(undefined1 *)((int)puVar3 + 1) + iVar13" (cast_expression "(undefined1 *)((int)puVar3 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 1)" ( (binary_expression "(int)puVar3 + 1" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))) + identifier)) ;) (do_statement "do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);" do (compound_statement "{\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "iVar13 = iVar6 + -1;" (assignment_expression "iVar13 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6)" identifier = (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6)" identifier (argument_list "(*(undefined4 *)(uVar7 + 0xc),iVar6)" ( (pointer_expression "*(undefined4 *)(uVar7 + 0xc)" * (cast_expression "(undefined4 *)(uVar7 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 0xc)" ( (binary_expression "uVar7 + 0xc" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "iVar6 = iVar13;" (assignment_expression "iVar6 = iVar13" identifier = identifier) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar13 != -1)" ( (binary_expression "iVar13 != -1" identifier != number_literal) )) ;) (return_statement "return puVar3;" return identifier ;) })) }) (else_clause "else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" else (compound_statement "{\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" { (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }" { (do_statement "do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);" do (compound_statement "{\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      }" { (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12)" identifier = (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12)" identifier (argument_list "(*(undefined4 *)(uVar7 + 8),iVar12)" ( (pointer_expression "*(undefined4 *)(uVar7 + 8)" * (cast_expression "(undefined4 *)(uVar7 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + 8)" ( (binary_expression "uVar7 + 8" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + iVar12);" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + iVar12)" identifier = (cast_expression "(undefined1 *)((int)puVar3 + iVar12)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + iVar12)" ( (binary_expression "(int)puVar3 + iVar12" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" identifier = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" * identifier) = identifier) ;) }) while (parenthesized_expression "(iVar12 < iVar13)" ( (binary_expression "iVar12 < iVar13" identifier < identifier) )) ;) })) }))) (return_statement "return puVar3;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (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 * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))))) )) (argument_list ( ))))) ;) (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 *)) ) IDENT)) )) (argument_list ( LIT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (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 (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 = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) | LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + 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 (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))) + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (return_statement return IDENT ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) }))) (return_statement return IDENT ;) })))
(function_definition "undefined4 * ssh_ecdhkex_newkey(int param_1)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}" (type_identifier "undefined4") (pointer_declarator "* ssh_ecdhkex_newkey(int param_1)" (* "*") (function_declarator "ssh_ecdhkex_newkey(int param_1)" (identifier "ssh_ecdhkex_newkey") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")")))) (compound_statement "{\n  undefined *puVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined1 uVar5;\n  undefined4 uVar4;\n  int iVar6;\n  uint uVar7;\n  undefined1 *puVar8;\n  int *piVar9;\n  uint *puVar10;\n  uint *puVar11;\n  int iVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  undefined *puVar15;\n  code *pcVar16;\n  uint local_3c [9];\n  \n  puVar15 = PTR___stack_chk_guard_000b0c9c;\n  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;\n  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);\n  iVar6 = *piVar2;\n  *puVar3 = 0;\n  puVar3[1] = piVar2;\n  if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  puVar1 = PTR_safefree_000b01b0;\n  uVar4 = *(undefined4 *)(iVar6 + 8);\n  puVar3[2] = *(undefined4 *)(iVar6 + 4);\n  puVar3[3] = uVar4;\n  puVar3[4] = 0;\n  (*(code *)puVar1)(iVar6);\n  puVar14 = puVar3;\nLAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }\n  uVar7 = local_3c[8];\n  puVar15 = PTR___stack_chk_fail_000b0c70;\n  (*(code *)PTR___stack_chk_fail_000b0c70)();\n  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));\n  iVar13 = iVar6 + 7;\n  if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }\n  iVar13 = iVar13 >> 3;\n  iVar12 = iVar13;\n  if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }\n  pcVar16 = *(code **)(puVar15 + 0x48720);\n  *piVar9 = iVar12;\n  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);\n  if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }\n  return puVar3;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined1 uVar5;" (type_identifier "undefined1") (identifier "uVar5") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "undefined1 *puVar8;" (type_identifier "undefined1") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "uint *puVar10;" (type_identifier "uint") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "uint *puVar11;" (type_identifier "uint") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "undefined4 *puVar14;" (type_identifier "undefined4") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "undefined *puVar15;" (type_identifier "undefined") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "code *pcVar16;" (type_identifier "code") (pointer_declarator "*pcVar16" (* "*") (identifier "pcVar16")) (; ";")) (declaration "uint local_3c [9];" (type_identifier "uint") (array_declarator "local_3c [9]" (identifier "local_3c") ([ "[") (number_literal "9") (] "]")) (; ";")) (expression_statement "puVar15 = PTR___stack_chk_guard_000b0c9c;" (assignment_expression "puVar15 = PTR___stack_chk_guard_000b0c9c" (identifier "puVar15") (= "=") (identifier "PTR___stack_chk_guard_000b0c9c")) (; ";")) (expression_statement "local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;" (assignment_expression "local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c" (subscript_expression "local_3c[8]" (identifier "local_3c") ([ "[") (number_literal "8") (] "]")) (= "=") (pointer_expression "*(uint *)PTR___stack_chk_guard_000b0c9c" (* "*") (cast_expression "(uint *)PTR___stack_chk_guard_000b0c9c" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000b0c9c")))) (; ";")) (expression_statement "piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();" (assignment_expression "piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))()" (identifier "piVar2") (= "=") (cast_expression "(int *)(*(code *)**(undefined4 **)(param_1 + 0x10))()" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)**(undefined4 **)(param_1 + 0x10))()" (parenthesized_expression "(*(code *)**(undefined4 **)(param_1 + 0x10))" (( "(") (pointer_expression "*(code *)**(undefined4 **)(param_1 + 0x10)" (* "*") (cast_expression "(code *)**(undefined4 **)(param_1 + 0x10)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "**(undefined4 **)(param_1 + 0x10)" (* "*") (pointer_expression "*(undefined4 **)(param_1 + 0x10)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x10)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))))) () ")")) (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b01e8)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b01e8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b01e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b01e8"))) () ")")) (argument_list "(1,0x1c)" (( "(") (number_literal "1") (, ",") (number_literal "0x1c") () ")"))))) (; ";")) (expression_statement "iVar6 = *piVar2;" (assignment_expression "iVar6 = *piVar2" (identifier "iVar6") (= "=") (pointer_expression "*piVar2" (* "*") (identifier "piVar2"))) (; ";")) (expression_statement "*puVar3 = 0;" (assignment_expression "*puVar3 = 0" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar3[1] = piVar2;" (assignment_expression "puVar3[1] = piVar2" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "piVar2")) (; ";")) (if_statement "if (iVar6 == 1) {\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }\n  else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" (if "if") (parenthesized_expression "(iVar6 == 1)" (( "(") (binary_expression "iVar6 == 1" (identifier "iVar6") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    local_3c[0] = 0;\n    local_3c[1] = 0;\n    local_3c[2] = 0;\n    local_3c[3] = 0;\n    local_3c[4] = 0;\n    local_3c[5] = 0;\n    local_3c[6] = 0;\n    local_3c[7] = 0;\n    puVar10 = local_3c;\n    do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);\n    local_3c[0] = local_3c[0] & 0xf8ffffff;\n    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;\n    uVar4 = bignum_from_bytes_le(local_3c,0x20);\n    puVar1 = PTR_smemclr_000b0240;\n    puVar3[6] = uVar4;\n    (*(code *)puVar1)(local_3c,0x20);\n    piVar9 = (int *)puVar3[6];\n    piVar2 = piVar9;\n    if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n    iVar6 = ecp_mul(puVar3[1] + 0x1c);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" ({ "{") (expression_statement "local_3c[0] = 0;" (assignment_expression "local_3c[0] = 0" (subscript_expression "local_3c[0]" (identifier "local_3c") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[1] = 0;" (assignment_expression "local_3c[1] = 0" (subscript_expression "local_3c[1]" (identifier "local_3c") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[2] = 0;" (assignment_expression "local_3c[2] = 0" (subscript_expression "local_3c[2]" (identifier "local_3c") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[3] = 0;" (assignment_expression "local_3c[3] = 0" (subscript_expression "local_3c[3]" (identifier "local_3c") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[4] = 0;" (assignment_expression "local_3c[4] = 0" (subscript_expression "local_3c[4]" (identifier "local_3c") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[5] = 0;" (assignment_expression "local_3c[5] = 0" (subscript_expression "local_3c[5]" (identifier "local_3c") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[6] = 0;" (assignment_expression "local_3c[6] = 0" (subscript_expression "local_3c[6]" (identifier "local_3c") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_3c[7] = 0;" (assignment_expression "local_3c[7] = 0" (subscript_expression "local_3c[7]" (identifier "local_3c") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = local_3c;" (assignment_expression "puVar10 = local_3c" (identifier "puVar10") (= "=") (identifier "local_3c")) (; ";")) (do_statement "do {\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    } while (local_3c + 8 != puVar11);" (do "do") (compound_statement "{\n      puVar11 = (uint *)((int)puVar10 + 1);\n      uVar5 = random_byte();\n      *(undefined1 *)puVar10 = uVar5;\n      puVar10 = puVar11;\n    }" ({ "{") (expression_statement "puVar11 = (uint *)((int)puVar10 + 1);" (assignment_expression "puVar11 = (uint *)((int)puVar10 + 1)" (identifier "puVar11") (= "=") (cast_expression "(uint *)((int)puVar10 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar10 + 1)" (( "(") (binary_expression "(int)puVar10 + 1" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "uVar5 = random_byte();" (assignment_expression "uVar5 = random_byte()" (identifier "uVar5") (= "=") (call_expression "random_byte()" (identifier "random_byte") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "*(undefined1 *)puVar10 = uVar5;" (assignment_expression "*(undefined1 *)puVar10 = uVar5" (pointer_expression "*(undefined1 *)puVar10" (* "*") (cast_expression "(undefined1 *)puVar10" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar10"))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "puVar10 = puVar11;" (assignment_expression "puVar10 = puVar11" (identifier "puVar10") (= "=") (identifier "puVar11")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_3c + 8 != puVar11)" (( "(") (binary_expression "local_3c + 8 != puVar11" (binary_expression "local_3c + 8" (identifier "local_3c") (+ "+") (number_literal "8")) (!= "!=") (identifier "puVar11")) () ")")) (; ";")) (expression_statement "local_3c[0] = local_3c[0] & 0xf8ffffff;" (assignment_expression "local_3c[0] = local_3c[0] & 0xf8ffffff" (subscript_expression "local_3c[0]" (identifier "local_3c") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "local_3c[0] & 0xf8ffffff" (subscript_expression "local_3c[0]" (identifier "local_3c") ([ "[") (number_literal "0") (] "]")) (& "&") (number_literal "0xf8ffffff"))) (; ";")) (expression_statement "local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;" (assignment_expression "local_3c[7] = local_3c[7] & 0xffffff7f | 0x40" (subscript_expression "local_3c[7]" (identifier "local_3c") ([ "[") (number_literal "7") (] "]")) (= "=") (binary_expression "local_3c[7] & 0xffffff7f | 0x40" (binary_expression "local_3c[7] & 0xffffff7f" (subscript_expression "local_3c[7]" (identifier "local_3c") ([ "[") (number_literal "7") (] "]")) (& "&") (number_literal "0xffffff7f")) (| "|") (number_literal "0x40"))) (; ";")) (expression_statement "uVar4 = bignum_from_bytes_le(local_3c,0x20);" (assignment_expression "uVar4 = bignum_from_bytes_le(local_3c,0x20)" (identifier "uVar4") (= "=") (call_expression "bignum_from_bytes_le(local_3c,0x20)" (identifier "bignum_from_bytes_le") (argument_list "(local_3c,0x20)" (( "(") (identifier "local_3c") (, ",") (number_literal "0x20") () ")")))) (; ";")) (expression_statement "puVar1 = PTR_smemclr_000b0240;" (assignment_expression "puVar1 = PTR_smemclr_000b0240" (identifier "puVar1") (= "=") (identifier "PTR_smemclr_000b0240")) (; ";")) (expression_statement "puVar3[6] = uVar4;" (assignment_expression "puVar3[6] = uVar4" (subscript_expression "puVar3[6]" (identifier "puVar3") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "(*(code *)puVar1)(local_3c,0x20);" (call_expression "(*(code *)puVar1)(local_3c,0x20)" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "(local_3c,0x20)" (( "(") (identifier "local_3c") (, ",") (number_literal "0x20") () ")"))) (; ";")) (expression_statement "piVar9 = (int *)puVar3[6];" (assignment_expression "piVar9 = (int *)puVar3[6]" (identifier "piVar9") (= "=") (cast_expression "(int *)puVar3[6]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar3[6]" (identifier "puVar3") ([ "[") (number_literal "6") (] "]")))) (; ";")) (expression_statement "piVar2 = piVar9;" (assignment_expression "piVar2 = piVar9" (identifier "piVar2") (= "=") (identifier "piVar9")) (; ";")) (if_statement "if (piVar9 == (int *)0x0) {\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" (if "if") (parenthesized_expression "(piVar9 == (int *)0x0)" (( "(") (binary_expression "piVar9 == (int *)0x0" (identifier "piVar9") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_00067a7c:\n      piVar9 = piVar2;\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" ({ "{") (labeled_statement "LAB_00067a7c:\n      piVar9 = piVar2;" (statement_identifier "LAB_00067a7c") (: ":") (expression_statement "piVar9 = piVar2;" (assignment_expression "piVar9 = piVar2" (identifier "piVar9") (= "=") (identifier "piVar2")) (; ";"))) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" (identifier "puVar14") (= "=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (goto_statement "goto LAB_000679e8;" (goto "goto") (statement_identifier "LAB_000679e8") (; ";")) (} "}"))) (expression_statement "iVar6 = ecp_mul(puVar3[1] + 0x1c);" (assignment_expression "iVar6 = ecp_mul(puVar3[1] + 0x1c)" (identifier "iVar6") (= "=") (call_expression "ecp_mul(puVar3[1] + 0x1c)" (identifier "ecp_mul") (argument_list "(puVar3[1] + 0x1c)" (( "(") (binary_expression "puVar3[1] + 0x1c" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "0x1c")) () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" ({ "{") (expression_statement "freebn(puVar3[6]);" (call_expression "freebn(puVar3[6])" (identifier "freebn") (argument_list "(puVar3[6])" (( "(") (subscript_expression "puVar3[6]" (identifier "puVar3") ([ "[") (number_literal "6") (] "]")) () ")"))) (; ";")) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" (identifier "puVar14") (= "=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (goto_statement "goto LAB_000679e8;" (goto "goto") (statement_identifier "LAB_000679e8") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" (else "else") (compound_statement "{\n    piVar2 = (int *)piVar2[7];\n    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);\n    puVar3[6] = piVar9;\n    if (piVar9 == (int *)0x0) goto LAB_00067a7c;\n    iVar6 = ecp_mul(puVar3[1] + 0x20);\n    if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }\n  }" ({ "{") (expression_statement "piVar2 = (int *)piVar2[7];" (assignment_expression "piVar2 = (int *)piVar2[7]" (identifier "piVar2") (= "=") (cast_expression "(int *)piVar2[7]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar2[7]" (identifier "piVar2") ([ "[") (number_literal "7") (] "]")))) (; ";")) (expression_statement "piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);" (assignment_expression "piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" (identifier "piVar9") (= "=") (cast_expression "(int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "bignum_random_in_range(*(undefined4 *)PTR_One_000b0850)" (identifier "bignum_random_in_range") (argument_list "(*(undefined4 *)PTR_One_000b0850)" (( "(") (pointer_expression "*(undefined4 *)PTR_One_000b0850" (* "*") (cast_expression "(undefined4 *)PTR_One_000b0850" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_One_000b0850"))) () ")"))))) (; ";")) (expression_statement "puVar3[6] = piVar9;" (assignment_expression "puVar3[6] = piVar9" (subscript_expression "puVar3[6]" (identifier "puVar3") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "piVar9")) (; ";")) (if_statement "if (piVar9 == (int *)0x0) goto LAB_00067a7c;" (if "if") (parenthesized_expression "(piVar9 == (int *)0x0)" (( "(") (binary_expression "piVar9 == (int *)0x0" (identifier "piVar9") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00067a7c;" (goto "goto") (statement_identifier "LAB_00067a7c") (; ";"))) (expression_statement "iVar6 = ecp_mul(puVar3[1] + 0x20);" (assignment_expression "iVar6 = ecp_mul(puVar3[1] + 0x20)" (identifier "iVar6") (= "=") (call_expression "ecp_mul(puVar3[1] + 0x20)" (identifier "ecp_mul") (argument_list "(puVar3[1] + 0x20)" (( "(") (binary_expression "puVar3[1] + 0x20" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "0x20")) () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      freebn(puVar3[6]);\n      puVar14 = (undefined4 *)0x0;\n      (*(code *)PTR_safefree_000b01b0)(puVar3);\n      goto LAB_000679e8;\n    }" ({ "{") (expression_statement "freebn(puVar3[6]);" (call_expression "freebn(puVar3[6])" (identifier "freebn") (argument_list "(puVar3[6])" (( "(") (subscript_expression "puVar3[6]" (identifier "puVar3") ([ "[") (number_literal "6") (] "]")) () ")"))) (; ";")) (expression_statement "puVar14 = (undefined4 *)0x0;" (assignment_expression "puVar14 = (undefined4 *)0x0" (identifier "puVar14") (= "=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (goto_statement "goto LAB_000679e8;" (goto "goto") (statement_identifier "LAB_000679e8") (; ";")) (} "}"))) (} "}")))) (expression_statement "puVar1 = PTR_safefree_000b01b0;" (assignment_expression "puVar1 = PTR_safefree_000b01b0" (identifier "puVar1") (= "=") (identifier "PTR_safefree_000b01b0")) (; ";")) (expression_statement "uVar4 = *(undefined4 *)(iVar6 + 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar6 + 8)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined4 *)(iVar6 + 8)" (* "*") (cast_expression "(undefined4 *)(iVar6 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 8)" (( "(") (binary_expression "iVar6 + 8" (identifier "iVar6") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "puVar3[2] = *(undefined4 *)(iVar6 + 4);" (assignment_expression "puVar3[2] = *(undefined4 *)(iVar6 + 4)" (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]")) (= "=") (pointer_expression "*(undefined4 *)(iVar6 + 4)" (* "*") (cast_expression "(undefined4 *)(iVar6 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "puVar3[3] = uVar4;" (assignment_expression "puVar3[3] = uVar4" (subscript_expression "puVar3[3]" (identifier "puVar3") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar3[4] = 0;" (assignment_expression "puVar3[4] = 0" (subscript_expression "puVar3[4]" (identifier "puVar3") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "(*(code *)puVar1)(iVar6);" (call_expression "(*(code *)puVar1)(iVar6)" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "(iVar6)" (( "(") (identifier "iVar6") () ")"))) (; ";")) (expression_statement "puVar14 = puVar3;" (assignment_expression "puVar14 = puVar3" (identifier "puVar14") (= "=") (identifier "puVar3")) (; ";")) (labeled_statement "LAB_000679e8:\n  if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }" (statement_identifier "LAB_000679e8") (: ":") (if_statement "if (local_3c[8] == *(int *)puVar15) {\n    return puVar14;\n  }" (if "if") (parenthesized_expression "(local_3c[8] == *(int *)puVar15)" (( "(") (binary_expression "local_3c[8] == *(int *)puVar15" (subscript_expression "local_3c[8]" (identifier "local_3c") ([ "[") (number_literal "8") (] "]")) (== "==") (pointer_expression "*(int *)puVar15" (* "*") (cast_expression "(int *)puVar15" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar15")))) () ")")) (compound_statement "{\n    return puVar14;\n  }" ({ "{") (return_statement "return puVar14;" (return "return") (identifier "puVar14") (; ";")) (} "}")))) (expression_statement "uVar7 = local_3c[8];" (assignment_expression "uVar7 = local_3c[8]" (identifier "uVar7") (= "=") (subscript_expression "local_3c[8]" (identifier "local_3c") ([ "[") (number_literal "8") (] "]"))) (; ";")) (expression_statement "puVar15 = PTR___stack_chk_fail_000b0c70;" (assignment_expression "puVar15 = PTR___stack_chk_fail_000b0c70" (identifier "puVar15") (= "=") (identifier "PTR___stack_chk_fail_000b0c70")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_000b0c70)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b0c70)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b0c70)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000b0c70" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000b0c70" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000b0c70"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));" (assignment_expression "iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" (identifier "iVar6") (= "=") (call_expression "bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" (identifier "bignum_bitcount") (argument_list "(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10))" (( "(") (pointer_expression "*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10)" (* "*") (cast_expression "(undefined4 *)(*(int *)(uVar7 + 4) + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(uVar7 + 4) + 0x10)" (( "(") (binary_expression "*(int *)(uVar7 + 4) + 0x10" (pointer_expression "*(int *)(uVar7 + 4)" (* "*") (cast_expression "(int *)(uVar7 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar7 + 4)" (( "(") (binary_expression "uVar7 + 4" (identifier "uVar7") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "iVar13 = iVar6 + 7;" (assignment_expression "iVar13 = iVar6 + 7" (identifier "iVar13") (= "=") (binary_expression "iVar6 + 7" (identifier "iVar6") (+ "+") (number_literal "7"))) (; ";")) (if_statement "if (iVar13 < 0) {\n    iVar13 = iVar6 + 0xe;\n  }" (if "if") (parenthesized_expression "(iVar13 < 0)" (( "(") (binary_expression "iVar13 < 0" (identifier "iVar13") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    iVar13 = iVar6 + 0xe;\n  }" ({ "{") (expression_statement "iVar13 = iVar6 + 0xe;" (assignment_expression "iVar13 = iVar6 + 0xe" (identifier "iVar13") (= "=") (binary_expression "iVar6 + 0xe" (identifier "iVar6") (+ "+") (number_literal "0xe"))) (; ";")) (} "}"))) (expression_statement "iVar13 = iVar13 >> 3;" (assignment_expression "iVar13 = iVar13 >> 3" (identifier "iVar13") (= "=") (binary_expression "iVar13 >> 3" (identifier "iVar13") (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "iVar12 = iVar13;" (assignment_expression "iVar12 = iVar13" (identifier "iVar12") (= "=") (identifier "iVar13")) (; ";")) (if_statement "if (**(int **)(uVar7 + 4) == 0) {\n    iVar12 = iVar13 * 2 + 1;\n  }" (if "if") (parenthesized_expression "(**(int **)(uVar7 + 4) == 0)" (( "(") (binary_expression "**(int **)(uVar7 + 4) == 0" (pointer_expression "**(int **)(uVar7 + 4)" (* "*") (pointer_expression "*(int **)(uVar7 + 4)" (* "*") (cast_expression "(int **)(uVar7 + 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(uVar7 + 4)" (( "(") (binary_expression "uVar7 + 4" (identifier "uVar7") (+ "+") (number_literal "4")) () ")"))))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar12 = iVar13 * 2 + 1;\n  }" ({ "{") (expression_statement "iVar12 = iVar13 * 2 + 1;" (assignment_expression "iVar12 = iVar13 * 2 + 1" (identifier "iVar12") (= "=") (binary_expression "iVar13 * 2 + 1" (binary_expression "iVar13 * 2" (identifier "iVar13") (* "*") (number_literal "2")) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "pcVar16 = *(code **)(puVar15 + 0x48720);" (assignment_expression "pcVar16 = *(code **)(puVar15 + 0x48720)" (identifier "pcVar16") (= "=") (pointer_expression "*(code **)(puVar15 + 0x48720)" (* "*") (cast_expression "(code **)(puVar15 + 0x48720)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x48720)" (( "(") (binary_expression "puVar15 + 0x48720" (identifier "puVar15") (+ "+") (number_literal "0x48720")) () ")"))))) (; ";")) (expression_statement "*piVar9 = iVar12;" (assignment_expression "*piVar9 = iVar12" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (= "=") (identifier "iVar12")) (; ";")) (expression_statement "puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);" (assignment_expression "puVar3 = (undefined4 *)(*pcVar16)(iVar12,1)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)(*pcVar16)(iVar12,1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*pcVar16)(iVar12,1)" (parenthesized_expression "(*pcVar16)" (( "(") (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) () ")")) (argument_list "(iVar12,1)" (( "(") (identifier "iVar12") (, ",") (number_literal "1") () ")"))))) (; ";")) (if_statement "if (**(int **)(uVar7 + 4) == 0) {\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }\n  else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" (if "if") (parenthesized_expression "(**(int **)(uVar7 + 4) == 0)" (( "(") (binary_expression "**(int **)(uVar7 + 4) == 0" (pointer_expression "**(int **)(uVar7 + 4)" (* "*") (pointer_expression "*(int **)(uVar7 + 4)" (* "*") (cast_expression "(int **)(uVar7 + 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(uVar7 + 4)" (( "(") (binary_expression "uVar7 + 4" (identifier "uVar7") (+ "+") (number_literal "4")) () ")"))))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    *(undefined1 *)puVar3 = 4;\n    iVar6 = iVar13 + -1;\n    puVar8 = (undefined1 *)((int)puVar3 + 1);\n    if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }\n  }" ({ "{") (expression_statement "*(undefined1 *)puVar3 = 4;" (assignment_expression "*(undefined1 *)puVar3 = 4" (pointer_expression "*(undefined1 *)puVar3" (* "*") (cast_expression "(undefined1 *)puVar3" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar3"))) (= "=") (number_literal "4")) (; ";")) (expression_statement "iVar6 = iVar13 + -1;" (assignment_expression "iVar6 = iVar13 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar13 + -1" (identifier "iVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + 1);" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + 1)" (identifier "puVar8") (= "=") (cast_expression "(undefined1 *)((int)puVar3 + 1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar3 + 1)" (( "(") (binary_expression "(int)puVar3 + 1" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if (iVar13 != 0) {\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }" (if "if") (parenthesized_expression "(iVar13 != 0)" (( "(") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);\n      iVar6 = iVar13 + -1;\n      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;\n      do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);\n      return puVar3;\n    }" ({ "{") (do_statement "do {\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      } while (iVar12 != -1);" (do "do") (compound_statement "{\n        iVar12 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar12;\n        puVar8 = puVar8 + 1;\n      }" ({ "{") (expression_statement "iVar12 = iVar6 + -1;" (assignment_expression "iVar12 = iVar6 + -1" (identifier "iVar12") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6)" (identifier "uVar5") (= "=") (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6)" (identifier "bignum_byte") (argument_list "(*(undefined4 *)(uVar7 + 8),iVar6)" (( "(") (pointer_expression "*(undefined4 *)(uVar7 + 8)" (* "*") (cast_expression "(undefined4 *)(uVar7 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar7 + 8)" (( "(") (binary_expression "uVar7 + 8" (identifier "uVar7") (+ "+") (number_literal "8")) () ")")))) (, ",") (identifier "iVar6") () ")")))) (; ";")) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "iVar6 = iVar12;" (assignment_expression "iVar6 = iVar12" (identifier "iVar6") (= "=") (identifier "iVar12")) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar12 != -1)" (( "(") (binary_expression "iVar12 != -1" (identifier "iVar12") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (expression_statement "iVar6 = iVar13 + -1;" (assignment_expression "iVar6 = iVar13 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar13 + -1" (identifier "iVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13" (identifier "puVar8") (= "=") (binary_expression "(undefined1 *)((int)puVar3 + 1) + iVar13" (cast_expression "(undefined1 *)((int)puVar3 + 1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar3 + 1)" (( "(") (binary_expression "(int)puVar3 + 1" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (number_literal "1")) () ")"))) (+ "+") (identifier "iVar13"))) (; ";")) (do_statement "do {\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      } while (iVar13 != -1);" (do "do") (compound_statement "{\n        iVar13 = iVar6 + -1;\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);\n        *puVar8 = uVar5;\n        iVar6 = iVar13;\n        puVar8 = puVar8 + 1;\n      }" ({ "{") (expression_statement "iVar13 = iVar6 + -1;" (assignment_expression "iVar13 = iVar6 + -1" (identifier "iVar13") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6)" (identifier "uVar5") (= "=") (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6)" (identifier "bignum_byte") (argument_list "(*(undefined4 *)(uVar7 + 0xc),iVar6)" (( "(") (pointer_expression "*(undefined4 *)(uVar7 + 0xc)" (* "*") (cast_expression "(undefined4 *)(uVar7 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar7 + 0xc)" (( "(") (binary_expression "uVar7 + 0xc" (identifier "uVar7") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "iVar6") () ")")))) (; ";")) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "iVar6 = iVar13;" (assignment_expression "iVar6 = iVar13" (identifier "iVar6") (= "=") (identifier "iVar13")) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar13 != -1)" (( "(") (binary_expression "iVar13 != -1" (identifier "iVar13") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (return_statement "return puVar3;" (return "return") (identifier "puVar3") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" (else "else") (compound_statement "{\n    iVar12 = 0;\n    if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }\n  }" ({ "{") (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" (identifier "iVar12") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < iVar6) {\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n      do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);\n    }" ({ "{") (do_statement "do {\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      } while (iVar12 < iVar13);" (do "do") (compound_statement "{\n        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);\n        puVar8 = (undefined1 *)((int)puVar3 + iVar12);\n        iVar12 = iVar12 + 1;\n        *puVar8 = uVar5;\n      }" ({ "{") (expression_statement "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);" (assignment_expression "uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12)" (identifier "uVar5") (= "=") (call_expression "bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12)" (identifier "bignum_byte") (argument_list "(*(undefined4 *)(uVar7 + 8),iVar12)" (( "(") (pointer_expression "*(undefined4 *)(uVar7 + 8)" (* "*") (cast_expression "(undefined4 *)(uVar7 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar7 + 8)" (( "(") (binary_expression "uVar7 + 8" (identifier "uVar7") (+ "+") (number_literal "8")) () ")")))) (, ",") (identifier "iVar12") () ")")))) (; ";")) (expression_statement "puVar8 = (undefined1 *)((int)puVar3 + iVar12);" (assignment_expression "puVar8 = (undefined1 *)((int)puVar3 + iVar12)" (identifier "puVar8") (= "=") (cast_expression "(undefined1 *)((int)puVar3 + iVar12)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar3 + iVar12)" (( "(") (binary_expression "(int)puVar3 + iVar12" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (identifier "iVar12")) () ")")))) (; ";")) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" (identifier "iVar12") (= "=") (binary_expression "iVar12 + 1" (identifier "iVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar8 = uVar5;" (assignment_expression "*puVar8 = uVar5" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar5")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar12 < iVar13)" (( "(") (binary_expression "iVar12 < iVar13" (identifier "iVar12") (< "<") (identifier "iVar13")) () ")")) (; ";")) (} "}"))) (} "}")))) (return_statement "return puVar3;" (return "return") (identifier "puVar3") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) 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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) arguments: (argument_list))))) (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: (identifier)))) arguments: (argument_list (number_literal) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (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: (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: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_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: (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (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: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) 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 (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) 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 (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) 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 (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (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))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (return_statement (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) 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: (pointer_expression argument: (identifier)) right: (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: (identifier))) arguments: (argument_list (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (return_statement (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))) (return_statement (identifier)))))

undefined4 * MASKED(int param_1)

{
  undefined *puVar1;
  int *piVar2;
  undefined4 *puVar3;
  undefined1 uVar5;
  undefined4 uVar4;
  int iVar6;
  uint uVar7;
  undefined1 *puVar8;
  int *piVar9;
  uint *puVar10;
  uint *puVar11;
  int iVar12;
  int iVar13;
  undefined4 *puVar14;
  undefined *puVar15;
  code *pcVar16;
  uint local_3c [9];
  
  puVar15 = PTR___stack_chk_guard_000b0c9c;
  local_3c[8] = *(uint *)PTR___stack_chk_guard_000b0c9c;
  piVar2 = (int *)(*(code *)**(undefined4 **)(param_1 + 0x10))();
  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(1,0x1c);
  iVar6 = *piVar2;
  *puVar3 = 0;
  puVar3[1] = piVar2;
  if (iVar6 == 1) {
    local_3c[0] = 0;
    local_3c[1] = 0;
    local_3c[2] = 0;
    local_3c[3] = 0;
    local_3c[4] = 0;
    local_3c[5] = 0;
    local_3c[6] = 0;
    local_3c[7] = 0;
    puVar10 = local_3c;
    do {
      puVar11 = (uint *)((int)puVar10 + 1);
      uVar5 = random_byte();
      *(undefined1 *)puVar10 = uVar5;
      puVar10 = puVar11;
    } while (local_3c + 8 != puVar11);
    local_3c[0] = local_3c[0] & 0xf8ffffff;
    local_3c[7] = local_3c[7] & 0xffffff7f | 0x40;
    uVar4 = bignum_from_bytes_le(local_3c,0x20);
    puVar1 = PTR_smemclr_000b0240;
    puVar3[6] = uVar4;
    (*(code *)puVar1)(local_3c,0x20);
    piVar9 = (int *)puVar3[6];
    piVar2 = piVar9;
    if (piVar9 == (int *)0x0) {
LAB_00067a7c:
      piVar9 = piVar2;
      puVar14 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar3);
      goto LAB_000679e8;
    }
    iVar6 = ecp_mul(puVar3[1] + 0x1c);
    if (iVar6 == 0) {
      freebn(puVar3[6]);
      puVar14 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar3);
      goto LAB_000679e8;
    }
  }
  else {
    piVar2 = (int *)piVar2[7];
    piVar9 = (int *)bignum_random_in_range(*(undefined4 *)PTR_One_000b0850);
    puVar3[6] = piVar9;
    if (piVar9 == (int *)0x0) goto LAB_00067a7c;
    iVar6 = ecp_mul(puVar3[1] + 0x20);
    if (iVar6 == 0) {
      freebn(puVar3[6]);
      puVar14 = (undefined4 *)0x0;
      (*(code *)PTR_safefree_000b01b0)(puVar3);
      goto LAB_000679e8;
    }
  }
  puVar1 = PTR_safefree_000b01b0;
  uVar4 = *(undefined4 *)(iVar6 + 8);
  puVar3[2] = *(undefined4 *)(iVar6 + 4);
  puVar3[3] = uVar4;
  puVar3[4] = 0;
  (*(code *)puVar1)(iVar6);
  puVar14 = puVar3;
LAB_000679e8:
  if (local_3c[8] == *(int *)puVar15) {
    return puVar14;
  }
  uVar7 = local_3c[8];
  puVar15 = PTR___stack_chk_fail_000b0c70;
  (*(code *)PTR___stack_chk_fail_000b0c70)();
  iVar6 = bignum_bitcount(*(undefined4 *)(*(int *)(uVar7 + 4) + 0x10));
  iVar13 = iVar6 + 7;
  if (iVar13 < 0) {
    iVar13 = iVar6 + 0xe;
  }
  iVar13 = iVar13 >> 3;
  iVar12 = iVar13;
  if (**(int **)(uVar7 + 4) == 0) {
    iVar12 = iVar13 * 2 + 1;
  }
  pcVar16 = *(code **)(puVar15 + 0x48720);
  *piVar9 = iVar12;
  puVar3 = (undefined4 *)(*pcVar16)(iVar12,1);
  if (**(int **)(uVar7 + 4) == 0) {
    *(undefined1 *)puVar3 = 4;
    iVar6 = iVar13 + -1;
    puVar8 = (undefined1 *)((int)puVar3 + 1);
    if (iVar13 != 0) {
      do {
        iVar12 = iVar6 + -1;
        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar6);
        *puVar8 = uVar5;
        iVar6 = iVar12;
        puVar8 = puVar8 + 1;
      } while (iVar12 != -1);
      iVar6 = iVar13 + -1;
      puVar8 = (undefined1 *)((int)puVar3 + 1) + iVar13;
      do {
        iVar13 = iVar6 + -1;
        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 0xc),iVar6);
        *puVar8 = uVar5;
        iVar6 = iVar13;
        puVar8 = puVar8 + 1;
      } while (iVar13 != -1);
      return puVar3;
    }
  }
  else {
    iVar12 = 0;
    if (0 < iVar6) {
      do {
        uVar5 = bignum_byte(*(undefined4 *)(uVar7 + 8),iVar12);
        puVar8 = (undefined1 *)((int)puVar3 + iVar12);
        iVar12 = iVar12 + 1;
        *puVar8 = uVar5;
      } while (iVar12 < iVar13);
    }
  }
  return puVar3;
}

