
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

uchar * dss_sign(void *key,char *data,int datalen,int *siglen)

{
  int iVar1;
  Bignum *number;
  Bignum_conflict p;
  Bignum_conflict pBVar2;
  Bignum_conflict b;
  Bignum_conflict q;
  Bignum_conflict bn;
  uchar *puVar3;
  int iVar4;
  int iVar5;
  int in_GS_OFFSET;
  uchar digest [20];
  
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  SHA_Simple(data,datalen,digest);
  number = dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),
                     *(Bignum *)((int)key + 0x10),digest,0x14);
  p = modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4));
  if (p == (Bignum_conflict)0x0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");
  }
                    /* WARNING: Load size is inaccurate */
  pBVar2 = modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key);
  b = bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4));
  freebn(pBVar2);
  pBVar2 = bignum_from_bytes(digest,0x14);
  q = bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2);
  bn = modmul(p,q,*(Bignum_conflict *)((int)key + 4));
  freebn(q);
  freebn(p);
  freebn((Bignum_conflict)number);
  freebn(pBVar2);
  iVar5 = 0;
  puVar3 = (uchar *)safemalloc(0x37,1);
  puVar3[0] = '\0';
  puVar3[1] = '\0';
  puVar3[2] = '\0';
  puVar3[3] = '\a';
  puVar3[4] = 's';
  puVar3[5] = 's';
  puVar3[6] = 'h';
  puVar3[7] = '-';
  puVar3[8] = 'd';
  puVar3[9] = 's';
  puVar3[10] = 's';
  puVar3[0xb] = '\0';
  puVar3[0xc] = '\0';
  puVar3[0xd] = '\0';
  puVar3[0xe] = '(';
  do {
    iVar4 = bignum_byte(b,0x13 - iVar5);
    puVar3[iVar5 + 0xf] = (uchar)iVar4;
    iVar4 = bignum_byte(bn,0x13 - iVar5);
    puVar3[iVar5 + 0x23] = (uchar)iVar4;
    iVar5 = iVar5 + 1;
  } while (iVar5 != 0x14);
  freebn(b);
  freebn(bn);
  *siglen = 0x37;
  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {
    return puVar3;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail_local();
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 *
FUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)

{
  undefined1 uVar1;
  undefined4 uVar2;
  int iVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  int in_GS_OFFSET;
  undefined1 local_34 [20];
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x35ff9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  FUN_00049e40(param_2,param_3,local_34);
  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);
  iVar3 = FUN_00030d50(uVar2,param_1[1]);
  if (iVar3 == 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");
  }
  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);
  uVar5 = FUN_00030b20(uVar4,param_1[1]);
  FUN_0002e1b0(uVar4);
  uVar4 = FUN_0002f190(local_34,0x14);
  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);
  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);
  FUN_0002e1b0(uVar6);
  FUN_0002e1b0(iVar3);
  FUN_0002e1b0(uVar2);
  FUN_0002e1b0(uVar4);
  iVar3 = 0;
  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);
  *puVar8 = 0x7000000;
  puVar8[1] = 0x2d687373;
  *(undefined2 *)(puVar8 + 2) = 0x7364;
  *(undefined1 *)((int)puVar8 + 10) = 0x73;
  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;
  do {
    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);
    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;
    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);
    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;
    iVar3 = iVar3 + 1;
  } while (iVar3 != 0x14);
  FUN_0002e1b0(uVar5);
  FUN_0002e1b0(uVar7);
  *param_4 = 0x37;
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return puVar8;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0005c110();
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00015340
ADD EBX,0x4ecef
SUB ESP,0x50
MOV EAX,dword ptr [ESP + 0x70]
LEA EDI,[ESP + 0x2c]
MOV ESI,dword ptr [ESP + 0x64]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,GS:[0x14]
MOV dword ptr [ESP + 0x40],EAX
XOR EAX,EAX
PUSH EDI
PUSH dword ptr [ESP + 0x70]
PUSH dword ptr [ESP + 0x70]
CALL 0x00049e40
LEA EAX,[EBX + 0xfffde1bd]
MOV dword ptr [ESP],0x14
PUSH EDI
PUSH dword ptr [ESI + 0x10]
PUSH dword ptr [ESI + 0x4]
PUSH EAX
CALL 0x00035d90
MOV dword ptr [ESP + 0x30],EAX
ADD ESP,0x18
PUSH dword ptr [ESI + 0x4]
PUSH EAX
CALL 0x00030d50
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0003619d
MOV dword ptr [ESP + 0xc],EAX
SUB ESP,0x4
PUSH dword ptr [ESI]
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESI + 0x8]
CALL 0x00031270
MOV EBP,EAX
POP EAX
POP EDX
PUSH dword ptr [ESI + 0x4]
PUSH EBP
CALL 0x00030b20
MOV dword ptr [ESP],EBP
MOV dword ptr [ESP + 0x18],EAX
CALL 0x0002e1b0
POP ECX
POP EBP
PUSH 0x14
PUSH EDI
CALL 0x0002f190
ADD ESP,0xc
PUSH EAX
MOV EBP,EAX
PUSH dword ptr [ESP + 0x10]
PUSH dword ptr [ESI + 0x10]
CALL 0x0002ffc0
ADD ESP,0xc
PUSH dword ptr [ESI + 0x4]
PUSH EAX
MOV ECX,dword ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x28],EAX
PUSH ECX
MOV dword ptr [ESP + 0x28],ECX
CALL 0x0002ed00
MOV EDX,dword ptr [ESP + 0x2c]
MOV dword ptr [ESP + 0x1c],EAX
MOV dword ptr [ESP],EDX
CALL 0x0002e1b0
MOV ECX,dword ptr [ESP + 0x28]
MOV dword ptr [ESP],ECX
CALL 0x0002e1b0
POP EAX
PUSH dword ptr [ESP + 0x1c]
CALL 0x0002e1b0
MOV dword ptr [ESP],EBP
XOR EBP,EBP
CALL 0x0002e1b0
POP EAX
POP EDX
PUSH 0x1
PUSH 0x37
MOV EDI,EBP
CALL 0x0001c680
MOV ECX,0x7364
ADD ESP,0x10
MOV dword ptr [EAX],0x7000000
MOV ESI,EAX
MOV dword ptr [EAX + 0x4],0x2d687373
MOV word ptr [EAX + 0x8],CX
MOV byte ptr [EAX + 0xa],0x73
MOV dword ptr [EAX + 0xb],0x28000000
LEA ESI,[ESI]
NOP
MOV EBP,0x13
SUB ESP,0x8
SUB EBP,EDI
PUSH EBP
PUSH dword ptr [ESP + 0x14]
CALL 0x0002f840
MOV byte ptr [ESI + EDI*0x1 + 0xf],AL
POP EDX
POP ECX
PUSH EBP
PUSH dword ptr [ESP + 0x18]
CALL 0x0002f840
ADD ESP,0x10
MOV byte ptr [ESI + EDI*0x1 + 0x23],AL
ADD EDI,0x1
CMP EDI,0x14
JNZ 0x00036130
SUB ESP,0xc
PUSH dword ptr [ESP + 0x14]
CALL 0x0002e1b0
POP EAX
PUSH dword ptr [ESP + 0x18]
CALL 0x0002e1b0
MOV EAX,dword ptr [ESP + 0x24]
ADD ESP,0x10
MOV dword ptr [EAX],0x37
MOV EAX,ESI
MOV EDX,dword ptr [ESP + 0x3c]
XOR EDX,dword ptr GS:[0x14]
JNZ 0x000361bc
ADD ESP,0x4c
POP EBX
POP ESI
POP EDI
POP EBP
RET
LEA EAX,[EBX + 0xfffde218]
PUSH EAX
LEA EAX,[EBX + 0xfffde198]
PUSH 0x26f
PUSH EAX
LEA EAX,[EBX + 0xfffde1db]
PUSH EAX
CALL 0x00014ad0
CALL 0x0005c110
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 *\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0005c110();\n}\n\n" comment (function_definition "undefined4 *\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0005c110();\n}" type_identifier (pointer_declarator "*\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" * (function_declarator "FUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) )))) (compound_statement "{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0005c110();\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined1 local_34 [20];" type_identifier (array_declarator "local_34 [20]" identifier [ number_literal ]) ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x35ff9;" (assignment_expression "uStack_14 = 0x35ff9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "FUN_00049e40(param_2,param_3,local_34);" (call_expression "FUN_00049e40(param_2,param_3,local_34)" identifier (argument_list "(param_2,param_3,local_34)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);" (assignment_expression "uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" identifier = (call_expression "FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" identifier (argument_list "("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" ( (string_literal ""DSA deterministic k generator"" " string_content ") , (subscript_expression "param_1[1]" identifier [ number_literal ]) , (subscript_expression "param_1[4]" identifier [ number_literal ]) , identifier , number_literal )))) ;) (expression_statement "iVar3 = FUN_00030d50(uVar2,param_1[1]);" (assignment_expression "iVar3 = FUN_00030d50(uVar2,param_1[1])" identifier = (call_expression "FUN_00030d50(uVar2,param_1[1])" identifier (argument_list "(uVar2,param_1[1])" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" { comment (expression_statement "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign");" (call_expression "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign")" identifier (argument_list "("kinv","sshdss.c",0x26f,"dss_sign")" ( (string_literal ""kinv"" " string_content ") , (string_literal ""sshdss.c"" " string_content ") , number_literal , (string_literal ""dss_sign"" " string_content ") ))) ;) })) (expression_statement "uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);" (assignment_expression "uVar4 = FUN_00031270(param_1[2],uVar2,*param_1)" identifier = (call_expression "FUN_00031270(param_1[2],uVar2,*param_1)" identifier (argument_list "(param_1[2],uVar2,*param_1)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , identifier , (pointer_expression "*param_1" * identifier) )))) ;) (expression_statement "uVar5 = FUN_00030b20(uVar4,param_1[1]);" (assignment_expression "uVar5 = FUN_00030b20(uVar4,param_1[1])" identifier = (call_expression "FUN_00030b20(uVar4,param_1[1])" identifier (argument_list "(uVar4,param_1[1])" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) )))) ;) (expression_statement "FUN_0002e1b0(uVar4);" (call_expression "FUN_0002e1b0(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "uVar4 = FUN_0002f190(local_34,0x14);" (assignment_expression "uVar4 = FUN_0002f190(local_34,0x14)" identifier = (call_expression "FUN_0002f190(local_34,0x14)" identifier (argument_list "(local_34,0x14)" ( identifier , number_literal )))) ;) (expression_statement "uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);" (assignment_expression "uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4)" identifier = (call_expression "FUN_0002ffc0(param_1[4],uVar5,uVar4)" identifier (argument_list "(param_1[4],uVar5,uVar4)" ( (subscript_expression "param_1[4]" identifier [ number_literal ]) , identifier , identifier )))) ;) (expression_statement "uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);" (assignment_expression "uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1])" identifier = (call_expression "FUN_0002ed00(iVar3,uVar6,param_1[1])" identifier (argument_list "(iVar3,uVar6,param_1[1])" ( identifier , identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) )))) ;) (expression_statement "FUN_0002e1b0(uVar6);" (call_expression "FUN_0002e1b0(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(iVar3);" (call_expression "FUN_0002e1b0(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(uVar2);" (call_expression "FUN_0002e1b0(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(uVar4);" (call_expression "FUN_0002e1b0(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "puVar8 = (undefined4 *)FUN_0001c680(0x37,1);" (assignment_expression "puVar8 = (undefined4 *)FUN_0001c680(0x37,1)" identifier = (cast_expression "(undefined4 *)FUN_0001c680(0x37,1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001c680(0x37,1)" identifier (argument_list "(0x37,1)" ( number_literal , number_literal ))))) ;) (expression_statement "*puVar8 = 0x7000000;" (assignment_expression "*puVar8 = 0x7000000" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8[1] = 0x2d687373;" (assignment_expression "puVar8[1] = 0x2d687373" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined2 *)(puVar8 + 2) = 0x7364;" (assignment_expression "*(undefined2 *)(puVar8 + 2) = 0x7364" (pointer_expression "*(undefined2 *)(puVar8 + 2)" * (cast_expression "(undefined2 *)(puVar8 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + 2)" ( (binary_expression "puVar8 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((int)puVar8 + 10) = 0x73;" (assignment_expression "*(undefined1 *)((int)puVar8 + 10) = 0x73" (pointer_expression "*(undefined1 *)((int)puVar8 + 10)" * (cast_expression "(undefined1 *)((int)puVar8 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + 10)" ( (binary_expression "(int)puVar8 + 10" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;" (assignment_expression "*(undefined4 *)((int)puVar8 + 0xb) = 0x28000000" (pointer_expression "*(undefined4 *)((int)puVar8 + 0xb)" * (cast_expression "(undefined4 *)((int)puVar8 + 0xb)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + 0xb)" ( (binary_expression "(int)puVar8 + 0xb" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (do_statement "do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);" do (compound_statement "{\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  }" { (expression_statement "uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);" (assignment_expression "uVar1 = FUN_0002f840(uVar5,0x13 - iVar3)" identifier = (call_expression "FUN_0002f840(uVar5,0x13 - iVar3)" identifier (argument_list "(uVar5,0x13 - iVar3)" ( identifier , (binary_expression "0x13 - iVar3" number_literal - identifier) )))) ;) (expression_statement "*(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;" (assignment_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1" (pointer_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0xf)" * (cast_expression "(undefined1 *)((int)puVar8 + iVar3 + 0xf)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + iVar3 + 0xf)" ( (binary_expression "(int)puVar8 + iVar3 + 0xf" (binary_expression "(int)puVar8 + iVar3" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);" (assignment_expression "uVar1 = FUN_0002f840(uVar7,0x13 - iVar3)" identifier = (call_expression "FUN_0002f840(uVar7,0x13 - iVar3)" identifier (argument_list "(uVar7,0x13 - iVar3)" ( identifier , (binary_expression "0x13 - iVar3" number_literal - identifier) )))) ;) (expression_statement "*(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;" (assignment_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1" (pointer_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0x23)" * (cast_expression "(undefined1 *)((int)puVar8 + iVar3 + 0x23)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + iVar3 + 0x23)" ( (binary_expression "(int)puVar8 + iVar3 + 0x23" (binary_expression "(int)puVar8 + iVar3" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 != 0x14)" ( (binary_expression "iVar3 != 0x14" identifier != number_literal) )) ;) (expression_statement "FUN_0002e1b0(uVar5);" (call_expression "FUN_0002e1b0(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(uVar7);" (call_expression "FUN_0002e1b0(uVar7)" identifier (argument_list "(uVar7)" ( identifier ))) ;) (expression_statement "*param_4 = 0x37;" (assignment_expression "*param_4 = 0x37" (pointer_expression "*param_4" * identifier) = number_literal) ;) (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }" if (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return puVar8;\n  }" { (return_statement "return puVar8;" return identifier ;) })) comment (expression_statement "FUN_0005c110();" (call_expression "FUN_0005c110()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nuchar * dss_sign(void *key,char *data,int datalen,int *siglen)\n\n{\n  int iVar1;\n  Bignum *number;\n  Bignum_conflict p;\n  Bignum_conflict pBVar2;\n  Bignum_conflict b;\n  Bignum_conflict q;\n  Bignum_conflict bn;\n  uchar *puVar3;\n  int iVar4;\n  int iVar5;\n  int in_GS_OFFSET;\n  uchar digest [20];\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  SHA_Simple(data,datalen,digest);\n  number = dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14);\n  p = modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4));\n  if (p == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n                    /* WARNING: Load size is inaccurate */\n  pBVar2 = modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key);\n  b = bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4));\n  freebn(pBVar2);\n  pBVar2 = bignum_from_bytes(digest,0x14);\n  q = bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2);\n  bn = modmul(p,q,*(Bignum_conflict *)((int)key + 4));\n  freebn(q);\n  freebn(p);\n  freebn((Bignum_conflict)number);\n  freebn(pBVar2);\n  iVar5 = 0;\n  puVar3 = (uchar *)safemalloc(0x37,1);\n  puVar3[0] = '\0';\n  puVar3[1] = '\0';\n  puVar3[2] = '\0';\n  puVar3[3] = '\a';\n  puVar3[4] = 's';\n  puVar3[5] = 's';\n  puVar3[6] = 'h';\n  puVar3[7] = '-';\n  puVar3[8] = 'd';\n  puVar3[9] = 's';\n  puVar3[10] = 's';\n  puVar3[0xb] = '\0';\n  puVar3[0xc] = '\0';\n  puVar3[0xd] = '\0';\n  puVar3[0xe] = '(';\n  do {\n    iVar4 = bignum_byte(b,0x13 - iVar5);\n    puVar3[iVar5 + 0xf] = (uchar)iVar4;\n    iVar4 = bignum_byte(bn,0x13 - iVar5);\n    puVar3[iVar5 + 0x23] = (uchar)iVar4;\n    iVar5 = iVar5 + 1;\n  } while (iVar5 != 0x14);\n  freebn(b);\n  freebn(bn);\n  *siglen = 0x37;\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\n}\n\n" comment comment (function_definition "uchar * dss_sign(void *key,char *data,int datalen,int *siglen)\n\n{\n  int iVar1;\n  Bignum *number;\n  Bignum_conflict p;\n  Bignum_conflict pBVar2;\n  Bignum_conflict b;\n  Bignum_conflict q;\n  Bignum_conflict bn;\n  uchar *puVar3;\n  int iVar4;\n  int iVar5;\n  int in_GS_OFFSET;\n  uchar digest [20];\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  SHA_Simple(data,datalen,digest);\n  number = dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14);\n  p = modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4));\n  if (p == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n                    /* WARNING: Load size is inaccurate */\n  pBVar2 = modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key);\n  b = bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4));\n  freebn(pBVar2);\n  pBVar2 = bignum_from_bytes(digest,0x14);\n  q = bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2);\n  bn = modmul(p,q,*(Bignum_conflict *)((int)key + 4));\n  freebn(q);\n  freebn(p);\n  freebn((Bignum_conflict)number);\n  freebn(pBVar2);\n  iVar5 = 0;\n  puVar3 = (uchar *)safemalloc(0x37,1);\n  puVar3[0] = '\0';\n  puVar3[1] = '\0';\n  puVar3[2] = '\0';\n  puVar3[3] = '\a';\n  puVar3[4] = 's';\n  puVar3[5] = 's';\n  puVar3[6] = 'h';\n  puVar3[7] = '-';\n  puVar3[8] = 'd';\n  puVar3[9] = 's';\n  puVar3[10] = 's';\n  puVar3[0xb] = '\0';\n  puVar3[0xc] = '\0';\n  puVar3[0xd] = '\0';\n  puVar3[0xe] = '(';\n  do {\n    iVar4 = bignum_byte(b,0x13 - iVar5);\n    puVar3[iVar5 + 0xf] = (uchar)iVar4;\n    iVar4 = bignum_byte(bn,0x13 - iVar5);\n    puVar3[iVar5 + 0x23] = (uchar)iVar4;\n    iVar5 = iVar5 + 1;\n  } while (iVar5 != 0x14);\n  freebn(b);\n  freebn(bn);\n  *siglen = 0x37;\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\n}" type_identifier (pointer_declarator "* dss_sign(void *key,char *data,int datalen,int *siglen)" * (function_declarator "dss_sign(void *key,char *data,int datalen,int *siglen)" identifier (parameter_list "(void *key,char *data,int datalen,int *siglen)" ( (parameter_declaration "void *key" primitive_type (pointer_declarator "*key" * identifier)) , (parameter_declaration "char *data" primitive_type (pointer_declarator "*data" * identifier)) , (parameter_declaration "int datalen" primitive_type identifier) , (parameter_declaration "int *siglen" primitive_type (pointer_declarator "*siglen" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  Bignum *number;\n  Bignum_conflict p;\n  Bignum_conflict pBVar2;\n  Bignum_conflict b;\n  Bignum_conflict q;\n  Bignum_conflict bn;\n  uchar *puVar3;\n  int iVar4;\n  int iVar5;\n  int in_GS_OFFSET;\n  uchar digest [20];\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  SHA_Simple(data,datalen,digest);\n  number = dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14);\n  p = modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4));\n  if (p == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n                    /* WARNING: Load size is inaccurate */\n  pBVar2 = modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key);\n  b = bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4));\n  freebn(pBVar2);\n  pBVar2 = bignum_from_bytes(digest,0x14);\n  q = bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2);\n  bn = modmul(p,q,*(Bignum_conflict *)((int)key + 4));\n  freebn(q);\n  freebn(p);\n  freebn((Bignum_conflict)number);\n  freebn(pBVar2);\n  iVar5 = 0;\n  puVar3 = (uchar *)safemalloc(0x37,1);\n  puVar3[0] = '\0';\n  puVar3[1] = '\0';\n  puVar3[2] = '\0';\n  puVar3[3] = '\a';\n  puVar3[4] = 's';\n  puVar3[5] = 's';\n  puVar3[6] = 'h';\n  puVar3[7] = '-';\n  puVar3[8] = 'd';\n  puVar3[9] = 's';\n  puVar3[10] = 's';\n  puVar3[0xb] = '\0';\n  puVar3[0xc] = '\0';\n  puVar3[0xd] = '\0';\n  puVar3[0xe] = '(';\n  do {\n    iVar4 = bignum_byte(b,0x13 - iVar5);\n    puVar3[iVar5 + 0xf] = (uchar)iVar4;\n    iVar4 = bignum_byte(bn,0x13 - iVar5);\n    puVar3[iVar5 + 0x23] = (uchar)iVar4;\n    iVar5 = iVar5 + 1;\n  } while (iVar5 != 0x14);\n  freebn(b);\n  freebn(bn);\n  *siglen = 0x37;\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "Bignum *number;" type_identifier (pointer_declarator "*number" * identifier) ;) (declaration "Bignum_conflict p;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar2;" type_identifier identifier ;) (declaration "Bignum_conflict b;" type_identifier identifier ;) (declaration "Bignum_conflict q;" type_identifier identifier ;) (declaration "Bignum_conflict bn;" type_identifier identifier ;) (declaration "uchar *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "uchar digest [20];" type_identifier (array_declarator "digest [20]" identifier [ number_literal ]) ;) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "SHA_Simple(data,datalen,digest);" (call_expression "SHA_Simple(data,datalen,digest)" identifier (argument_list "(data,datalen,digest)" ( identifier , identifier , identifier ))) ;) (expression_statement "number = dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14);" (assignment_expression "number = dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14)" identifier = (call_expression "dss_gen_k("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14)" identifier (argument_list "("DSA deterministic k generator",*(Bignum *)((int)key + 4),\n                     *(Bignum *)((int)key + 0x10),digest,0x14)" ( (string_literal ""DSA deterministic k generator"" " string_content ") , (pointer_expression "*(Bignum *)((int)key + 4)" * (cast_expression "(Bignum *)((int)key + 4)" ( (type_descriptor "Bignum *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 4)" ( (binary_expression "(int)key + 4" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(Bignum *)((int)key + 0x10)" * (cast_expression "(Bignum *)((int)key + 0x10)" ( (type_descriptor "Bignum *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 0x10)" ( (binary_expression "(int)key + 0x10" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , identifier , number_literal )))) ;) (expression_statement "p = modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4));" (assignment_expression "p = modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4))" identifier = (call_expression "modinv((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4))" identifier (argument_list "((Bignum_conflict)number,*(Bignum_conflict *)((int)key + 4))" ( (cast_expression "(Bignum_conflict)number" ( (type_descriptor "Bignum_conflict" type_identifier) ) identifier) , (pointer_expression "*(Bignum_conflict *)((int)key + 4)" * (cast_expression "(Bignum_conflict *)((int)key + 4)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 4)" ( (binary_expression "(int)key + 4" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) )))) ;) (if_statement "if (p == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" if (parenthesized_expression "(p == (Bignum_conflict)0x0)" ( (binary_expression "p == (Bignum_conflict)0x0" identifier == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" { comment (expression_statement "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign");" (call_expression "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign")" identifier (argument_list "("kinv","sshdss.c",0x26f,"dss_sign")" ( (string_literal ""kinv"" " string_content ") , (string_literal ""sshdss.c"" " string_content ") , number_literal , (string_literal ""dss_sign"" " string_content ") ))) ;) })) comment (expression_statement "pBVar2 = modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key);" (assignment_expression "pBVar2 = modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key)" identifier = (call_expression "modpow(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key)" identifier (argument_list "(*(Bignum_conflict *)((int)key + 8),(Bignum_conflict)number,*key)" ( (pointer_expression "*(Bignum_conflict *)((int)key + 8)" * (cast_expression "(Bignum_conflict *)((int)key + 8)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 8)" ( (binary_expression "(int)key + 8" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (cast_expression "(Bignum_conflict)number" ( (type_descriptor "Bignum_conflict" type_identifier) ) identifier) , (pointer_expression "*key" * identifier) )))) ;) (expression_statement "b = bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4));" (assignment_expression "b = bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4))" identifier = (call_expression "bigmod(pBVar2,*(Bignum_conflict *)((int)key + 4))" identifier (argument_list "(pBVar2,*(Bignum_conflict *)((int)key + 4))" ( identifier , (pointer_expression "*(Bignum_conflict *)((int)key + 4)" * (cast_expression "(Bignum_conflict *)((int)key + 4)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 4)" ( (binary_expression "(int)key + 4" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "pBVar2 = bignum_from_bytes(digest,0x14);" (assignment_expression "pBVar2 = bignum_from_bytes(digest,0x14)" identifier = (call_expression "bignum_from_bytes(digest,0x14)" identifier (argument_list "(digest,0x14)" ( identifier , number_literal )))) ;) (expression_statement "q = bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2);" (assignment_expression "q = bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2)" identifier = (call_expression "bigmuladd(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2)" identifier (argument_list "(*(Bignum_conflict *)((int)key + 0x10),b,pBVar2)" ( (pointer_expression "*(Bignum_conflict *)((int)key + 0x10)" * (cast_expression "(Bignum_conflict *)((int)key + 0x10)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 0x10)" ( (binary_expression "(int)key + 0x10" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , identifier , identifier )))) ;) (expression_statement "bn = modmul(p,q,*(Bignum_conflict *)((int)key + 4));" (assignment_expression "bn = modmul(p,q,*(Bignum_conflict *)((int)key + 4))" identifier = (call_expression "modmul(p,q,*(Bignum_conflict *)((int)key + 4))" identifier (argument_list "(p,q,*(Bignum_conflict *)((int)key + 4))" ( identifier , identifier , (pointer_expression "*(Bignum_conflict *)((int)key + 4)" * (cast_expression "(Bignum_conflict *)((int)key + 4)" ( (type_descriptor "Bignum_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 4)" ( (binary_expression "(int)key + 4" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(q);" (call_expression "freebn(q)" identifier (argument_list "(q)" ( identifier ))) ;) (expression_statement "freebn(p);" (call_expression "freebn(p)" identifier (argument_list "(p)" ( identifier ))) ;) (expression_statement "freebn((Bignum_conflict)number);" (call_expression "freebn((Bignum_conflict)number)" identifier (argument_list "((Bignum_conflict)number)" ( (cast_expression "(Bignum_conflict)number" ( (type_descriptor "Bignum_conflict" type_identifier) ) identifier) ))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "puVar3 = (uchar *)safemalloc(0x37,1);" (assignment_expression "puVar3 = (uchar *)safemalloc(0x37,1)" identifier = (cast_expression "(uchar *)safemalloc(0x37,1)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc(0x37,1)" identifier (argument_list "(0x37,1)" ( number_literal , number_literal ))))) ;) (expression_statement "puVar3[0] = '\0';" (assignment_expression "puVar3[0] = '\0'" (subscript_expression "puVar3[0]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[1] = '\0';" (assignment_expression "puVar3[1] = '\0'" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[2] = '\0';" (assignment_expression "puVar3[2] = '\0'" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[3] = '\a';" (assignment_expression "puVar3[3] = '\a'" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = (char_literal "'\a'" ' escape_sequence ')) ;) (expression_statement "puVar3[4] = 's';" (assignment_expression "puVar3[4] = 's'" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = (char_literal "'s'" ' character ')) ;) (expression_statement "puVar3[5] = 's';" (assignment_expression "puVar3[5] = 's'" (subscript_expression "puVar3[5]" identifier [ number_literal ]) = (char_literal "'s'" ' character ')) ;) (expression_statement "puVar3[6] = 'h';" (assignment_expression "puVar3[6] = 'h'" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = (char_literal "'h'" ' character ')) ;) (expression_statement "puVar3[7] = '-';" (assignment_expression "puVar3[7] = '-'" (subscript_expression "puVar3[7]" identifier [ number_literal ]) = (char_literal "'-'" ' character ')) ;) (expression_statement "puVar3[8] = 'd';" (assignment_expression "puVar3[8] = 'd'" (subscript_expression "puVar3[8]" identifier [ number_literal ]) = (char_literal "'d'" ' character ')) ;) (expression_statement "puVar3[9] = 's';" (assignment_expression "puVar3[9] = 's'" (subscript_expression "puVar3[9]" identifier [ number_literal ]) = (char_literal "'s'" ' character ')) ;) (expression_statement "puVar3[10] = 's';" (assignment_expression "puVar3[10] = 's'" (subscript_expression "puVar3[10]" identifier [ number_literal ]) = (char_literal "'s'" ' character ')) ;) (expression_statement "puVar3[0xb] = '\0';" (assignment_expression "puVar3[0xb] = '\0'" (subscript_expression "puVar3[0xb]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[0xc] = '\0';" (assignment_expression "puVar3[0xc] = '\0'" (subscript_expression "puVar3[0xc]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[0xd] = '\0';" (assignment_expression "puVar3[0xd] = '\0'" (subscript_expression "puVar3[0xd]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar3[0xe] = '(';" (assignment_expression "puVar3[0xe] = '('" (subscript_expression "puVar3[0xe]" identifier [ number_literal ]) = (char_literal "'('" ' character ')) ;) (do_statement "do {\n    iVar4 = bignum_byte(b,0x13 - iVar5);\n    puVar3[iVar5 + 0xf] = (uchar)iVar4;\n    iVar4 = bignum_byte(bn,0x13 - iVar5);\n    puVar3[iVar5 + 0x23] = (uchar)iVar4;\n    iVar5 = iVar5 + 1;\n  } while (iVar5 != 0x14);" do (compound_statement "{\n    iVar4 = bignum_byte(b,0x13 - iVar5);\n    puVar3[iVar5 + 0xf] = (uchar)iVar4;\n    iVar4 = bignum_byte(bn,0x13 - iVar5);\n    puVar3[iVar5 + 0x23] = (uchar)iVar4;\n    iVar5 = iVar5 + 1;\n  }" { (expression_statement "iVar4 = bignum_byte(b,0x13 - iVar5);" (assignment_expression "iVar4 = bignum_byte(b,0x13 - iVar5)" identifier = (call_expression "bignum_byte(b,0x13 - iVar5)" identifier (argument_list "(b,0x13 - iVar5)" ( identifier , (binary_expression "0x13 - iVar5" number_literal - identifier) )))) ;) (expression_statement "puVar3[iVar5 + 0xf] = (uchar)iVar4;" (assignment_expression "puVar3[iVar5 + 0xf] = (uchar)iVar4" (subscript_expression "puVar3[iVar5 + 0xf]" identifier [ (binary_expression "iVar5 + 0xf" identifier + number_literal) ]) = (cast_expression "(uchar)iVar4" ( (type_descriptor "uchar" type_identifier) ) identifier)) ;) (expression_statement "iVar4 = bignum_byte(bn,0x13 - iVar5);" (assignment_expression "iVar4 = bignum_byte(bn,0x13 - iVar5)" identifier = (call_expression "bignum_byte(bn,0x13 - iVar5)" identifier (argument_list "(bn,0x13 - iVar5)" ( identifier , (binary_expression "0x13 - iVar5" number_literal - identifier) )))) ;) (expression_statement "puVar3[iVar5 + 0x23] = (uchar)iVar4;" (assignment_expression "puVar3[iVar5 + 0x23] = (uchar)iVar4" (subscript_expression "puVar3[iVar5 + 0x23]" identifier [ (binary_expression "iVar5 + 0x23" identifier + number_literal) ]) = (cast_expression "(uchar)iVar4" ( (type_descriptor "uchar" type_identifier) ) identifier)) ;) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar5 != 0x14)" ( (binary_expression "iVar5 != 0x14" identifier != number_literal) )) ;) (expression_statement "freebn(b);" (call_expression "freebn(b)" identifier (argument_list "(b)" ( identifier ))) ;) (expression_statement "freebn(bn);" (call_expression "freebn(bn)" identifier (argument_list "(bn)" ( identifier ))) ;) (expression_statement "*siglen = 0x37;" (assignment_expression "*siglen = 0x37" (pointer_expression "*siglen" * identifier) = number_literal) ;) (if_statement "if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar3;\n  }" if (parenthesized_expression "(iVar1 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar1 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return puVar3;\n  }" { (return_statement "return puVar3;" return identifier ;) })) comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "undefined4 *\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    \n  FUN_0005c110();\n}\n\n" (function_definition "undefined4 *\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    \n  FUN_0005c110();\n}" type_identifier (pointer_declarator "*\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" * (function_declarator "FUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) )))) (compound_statement "{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    \n  FUN_0005c110();\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined1 local_34 [20];" type_identifier (array_declarator "local_34 [20]" identifier [ number_literal ]) ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x35ff9;" (assignment_expression "uStack_14 = 0x35ff9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "FUN_00049e40(param_2,param_3,local_34);" (call_expression "FUN_00049e40(param_2,param_3,local_34)" identifier (argument_list "(param_2,param_3,local_34)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);" (assignment_expression "uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" identifier = (call_expression "FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" identifier (argument_list "("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" ( (string_literal ""DSA deterministic k generator"" " string_content ") , (subscript_expression "param_1[1]" identifier [ number_literal ]) , (subscript_expression "param_1[4]" identifier [ number_literal ]) , identifier , number_literal )))) ;) (expression_statement "iVar3 = FUN_00030d50(uVar2,param_1[1]);" (assignment_expression "iVar3 = FUN_00030d50(uVar2,param_1[1])" identifier = (call_expression "FUN_00030d50(uVar2,param_1[1])" identifier (argument_list "(uVar2,param_1[1])" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" { (expression_statement "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign");" (call_expression "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign")" identifier (argument_list "("kinv","sshdss.c",0x26f,"dss_sign")" ( (string_literal ""kinv"" " string_content ") , (string_literal ""sshdss.c"" " string_content ") , number_literal , (string_literal ""dss_sign"" " string_content ") ))) ;) })) (expression_statement "uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);" (assignment_expression "uVar4 = FUN_00031270(param_1[2],uVar2,*param_1)" identifier = (call_expression "FUN_00031270(param_1[2],uVar2,*param_1)" identifier (argument_list "(param_1[2],uVar2,*param_1)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , identifier , (pointer_expression "*param_1" * identifier) )))) ;) (expression_statement "uVar5 = FUN_00030b20(uVar4,param_1[1]);" (assignment_expression "uVar5 = FUN_00030b20(uVar4,param_1[1])" identifier = (call_expression "FUN_00030b20(uVar4,param_1[1])" identifier (argument_list "(uVar4,param_1[1])" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) )))) ;) (expression_statement "FUN_0002e1b0(uVar4);" (call_expression "FUN_0002e1b0(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "uVar4 = FUN_0002f190(local_34,0x14);" (assignment_expression "uVar4 = FUN_0002f190(local_34,0x14)" identifier = (call_expression "FUN_0002f190(local_34,0x14)" identifier (argument_list "(local_34,0x14)" ( identifier , number_literal )))) ;) (expression_statement "uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);" (assignment_expression "uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4)" identifier = (call_expression "FUN_0002ffc0(param_1[4],uVar5,uVar4)" identifier (argument_list "(param_1[4],uVar5,uVar4)" ( (subscript_expression "param_1[4]" identifier [ number_literal ]) , identifier , identifier )))) ;) (expression_statement "uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);" (assignment_expression "uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1])" identifier = (call_expression "FUN_0002ed00(iVar3,uVar6,param_1[1])" identifier (argument_list "(iVar3,uVar6,param_1[1])" ( identifier , identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) )))) ;) (expression_statement "FUN_0002e1b0(uVar6);" (call_expression "FUN_0002e1b0(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(iVar3);" (call_expression "FUN_0002e1b0(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(uVar2);" (call_expression "FUN_0002e1b0(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(uVar4);" (call_expression "FUN_0002e1b0(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "puVar8 = (undefined4 *)FUN_0001c680(0x37,1);" (assignment_expression "puVar8 = (undefined4 *)FUN_0001c680(0x37,1)" identifier = (cast_expression "(undefined4 *)FUN_0001c680(0x37,1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001c680(0x37,1)" identifier (argument_list "(0x37,1)" ( number_literal , number_literal ))))) ;) (expression_statement "*puVar8 = 0x7000000;" (assignment_expression "*puVar8 = 0x7000000" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8[1] = 0x2d687373;" (assignment_expression "puVar8[1] = 0x2d687373" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined2 *)(puVar8 + 2) = 0x7364;" (assignment_expression "*(undefined2 *)(puVar8 + 2) = 0x7364" (pointer_expression "*(undefined2 *)(puVar8 + 2)" * (cast_expression "(undefined2 *)(puVar8 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + 2)" ( (binary_expression "puVar8 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((int)puVar8 + 10) = 0x73;" (assignment_expression "*(undefined1 *)((int)puVar8 + 10) = 0x73" (pointer_expression "*(undefined1 *)((int)puVar8 + 10)" * (cast_expression "(undefined1 *)((int)puVar8 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + 10)" ( (binary_expression "(int)puVar8 + 10" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;" (assignment_expression "*(undefined4 *)((int)puVar8 + 0xb) = 0x28000000" (pointer_expression "*(undefined4 *)((int)puVar8 + 0xb)" * (cast_expression "(undefined4 *)((int)puVar8 + 0xb)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + 0xb)" ( (binary_expression "(int)puVar8 + 0xb" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (do_statement "do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);" do (compound_statement "{\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  }" { (expression_statement "uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);" (assignment_expression "uVar1 = FUN_0002f840(uVar5,0x13 - iVar3)" identifier = (call_expression "FUN_0002f840(uVar5,0x13 - iVar3)" identifier (argument_list "(uVar5,0x13 - iVar3)" ( identifier , (binary_expression "0x13 - iVar3" number_literal - identifier) )))) ;) (expression_statement "*(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;" (assignment_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1" (pointer_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0xf)" * (cast_expression "(undefined1 *)((int)puVar8 + iVar3 + 0xf)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + iVar3 + 0xf)" ( (binary_expression "(int)puVar8 + iVar3 + 0xf" (binary_expression "(int)puVar8 + iVar3" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);" (assignment_expression "uVar1 = FUN_0002f840(uVar7,0x13 - iVar3)" identifier = (call_expression "FUN_0002f840(uVar7,0x13 - iVar3)" identifier (argument_list "(uVar7,0x13 - iVar3)" ( identifier , (binary_expression "0x13 - iVar3" number_literal - identifier) )))) ;) (expression_statement "*(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;" (assignment_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1" (pointer_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0x23)" * (cast_expression "(undefined1 *)((int)puVar8 + iVar3 + 0x23)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + iVar3 + 0x23)" ( (binary_expression "(int)puVar8 + iVar3 + 0x23" (binary_expression "(int)puVar8 + iVar3" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 != 0x14)" ( (binary_expression "iVar3 != 0x14" identifier != number_literal) )) ;) (expression_statement "FUN_0002e1b0(uVar5);" (call_expression "FUN_0002e1b0(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) (expression_statement "FUN_0002e1b0(uVar7);" (call_expression "FUN_0002e1b0(uVar7)" identifier (argument_list "(uVar7)" ( identifier ))) ;) (expression_statement "*param_4 = 0x37;" (assignment_expression "*param_4 = 0x37" (pointer_expression "*param_4" * identifier) = number_literal) ;) (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }" if (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return puVar8;\n  }" { (return_statement "return puVar8;" return identifier ;) })) (expression_statement "FUN_0005c110();" (call_expression "FUN_0005c110()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") , (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression LIT - IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression LIT - IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "undefined4 *\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    \n  FUN_0005c110();\n}" (type_identifier "undefined4") (pointer_declarator "*\nFUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" (* "*") (function_declarator "FUN_00035ff0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" (identifier "FUN_00035ff0") (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 *param_4" (type_identifier "undefined4") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")")))) (compound_statement "{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int in_GS_OFFSET;\n  undefined1 local_34 [20];\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x35ff9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00049e40(param_2,param_3,local_34);\n  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);\n  iVar3 = FUN_00030d50(uVar2,param_1[1]);\n  if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }\n  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);\n  uVar5 = FUN_00030b20(uVar4,param_1[1]);\n  FUN_0002e1b0(uVar4);\n  uVar4 = FUN_0002f190(local_34,0x14);\n  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);\n  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);\n  FUN_0002e1b0(uVar6);\n  FUN_0002e1b0(iVar3);\n  FUN_0002e1b0(uVar2);\n  FUN_0002e1b0(uVar4);\n  iVar3 = 0;\n  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);\n  *puVar8 = 0x7000000;\n  puVar8[1] = 0x2d687373;\n  *(undefined2 *)(puVar8 + 2) = 0x7364;\n  *(undefined1 *)((int)puVar8 + 10) = 0x73;\n  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;\n  do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);\n  FUN_0002e1b0(uVar5);\n  FUN_0002e1b0(uVar7);\n  *param_4 = 0x37;\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }\n                    \n  FUN_0005c110();\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (declaration "undefined4 uVar7;" (type_identifier "undefined4") (identifier "uVar7") (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "undefined1 local_34 [20];" (type_identifier "undefined1") (array_declarator "local_34 [20]" (identifier "local_34") ([ "[") (number_literal "20") (] "]")) (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "uStack_14 = 0x35ff9;" (assignment_expression "uStack_14 = 0x35ff9" (identifier "uStack_14") (= "=") (number_literal "0x35ff9")) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "FUN_00049e40(param_2,param_3,local_34);" (call_expression "FUN_00049e40(param_2,param_3,local_34)" (identifier "FUN_00049e40") (argument_list "(param_2,param_3,local_34)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "local_34") () ")"))) (; ";")) (expression_statement "uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);" (assignment_expression "uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" (identifier "uVar2") (= "=") (call_expression "FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" (identifier "FUN_00035d90") (argument_list "("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14)" (( "(") (string_literal ""DSA deterministic k generator"" (" """) (string_content "DSA deterministic k generator") (" """)) (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (, ",") (identifier "local_34") (, ",") (number_literal "0x14") () ")")))) (; ";")) (expression_statement "iVar3 = FUN_00030d50(uVar2,param_1[1]);" (assignment_expression "iVar3 = FUN_00030d50(uVar2,param_1[1])" (identifier "iVar3") (= "=") (call_expression "FUN_00030d50(uVar2,param_1[1])" (identifier "FUN_00030d50") (argument_list "(uVar2,param_1[1])" (( "(") (identifier "uVar2") (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");\n  }" ({ "{") (expression_statement "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign");" (call_expression "__assert_fail("kinv","sshdss.c",0x26f,"dss_sign")" (identifier "__assert_fail") (argument_list "("kinv","sshdss.c",0x26f,"dss_sign")" (( "(") (string_literal ""kinv"" (" """) (string_content "kinv") (" """)) (, ",") (string_literal ""sshdss.c"" (" """) (string_content "sshdss.c") (" """)) (, ",") (number_literal "0x26f") (, ",") (string_literal ""dss_sign"" (" """) (string_content "dss_sign") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);" (assignment_expression "uVar4 = FUN_00031270(param_1[2],uVar2,*param_1)" (identifier "uVar4") (= "=") (call_expression "FUN_00031270(param_1[2],uVar2,*param_1)" (identifier "FUN_00031270") (argument_list "(param_1[2],uVar2,*param_1)" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (identifier "uVar2") (, ",") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "uVar5 = FUN_00030b20(uVar4,param_1[1]);" (assignment_expression "uVar5 = FUN_00030b20(uVar4,param_1[1])" (identifier "uVar5") (= "=") (call_expression "FUN_00030b20(uVar4,param_1[1])" (identifier "FUN_00030b20") (argument_list "(uVar4,param_1[1])" (( "(") (identifier "uVar4") (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) () ")")))) (; ";")) (expression_statement "FUN_0002e1b0(uVar4);" (call_expression "FUN_0002e1b0(uVar4)" (identifier "FUN_0002e1b0") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "uVar4 = FUN_0002f190(local_34,0x14);" (assignment_expression "uVar4 = FUN_0002f190(local_34,0x14)" (identifier "uVar4") (= "=") (call_expression "FUN_0002f190(local_34,0x14)" (identifier "FUN_0002f190") (argument_list "(local_34,0x14)" (( "(") (identifier "local_34") (, ",") (number_literal "0x14") () ")")))) (; ";")) (expression_statement "uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);" (assignment_expression "uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4)" (identifier "uVar6") (= "=") (call_expression "FUN_0002ffc0(param_1[4],uVar5,uVar4)" (identifier "FUN_0002ffc0") (argument_list "(param_1[4],uVar5,uVar4)" (( "(") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (, ",") (identifier "uVar5") (, ",") (identifier "uVar4") () ")")))) (; ";")) (expression_statement "uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);" (assignment_expression "uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1])" (identifier "uVar7") (= "=") (call_expression "FUN_0002ed00(iVar3,uVar6,param_1[1])" (identifier "FUN_0002ed00") (argument_list "(iVar3,uVar6,param_1[1])" (( "(") (identifier "iVar3") (, ",") (identifier "uVar6") (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) () ")")))) (; ";")) (expression_statement "FUN_0002e1b0(uVar6);" (call_expression "FUN_0002e1b0(uVar6)" (identifier "FUN_0002e1b0") (argument_list "(uVar6)" (( "(") (identifier "uVar6") () ")"))) (; ";")) (expression_statement "FUN_0002e1b0(iVar3);" (call_expression "FUN_0002e1b0(iVar3)" (identifier "FUN_0002e1b0") (argument_list "(iVar3)" (( "(") (identifier "iVar3") () ")"))) (; ";")) (expression_statement "FUN_0002e1b0(uVar2);" (call_expression "FUN_0002e1b0(uVar2)" (identifier "FUN_0002e1b0") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (expression_statement "FUN_0002e1b0(uVar4);" (call_expression "FUN_0002e1b0(uVar4)" (identifier "FUN_0002e1b0") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar8 = (undefined4 *)FUN_0001c680(0x37,1);" (assignment_expression "puVar8 = (undefined4 *)FUN_0001c680(0x37,1)" (identifier "puVar8") (= "=") (cast_expression "(undefined4 *)FUN_0001c680(0x37,1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0001c680(0x37,1)" (identifier "FUN_0001c680") (argument_list "(0x37,1)" (( "(") (number_literal "0x37") (, ",") (number_literal "1") () ")"))))) (; ";")) (expression_statement "*puVar8 = 0x7000000;" (assignment_expression "*puVar8 = 0x7000000" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (number_literal "0x7000000")) (; ";")) (expression_statement "puVar8[1] = 0x2d687373;" (assignment_expression "puVar8[1] = 0x2d687373" (subscript_expression "puVar8[1]" (identifier "puVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0x2d687373")) (; ";")) (expression_statement "*(undefined2 *)(puVar8 + 2) = 0x7364;" (assignment_expression "*(undefined2 *)(puVar8 + 2) = 0x7364" (pointer_expression "*(undefined2 *)(puVar8 + 2)" (* "*") (cast_expression "(undefined2 *)(puVar8 + 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar8 + 2)" (( "(") (binary_expression "puVar8 + 2" (identifier "puVar8") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "0x7364")) (; ";")) (expression_statement "*(undefined1 *)((int)puVar8 + 10) = 0x73;" (assignment_expression "*(undefined1 *)((int)puVar8 + 10) = 0x73" (pointer_expression "*(undefined1 *)((int)puVar8 + 10)" (* "*") (cast_expression "(undefined1 *)((int)puVar8 + 10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar8 + 10)" (( "(") (binary_expression "(int)puVar8 + 10" (cast_expression "(int)puVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar8")) (+ "+") (number_literal "10")) () ")")))) (= "=") (number_literal "0x73")) (; ";")) (expression_statement "*(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;" (assignment_expression "*(undefined4 *)((int)puVar8 + 0xb) = 0x28000000" (pointer_expression "*(undefined4 *)((int)puVar8 + 0xb)" (* "*") (cast_expression "(undefined4 *)((int)puVar8 + 0xb)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar8 + 0xb)" (( "(") (binary_expression "(int)puVar8 + 0xb" (cast_expression "(int)puVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar8")) (+ "+") (number_literal "0xb")) () ")")))) (= "=") (number_literal "0x28000000")) (; ";")) (do_statement "do {\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  } while (iVar3 != 0x14);" (do "do") (compound_statement "{\n    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;\n    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);\n    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;\n    iVar3 = iVar3 + 1;\n  }" ({ "{") (expression_statement "uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);" (assignment_expression "uVar1 = FUN_0002f840(uVar5,0x13 - iVar3)" (identifier "uVar1") (= "=") (call_expression "FUN_0002f840(uVar5,0x13 - iVar3)" (identifier "FUN_0002f840") (argument_list "(uVar5,0x13 - iVar3)" (( "(") (identifier "uVar5") (, ",") (binary_expression "0x13 - iVar3" (number_literal "0x13") (- "-") (identifier "iVar3")) () ")")))) (; ";")) (expression_statement "*(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;" (assignment_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1" (pointer_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0xf)" (* "*") (cast_expression "(undefined1 *)((int)puVar8 + iVar3 + 0xf)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar8 + iVar3 + 0xf)" (( "(") (binary_expression "(int)puVar8 + iVar3 + 0xf" (binary_expression "(int)puVar8 + iVar3" (cast_expression "(int)puVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar8")) (+ "+") (identifier "iVar3")) (+ "+") (number_literal "0xf")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);" (assignment_expression "uVar1 = FUN_0002f840(uVar7,0x13 - iVar3)" (identifier "uVar1") (= "=") (call_expression "FUN_0002f840(uVar7,0x13 - iVar3)" (identifier "FUN_0002f840") (argument_list "(uVar7,0x13 - iVar3)" (( "(") (identifier "uVar7") (, ",") (binary_expression "0x13 - iVar3" (number_literal "0x13") (- "-") (identifier "iVar3")) () ")")))) (; ";")) (expression_statement "*(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;" (assignment_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1" (pointer_expression "*(undefined1 *)((int)puVar8 + iVar3 + 0x23)" (* "*") (cast_expression "(undefined1 *)((int)puVar8 + iVar3 + 0x23)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar8 + iVar3 + 0x23)" (( "(") (binary_expression "(int)puVar8 + iVar3 + 0x23" (binary_expression "(int)puVar8 + iVar3" (cast_expression "(int)puVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar8")) (+ "+") (identifier "iVar3")) (+ "+") (number_literal "0x23")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar3 != 0x14)" (( "(") (binary_expression "iVar3 != 0x14" (identifier "iVar3") (!= "!=") (number_literal "0x14")) () ")")) (; ";")) (expression_statement "FUN_0002e1b0(uVar5);" (call_expression "FUN_0002e1b0(uVar5)" (identifier "FUN_0002e1b0") (argument_list "(uVar5)" (( "(") (identifier "uVar5") () ")"))) (; ";")) (expression_statement "FUN_0002e1b0(uVar7);" (call_expression "FUN_0002e1b0(uVar7)" (identifier "FUN_0002e1b0") (argument_list "(uVar7)" (( "(") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "*param_4 = 0x37;" (assignment_expression "*param_4 = 0x37" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0x37")) (; ";")) (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return puVar8;\n  }" (if "if") (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (== "==") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n    return puVar8;\n  }" ({ "{") (return_statement "return puVar8;" (return "return") (identifier "puVar8") (; ";")) (} "}"))) (expression_statement "FUN_0005c110();" (call_expression "FUN_0005c110()" (identifier "FUN_0005c110") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

type_1 * function_1(void *key,char *data,int datalen,int *siglen)

{
  int var_16;
  type_2 *number;
  type_3 var_5;
  type_3 pBVar2;
  type_3 b;
  type_3 q;
  type_3 bn;
  type_1 *puVar3;
  int iVar4;
  int var_15;
  int var_1;
  type_1 digest [20];
  
  var_16 = *(int *)(var_1 + 0x14);
  var_2(data,datalen,digest);
  number = var_3("DSA deterministic k generator",*(type_2 *)((int)key + 4),
                     *(type_2 *)((int)key + 0x10),digest,0x14);
  var_5 = var_4((type_3)number,*(type_3 *)((int)key + 4));
  if (var_5 == (type_3)0x0) {
                    /* WARNING: Subroutine does not return */
    var_6("kinv","sshdss.c",0x26f,"dss_sign");
  }
                    /* WARNING: Load size is inaccurate */
  pBVar2 = var_7(*(type_3 *)((int)key + 8),(type_3)number,*key);
  b = var_8(pBVar2,*(type_3 *)((int)key + 4));
  var_9(pBVar2);
  pBVar2 = var_10(digest,0x14);
  q = var_11(*(type_3 *)((int)key + 0x10),b,pBVar2);
  bn = var_12(var_5,q,*(type_3 *)((int)key + 4));
  var_9(q);
  var_9(var_5);
  var_9((type_3)number);
  var_9(pBVar2);
  var_15 = 0;
  puVar3 = (type_1 *)var_13(0x37,1);
  puVar3[0] = '\0';
  puVar3[1] = '\0';
  puVar3[2] = '\0';
  puVar3[3] = '\a';
  puVar3[4] = 's';
  puVar3[5] = 's';
  puVar3[6] = 'h';
  puVar3[7] = '-';
  puVar3[8] = 'd';
  puVar3[9] = 's';
  puVar3[10] = 's';
  puVar3[0xb] = '\0';
  puVar3[0xc] = '\0';
  puVar3[0xd] = '\0';
  puVar3[0xe] = '(';
  do {
    iVar4 = var_14(b,0x13 - var_15);
    puVar3[var_15 + 0xf] = (type_1)iVar4;
    iVar4 = var_14(bn,0x13 - var_15);
    puVar3[var_15 + 0x23] = (type_1)iVar4;
    var_15 = var_15 + 1;
  } while (var_15 != 0x14);
  var_9(b);
  var_9(bn);
  *siglen = 0x37;
  if (var_16 == *(int *)(var_1 + 0x14)) {
    return puVar3;
  }
                    /* WARNING: Subroutine does not return */
  var_17();
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 *
MASKED(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)

{
  undefined1 uVar1;
  undefined4 uVar2;
  int iVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  int in_GS_OFFSET;
  undefined1 local_34 [20];
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x35ff9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  FUN_00049e40(param_2,param_3,local_34);
  uVar2 = FUN_00035d90("DSA deterministic k generator",param_1[1],param_1[4],local_34,0x14);
  iVar3 = FUN_00030d50(uVar2,param_1[1]);
  if (iVar3 == 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("kinv","sshdss.c",0x26f,"dss_sign");
  }
  uVar4 = FUN_00031270(param_1[2],uVar2,*param_1);
  uVar5 = FUN_00030b20(uVar4,param_1[1]);
  FUN_0002e1b0(uVar4);
  uVar4 = FUN_0002f190(local_34,0x14);
  uVar6 = FUN_0002ffc0(param_1[4],uVar5,uVar4);
  uVar7 = FUN_0002ed00(iVar3,uVar6,param_1[1]);
  FUN_0002e1b0(uVar6);
  FUN_0002e1b0(iVar3);
  FUN_0002e1b0(uVar2);
  FUN_0002e1b0(uVar4);
  iVar3 = 0;
  puVar8 = (undefined4 *)FUN_0001c680(0x37,1);
  *puVar8 = 0x7000000;
  puVar8[1] = 0x2d687373;
  *(undefined2 *)(puVar8 + 2) = 0x7364;
  *(undefined1 *)((int)puVar8 + 10) = 0x73;
  *(undefined4 *)((int)puVar8 + 0xb) = 0x28000000;
  do {
    uVar1 = FUN_0002f840(uVar5,0x13 - iVar3);
    *(undefined1 *)((int)puVar8 + iVar3 + 0xf) = uVar1;
    uVar1 = FUN_0002f840(uVar7,0x13 - iVar3);
    *(undefined1 *)((int)puVar8 + iVar3 + 0x23) = uVar1;
    iVar3 = iVar3 + 1;
  } while (iVar3 != 0x14);
  FUN_0002e1b0(uVar5);
  FUN_0002e1b0(uVar7);
  *param_4 = 0x37;
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return puVar8;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0005c110();
}

