
int poly1305_init(poly1305_state *st,uchar *key,ulong keylen)

{
  if (st == (poly1305_state *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);
  }
  if (key != (uchar *)0x0) {
    if (keylen == 0x20) {
      st->r[0] = *(uint *)key & 0x3ffffff;
      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;
      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;
      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;
      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;
      st->h[0] = 0;
      st->h[1] = 0;
      st->h[2] = 0;
      st->h[3] = 0;
      st->h[4] = 0;
      st->pad[0] = *(ulong32 *)(key + 0x10);
      st->pad[1] = *(ulong32 *)(key + 0x14);
      st->pad[2] = *(ulong32 *)(key + 0x18);
      st->pad[3] = *(ulong32 *)(key + 0x1c);
      st->leftover = 0;
      st->final = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);
}



undefined8 poly1305_init(uint *param_1,uint *param_2,long param_3)

{
  if (param_1 == (uint *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);
  }
  if (param_2 != (uint *)0x0) {
    if (param_3 == 0x20) {
      *param_1 = *param_2 & 0x3ffffff;
      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;
      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;
      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;
      param_1[4] = param_2[3] >> 8 & 0xfffff;
      param_1[5] = 0;
      param_1[6] = 0;
      param_1[7] = 0;
      param_1[8] = 0;
      param_1[9] = 0;
      param_1[10] = param_2[4];
      param_1[0xb] = param_2[5];
      param_1[0xc] = param_2[6];
      param_1[0xd] = param_2[7];
      param_1[0xe] = 0;
      param_1[0xf] = 0;
      param_1[0x14] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);
}


SUB RSP,0x8
TEST RDI,RDI
JZ 0x00160193
TEST RSI,RSI
JZ 0x001601ab
CMP RDX,0x20
JNZ 0x001601c3
MOV EAX,dword ptr [RSI]
AND EAX,0x3ffffff
MOV dword ptr [RDI],EAX
MOV EDX,dword ptr [RSI + 0x3]
SHR EDX,0x2
AND EDX,0x3ffff03
MOV dword ptr [RDI + 0x4],EDX
MOV ECX,dword ptr [RSI + 0x6]
SHR ECX,0x4
AND ECX,0x3ffc0ff
MOV dword ptr [RDI + 0x8],ECX
MOV R8D,dword ptr [RSI + 0x9]
SHR R8D,0x6
AND R8D,0x3f03fff
MOV dword ptr [RDI + 0xc],R8D
MOV R9D,dword ptr [RSI + 0xc]
SHR R9D,0x8
AND R9D,0xfffff
MOV dword ptr [RDI + 0x10],R9D
MOV dword ptr [RDI + 0x14],0x0
MOV dword ptr [RDI + 0x18],0x0
MOV dword ptr [RDI + 0x1c],0x0
MOV dword ptr [RDI + 0x20],0x0
MOV dword ptr [RDI + 0x24],0x0
MOV R10D,dword ptr [RSI + 0x10]
MOV dword ptr [RDI + 0x28],R10D
MOV R11D,dword ptr [RSI + 0x14]
MOV dword ptr [RDI + 0x2c],R11D
MOV EAX,dword ptr [RSI + 0x18]
MOV dword ptr [RDI + 0x30],EAX
MOV ESI,dword ptr [RSI + 0x1c]
MOV dword ptr [RDI + 0x34],ESI
MOV qword ptr [RDI + 0x38],0x0
MOV dword ptr [RDI + 0x50],0x0
MOV EAX,0x0
ADD RSP,0x8
RET
MOV EDX,0x5b
LEA RSI,[0x1c0730]
LEA RDI,[0x1c5ca3]
CALL 0x00114260
MOV EDX,0x5c
LEA RSI,[0x1c0730]
LEA RDI,[0x1c8f9d]
CALL 0x00114260
MOV EDX,0x5d
LEA RSI,[0x1c0730]
LEA RDI,[0x1c074c]
CALL 0x00114260
(translation_unit "undefined8 poly1305_init(uint *param_1,uint *param_2,long param_3)\n\n{\n  if (param_1 == (uint *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}\n\n" (function_definition "undefined8 poly1305_init(uint *param_1,uint *param_2,long param_3)\n\n{\n  if (param_1 == (uint *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" type_identifier (function_declarator "poly1305_init(uint *param_1,uint *param_2,long param_3)" identifier (parameter_list "(uint *param_1,uint *param_2,long param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  if (param_1 == (uint *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" { (if_statement "if (param_1 == (uint *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" if (parenthesized_expression "(param_1 == (uint *)0x0)" ( (binary_expression "param_1 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" { comment (expression_statement "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);" (call_expression "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" identifier (argument_list "("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" ( (string_literal ""st != NULL"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" if (parenthesized_expression "(param_2 != (uint *)0x0)" ( (binary_expression "param_2 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" { (if_statement "if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_3 == 0x20)" ( (binary_expression "param_3 == 0x20" identifier == number_literal) )) (compound_statement "{\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }" { (expression_statement "*param_1 = *param_2 & 0x3ffffff;" (assignment_expression "*param_1 = *param_2 & 0x3ffffff" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_2 & 0x3ffffff" (pointer_expression "*param_2" * identifier) & number_literal)) ;) (expression_statement "param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;" (assignment_expression "param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "*(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03" (binary_expression "*(uint *)((long)param_2 + 3) >> 2" (pointer_expression "*(uint *)((long)param_2 + 3)" * (cast_expression "(uint *)((long)param_2 + 3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 3)" ( (binary_expression "(long)param_2 + 3" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;" (assignment_expression "param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "*(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff" (binary_expression "*(uint *)((long)param_2 + 6) >> 4" (pointer_expression "*(uint *)((long)param_2 + 6)" * (cast_expression "(uint *)((long)param_2 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 6)" ( (binary_expression "(long)param_2 + 6" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;" (assignment_expression "param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (binary_expression "*(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff" (binary_expression "*(uint *)((long)param_2 + 9) >> 6" (pointer_expression "*(uint *)((long)param_2 + 9)" * (cast_expression "(uint *)((long)param_2 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 9)" ( (binary_expression "(long)param_2 + 9" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "param_1[4] = param_2[3] >> 8 & 0xfffff;" (assignment_expression "param_1[4] = param_2[3] >> 8 & 0xfffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_2[3] >> 8 & 0xfffff" (binary_expression "param_2[3] >> 8" (subscript_expression "param_2[3]" identifier [ number_literal ]) >> number_literal) & number_literal)) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = 0;" (assignment_expression "param_1[7] = 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[9] = 0;" (assignment_expression "param_1[9] = 0" (subscript_expression "param_1[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[10] = param_2[4];" (assignment_expression "param_1[10] = param_2[4]" (subscript_expression "param_1[10]" identifier [ number_literal ]) = (subscript_expression "param_2[4]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xb] = param_2[5];" (assignment_expression "param_1[0xb] = param_2[5]" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = (subscript_expression "param_2[5]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xc] = param_2[6];" (assignment_expression "param_1[0xc] = param_2[6]" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) = (subscript_expression "param_2[6]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xd] = param_2[7];" (assignment_expression "param_1[0xd] = param_2[7]" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (subscript_expression "param_2[7]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xe] = 0;" (assignment_expression "param_1[0xe] = 0" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0xf] = 0;" (assignment_expression "param_1[0xf] = 0" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x14] = 0;" (assignment_expression "param_1[0x14] = 0" (subscript_expression "param_1[0x14]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);" (call_expression "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" identifier (argument_list "("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" ( (string_literal ""keylen == 32"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })) comment (expression_statement "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);" (call_expression "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" identifier (argument_list "("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "int poly1305_init(poly1305_state *st,uchar *key,ulong keylen)\n\n{\n  if (st == (poly1305_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (key != (uchar *)0x0) {\n    if (keylen == 0x20) {\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}\n\n" (function_definition "int poly1305_init(poly1305_state *st,uchar *key,ulong keylen)\n\n{\n  if (st == (poly1305_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (key != (uchar *)0x0) {\n    if (keylen == 0x20) {\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" primitive_type (function_declarator "poly1305_init(poly1305_state *st,uchar *key,ulong keylen)" identifier (parameter_list "(poly1305_state *st,uchar *key,ulong keylen)" ( (parameter_declaration "poly1305_state *st" type_identifier (pointer_declarator "*st" * identifier)) , (parameter_declaration "uchar *key" type_identifier (pointer_declarator "*key" * identifier)) , (parameter_declaration "ulong keylen" type_identifier identifier) ))) (compound_statement "{\n  if (st == (poly1305_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (key != (uchar *)0x0) {\n    if (keylen == 0x20) {\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" { (if_statement "if (st == (poly1305_state *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" if (parenthesized_expression "(st == (poly1305_state *)0x0)" ( (binary_expression "st == (poly1305_state *)0x0" identifier == (cast_expression "(poly1305_state *)0x0" ( (type_descriptor "poly1305_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" { comment (expression_statement "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);" (call_expression "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" identifier (argument_list "("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" ( (string_literal ""st != NULL"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (key != (uchar *)0x0) {\n    if (keylen == 0x20) {\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" if (parenthesized_expression "(key != (uchar *)0x0)" ( (binary_expression "key != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (keylen == 0x20) {\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" { (if_statement "if (keylen == 0x20) {\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }" if (parenthesized_expression "(keylen == 0x20)" ( (binary_expression "keylen == 0x20" identifier == number_literal) )) (compound_statement "{\n      st->r[0] = *(uint *)key & 0x3ffffff;\n      st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;\n      st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;\n      st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;\n      st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;\n      st->h[0] = 0;\n      st->h[1] = 0;\n      st->h[2] = 0;\n      st->h[3] = 0;\n      st->h[4] = 0;\n      st->pad[0] = *(ulong32 *)(key + 0x10);\n      st->pad[1] = *(ulong32 *)(key + 0x14);\n      st->pad[2] = *(ulong32 *)(key + 0x18);\n      st->pad[3] = *(ulong32 *)(key + 0x1c);\n      st->leftover = 0;\n      st->final = 0;\n      return 0;\n    }" { (expression_statement "st->r[0] = *(uint *)key & 0x3ffffff;" (assignment_expression "st->r[0] = *(uint *)key & 0x3ffffff" (subscript_expression "st->r[0]" (field_expression "st->r" identifier -> field_identifier) [ number_literal ]) = (binary_expression "*(uint *)key & 0x3ffffff" (pointer_expression "*(uint *)key" * (cast_expression "(uint *)key" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal)) ;) (expression_statement "st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03;" (assignment_expression "st->r[1] = *(uint *)(key + 3) >> 2 & 0x3ffff03" (subscript_expression "st->r[1]" (field_expression "st->r" identifier -> field_identifier) [ number_literal ]) = (binary_expression "*(uint *)(key + 3) >> 2 & 0x3ffff03" (binary_expression "*(uint *)(key + 3) >> 2" (pointer_expression "*(uint *)(key + 3)" * (cast_expression "(uint *)(key + 3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 3)" ( (binary_expression "key + 3" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff;" (assignment_expression "st->r[2] = *(uint *)(key + 6) >> 4 & 0x3ffc0ff" (subscript_expression "st->r[2]" (field_expression "st->r" identifier -> field_identifier) [ number_literal ]) = (binary_expression "*(uint *)(key + 6) >> 4 & 0x3ffc0ff" (binary_expression "*(uint *)(key + 6) >> 4" (pointer_expression "*(uint *)(key + 6)" * (cast_expression "(uint *)(key + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 6)" ( (binary_expression "key + 6" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff;" (assignment_expression "st->r[3] = *(uint *)(key + 9) >> 6 & 0x3f03fff" (subscript_expression "st->r[3]" (field_expression "st->r" identifier -> field_identifier) [ number_literal ]) = (binary_expression "*(uint *)(key + 9) >> 6 & 0x3f03fff" (binary_expression "*(uint *)(key + 9) >> 6" (pointer_expression "*(uint *)(key + 9)" * (cast_expression "(uint *)(key + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 9)" ( (binary_expression "key + 9" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff;" (assignment_expression "st->r[4] = *(uint *)(key + 0xc) >> 8 & 0xfffff" (subscript_expression "st->r[4]" (field_expression "st->r" identifier -> field_identifier) [ number_literal ]) = (binary_expression "*(uint *)(key + 0xc) >> 8 & 0xfffff" (binary_expression "*(uint *)(key + 0xc) >> 8" (pointer_expression "*(uint *)(key + 0xc)" * (cast_expression "(uint *)(key + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0xc)" ( (binary_expression "key + 0xc" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "st->h[0] = 0;" (assignment_expression "st->h[0] = 0" (subscript_expression "st->h[0]" (field_expression "st->h" identifier -> field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "st->h[1] = 0;" (assignment_expression "st->h[1] = 0" (subscript_expression "st->h[1]" (field_expression "st->h" identifier -> field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "st->h[2] = 0;" (assignment_expression "st->h[2] = 0" (subscript_expression "st->h[2]" (field_expression "st->h" identifier -> field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "st->h[3] = 0;" (assignment_expression "st->h[3] = 0" (subscript_expression "st->h[3]" (field_expression "st->h" identifier -> field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "st->h[4] = 0;" (assignment_expression "st->h[4] = 0" (subscript_expression "st->h[4]" (field_expression "st->h" identifier -> field_identifier) [ number_literal ]) = number_literal) ;) (expression_statement "st->pad[0] = *(ulong32 *)(key + 0x10);" (assignment_expression "st->pad[0] = *(ulong32 *)(key + 0x10)" (subscript_expression "st->pad[0]" (field_expression "st->pad" identifier -> field_identifier) [ number_literal ]) = (pointer_expression "*(ulong32 *)(key + 0x10)" * (cast_expression "(ulong32 *)(key + 0x10)" ( (type_descriptor "ulong32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x10)" ( (binary_expression "key + 0x10" identifier + number_literal) ))))) ;) (expression_statement "st->pad[1] = *(ulong32 *)(key + 0x14);" (assignment_expression "st->pad[1] = *(ulong32 *)(key + 0x14)" (subscript_expression "st->pad[1]" (field_expression "st->pad" identifier -> field_identifier) [ number_literal ]) = (pointer_expression "*(ulong32 *)(key + 0x14)" * (cast_expression "(ulong32 *)(key + 0x14)" ( (type_descriptor "ulong32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x14)" ( (binary_expression "key + 0x14" identifier + number_literal) ))))) ;) (expression_statement "st->pad[2] = *(ulong32 *)(key + 0x18);" (assignment_expression "st->pad[2] = *(ulong32 *)(key + 0x18)" (subscript_expression "st->pad[2]" (field_expression "st->pad" identifier -> field_identifier) [ number_literal ]) = (pointer_expression "*(ulong32 *)(key + 0x18)" * (cast_expression "(ulong32 *)(key + 0x18)" ( (type_descriptor "ulong32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x18)" ( (binary_expression "key + 0x18" identifier + number_literal) ))))) ;) (expression_statement "st->pad[3] = *(ulong32 *)(key + 0x1c);" (assignment_expression "st->pad[3] = *(ulong32 *)(key + 0x1c)" (subscript_expression "st->pad[3]" (field_expression "st->pad" identifier -> field_identifier) [ number_literal ]) = (pointer_expression "*(ulong32 *)(key + 0x1c)" * (cast_expression "(ulong32 *)(key + 0x1c)" ( (type_descriptor "ulong32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(key + 0x1c)" ( (binary_expression "key + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "st->leftover = 0;" (assignment_expression "st->leftover = 0" (field_expression "st->leftover" identifier -> field_identifier) = number_literal) ;) (expression_statement "st->final = 0;" (assignment_expression "st->final = 0" (field_expression "st->final" identifier -> field_identifier) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);" (call_expression "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" identifier (argument_list "("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" ( (string_literal ""keylen == 32"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })) comment (expression_statement "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);" (call_expression "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" identifier (argument_list "("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "undefined8 poly1305_init(uint *param_1,uint *param_2,long param_3)\n\n{\n  if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    \n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}\n\n" (function_definition "undefined8 poly1305_init(uint *param_1,uint *param_2,long param_3)\n\n{\n  if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    \n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" type_identifier (function_declarator "poly1305_init(uint *param_1,uint *param_2,long param_3)" identifier (parameter_list "(uint *param_1,uint *param_2,long param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    \n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" { (if_statement "if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" if (parenthesized_expression "(param_1 == (uint *)0x0)" ( (binary_expression "param_1 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" { (expression_statement "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);" (call_expression "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" identifier (argument_list "("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" ( (string_literal ""st != NULL"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" if (parenthesized_expression "(param_2 != (uint *)0x0)" ( (binary_expression "param_2 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" { (if_statement "if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_3 == 0x20)" ( (binary_expression "param_3 == 0x20" identifier == number_literal) )) (compound_statement "{\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }" { (expression_statement "*param_1 = *param_2 & 0x3ffffff;" (assignment_expression "*param_1 = *param_2 & 0x3ffffff" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_2 & 0x3ffffff" (pointer_expression "*param_2" * identifier) & number_literal)) ;) (expression_statement "param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;" (assignment_expression "param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "*(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03" (binary_expression "*(uint *)((long)param_2 + 3) >> 2" (pointer_expression "*(uint *)((long)param_2 + 3)" * (cast_expression "(uint *)((long)param_2 + 3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 3)" ( (binary_expression "(long)param_2 + 3" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;" (assignment_expression "param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "*(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff" (binary_expression "*(uint *)((long)param_2 + 6) >> 4" (pointer_expression "*(uint *)((long)param_2 + 6)" * (cast_expression "(uint *)((long)param_2 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 6)" ( (binary_expression "(long)param_2 + 6" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;" (assignment_expression "param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (binary_expression "*(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff" (binary_expression "*(uint *)((long)param_2 + 9) >> 6" (pointer_expression "*(uint *)((long)param_2 + 9)" * (cast_expression "(uint *)((long)param_2 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 9)" ( (binary_expression "(long)param_2 + 9" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "param_1[4] = param_2[3] >> 8 & 0xfffff;" (assignment_expression "param_1[4] = param_2[3] >> 8 & 0xfffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_2[3] >> 8 & 0xfffff" (binary_expression "param_2[3] >> 8" (subscript_expression "param_2[3]" identifier [ number_literal ]) >> number_literal) & number_literal)) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = 0;" (assignment_expression "param_1[7] = 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[9] = 0;" (assignment_expression "param_1[9] = 0" (subscript_expression "param_1[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[10] = param_2[4];" (assignment_expression "param_1[10] = param_2[4]" (subscript_expression "param_1[10]" identifier [ number_literal ]) = (subscript_expression "param_2[4]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xb] = param_2[5];" (assignment_expression "param_1[0xb] = param_2[5]" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = (subscript_expression "param_2[5]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xc] = param_2[6];" (assignment_expression "param_1[0xc] = param_2[6]" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) = (subscript_expression "param_2[6]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xd] = param_2[7];" (assignment_expression "param_1[0xd] = param_2[7]" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (subscript_expression "param_2[7]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xe] = 0;" (assignment_expression "param_1[0xe] = 0" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0xf] = 0;" (assignment_expression "param_1[0xf] = 0" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x14] = 0;" (assignment_expression "param_1[0x14] = 0" (subscript_expression "param_1[0x14]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);" (call_expression "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" identifier (argument_list "("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" ( (string_literal ""keylen == 32"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);" (call_expression "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" identifier (argument_list "("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/mac/poly1305/poly1305.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) >> LIT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) >> LIT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) >> LIT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) >> LIT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })))
(function_definition "undefined8 poly1305_init(uint *param_1,uint *param_2,long param_3)\n\n{\n  if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    \n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" (type_identifier "undefined8") (function_declarator "poly1305_init(uint *param_1,uint *param_2,long param_3)" (identifier "poly1305_init") (parameter_list "(uint *param_1,uint *param_2,long param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }\n  if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }\n                    \n  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);\n}" ({ "{") (if_statement "if (param_1 == (uint *)0x0) {\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" (if "if") (parenthesized_expression "(param_1 == (uint *)0x0)" (( "(") (binary_expression "param_1 == (uint *)0x0" (identifier "param_1") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);\n  }" ({ "{") (expression_statement "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);" (call_expression "crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" (identifier "crypt_argchk") (argument_list "("st != NULL","src/mac/poly1305/poly1305.c",0x5b)" (( "(") (string_literal ""st != NULL"" (" """) (string_content "st != NULL") (" """)) (, ",") (string_literal ""src/mac/poly1305/poly1305.c"" (" """) (string_content "src/mac/poly1305/poly1305.c") (" """)) (, ",") (number_literal "0x5b") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_2 != (uint *)0x0) {\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" (if "if") (parenthesized_expression "(param_2 != (uint *)0x0)" (( "(") (binary_expression "param_2 != (uint *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }\n                    \n    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);\n  }" ({ "{") (if_statement "if (param_3 == 0x20) {\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_3 == 0x20)" (( "(") (binary_expression "param_3 == 0x20" (identifier "param_3") (== "==") (number_literal "0x20")) () ")")) (compound_statement "{\n      *param_1 = *param_2 & 0x3ffffff;\n      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;\n      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;\n      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;\n      param_1[4] = param_2[3] >> 8 & 0xfffff;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = 0;\n      param_1[8] = 0;\n      param_1[9] = 0;\n      param_1[10] = param_2[4];\n      param_1[0xb] = param_2[5];\n      param_1[0xc] = param_2[6];\n      param_1[0xd] = param_2[7];\n      param_1[0xe] = 0;\n      param_1[0xf] = 0;\n      param_1[0x14] = 0;\n      return 0;\n    }" ({ "{") (expression_statement "*param_1 = *param_2 & 0x3ffffff;" (assignment_expression "*param_1 = *param_2 & 0x3ffffff" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "*param_2 & 0x3ffffff" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (& "&") (number_literal "0x3ffffff"))) (; ";")) (expression_statement "param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;" (assignment_expression "param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "*(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03" (binary_expression "*(uint *)((long)param_2 + 3) >> 2" (pointer_expression "*(uint *)((long)param_2 + 3)" (* "*") (cast_expression "(uint *)((long)param_2 + 3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 3)" (( "(") (binary_expression "(long)param_2 + 3" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "3")) () ")")))) (>> ">>") (number_literal "2")) (& "&") (number_literal "0x3ffff03"))) (; ";")) (expression_statement "param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;" (assignment_expression "param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "*(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff" (binary_expression "*(uint *)((long)param_2 + 6) >> 4" (pointer_expression "*(uint *)((long)param_2 + 6)" (* "*") (cast_expression "(uint *)((long)param_2 + 6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 6)" (( "(") (binary_expression "(long)param_2 + 6" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "6")) () ")")))) (>> ">>") (number_literal "4")) (& "&") (number_literal "0x3ffc0ff"))) (; ";")) (expression_statement "param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;" (assignment_expression "param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (binary_expression "*(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff" (binary_expression "*(uint *)((long)param_2 + 9) >> 6" (pointer_expression "*(uint *)((long)param_2 + 9)" (* "*") (cast_expression "(uint *)((long)param_2 + 9)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 9)" (( "(") (binary_expression "(long)param_2 + 9" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "9")) () ")")))) (>> ">>") (number_literal "6")) (& "&") (number_literal "0x3f03fff"))) (; ";")) (expression_statement "param_1[4] = param_2[3] >> 8 & 0xfffff;" (assignment_expression "param_1[4] = param_2[3] >> 8 & 0xfffff" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "param_2[3] >> 8 & 0xfffff" (binary_expression "param_2[3] >> 8" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (>> ">>") (number_literal "8")) (& "&") (number_literal "0xfffff"))) (; ";")) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[7] = 0;" (assignment_expression "param_1[7] = 0" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[9] = 0;" (assignment_expression "param_1[9] = 0" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[10] = param_2[4];" (assignment_expression "param_1[10] = param_2[4]" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (= "=") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "param_1[0xb] = param_2[5];" (assignment_expression "param_1[0xb] = param_2[5]" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (= "=") (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "param_1[0xc] = param_2[6];" (assignment_expression "param_1[0xc] = param_2[6]" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (= "=") (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "param_1[0xd] = param_2[7];" (assignment_expression "param_1[0xd] = param_2[7]" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "param_1[0xe] = 0;" (assignment_expression "param_1[0xe] = 0" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0xf] = 0;" (assignment_expression "param_1[0xf] = 0" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x14] = 0;" (assignment_expression "param_1[0x14] = 0" (subscript_expression "param_1[0x14]" (identifier "param_1") ([ "[") (number_literal "0x14") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);" (call_expression "crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" (identifier "crypt_argchk") (argument_list "("keylen == 32","src/mac/poly1305/poly1305.c",0x5d)" (( "(") (string_literal ""keylen == 32"" (" """) (string_content "keylen == 32") (" """)) (, ",") (string_literal ""src/mac/poly1305/poly1305.c"" (" """) (string_content "src/mac/poly1305/poly1305.c") (" """)) (, ",") (number_literal "0x5d") () ")"))) (; ";")) (} "}"))) (expression_statement "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);" (call_expression "crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" (identifier "crypt_argchk") (argument_list "("key != NULL","src/mac/poly1305/poly1305.c",0x5c)" (( "(") (string_literal ""key != NULL"" (" """) (string_content "key != NULL") (" """)) (, ",") (string_literal ""src/mac/poly1305/poly1305.c"" (" """) (string_content "src/mac/poly1305/poly1305.c") (" """)) (, ",") (number_literal "0x5c") () ")"))) (; ";")) (} "}")))

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

{
  if (var_1 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("st != NULL","src/mac/poly1305/poly1305.c",0x5b);
  }
  if (var_3 != (type_2 *)0x0) {
    if (var_4 == 0x20) {
      var_1->r[0] = *(type_4 *)var_3 & 0x3ffffff;
      var_1->r[1] = *(type_4 *)(var_3 + 3) >> 2 & 0x3ffff03;
      var_1->r[2] = *(type_4 *)(var_3 + 6) >> 4 & 0x3ffc0ff;
      var_1->r[3] = *(type_4 *)(var_3 + 9) >> 6 & 0x3f03fff;
      var_1->r[4] = *(type_4 *)(var_3 + 0xc) >> 8 & 0xfffff;
      var_1->h[0] = 0;
      var_1->h[1] = 0;
      var_1->h[2] = 0;
      var_1->h[3] = 0;
      var_1->h[4] = 0;
      var_1->pad[0] = *(type_5 *)(var_3 + 0x10);
      var_1->pad[1] = *(type_5 *)(var_3 + 0x14);
      var_1->pad[2] = *(type_5 *)(var_3 + 0x18);
      var_1->pad[3] = *(type_5 *)(var_3 + 0x1c);
      var_1->leftover = 0;
      var_1->final = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    var_2("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);
  }
                    /* WARNING: Subroutine does not return */
  var_2("key != NULL","src/mac/poly1305/poly1305.c",0x5c);
}


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

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

{
  if (param_1 == (uint *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("st != NULL","src/mac/poly1305/poly1305.c",0x5b);
  }
  if (param_2 != (uint *)0x0) {
    if (param_3 == 0x20) {
      *param_1 = *param_2 & 0x3ffffff;
      param_1[1] = *(uint *)((long)param_2 + 3) >> 2 & 0x3ffff03;
      param_1[2] = *(uint *)((long)param_2 + 6) >> 4 & 0x3ffc0ff;
      param_1[3] = *(uint *)((long)param_2 + 9) >> 6 & 0x3f03fff;
      param_1[4] = param_2[3] >> 8 & 0xfffff;
      param_1[5] = 0;
      param_1[6] = 0;
      param_1[7] = 0;
      param_1[8] = 0;
      param_1[9] = 0;
      param_1[10] = param_2[4];
      param_1[0xb] = param_2[5];
      param_1[0xc] = param_2[6];
      param_1[0xd] = param_2[7];
      param_1[0xe] = 0;
      param_1[0xf] = 0;
      param_1[0x14] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    crypt_argchk("keylen == 32","src/mac/poly1305/poly1305.c",0x5d);
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("key != NULL","src/mac/poly1305/poly1305.c",0x5c);
}

