
int lrw_start(int cipher,uchar *IV,uchar *key,int keylen,uchar *tweak,int num_rounds,
             symmetric_LRW *lrw)

{
  byte bVar1;
  long lVar2;
  undefined8 uVar3;
  int iVar4;
  undefined *puVar5;
  int iVar6;
  symmetric_LRW *psVar7;
  uchar uVar8;
  uchar (*c) [256] [16];
  symmetric_LRW *psVar9;
  long in_FS_OFFSET;
  uchar B [16];
  
  lVar2 = *(long *)(in_FS_OFFSET + 0x28);
  if (IV == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);
  }
  if (key == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);
  }
  if (tweak == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);
  }
  if (lrw != (symmetric_LRW *)0x0) {
    iVar6 = cipher_is_valid(cipher);
    if ((iVar6 == 0) &&
       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))
    {
      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))
                        (key,keylen,num_rounds,&lrw->key);
      if (iVar6 == 0) {
        lrw->cipher = cipher;
        uVar3 = *(undefined8 *)(tweak + 8);
        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;
        *(undefined8 *)(lrw->tweak + 8) = uVar3;
        zeromem(B,0x10);
        c = lrw->PC;
        iVar6 = 0;
        do {
          uVar8 = (uchar)iVar6;
          B[0] = uVar8;
          gcm_gf_mult(tweak,B,(uchar *)c);
          B[0] = uVar8 + '\x01';
          gcm_gf_mult(tweak,B,(*c)[1]);
          B[0] = uVar8 + '\x02';
          gcm_gf_mult(tweak,B,(*c)[2]);
          B[0] = uVar8 + '\x03';
          gcm_gf_mult(tweak,B,(*c)[3]);
          B[0] = uVar8 + '\x04';
          gcm_gf_mult(tweak,B,(*c)[4]);
          B[0] = uVar8 + '\x05';
          gcm_gf_mult(tweak,B,(*c)[5]);
          B[0] = uVar8 + '\x06';
          gcm_gf_mult(tweak,B,(*c)[6]);
          B[0] = uVar8 + '\a';
          gcm_gf_mult(tweak,B,(*c)[7]);
          puVar5 = PTR_gcm_shift_table_001dffd8;
          iVar6 = iVar6 + 8;
          c = (uchar (*) [256] [16])(*c + 8);
        } while (iVar6 != 0x100);
        psVar7 = (symmetric_LRW *)(lrw->PC + 1);
        do {
          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);
          do {
            bVar1 = psVar9->IV[0xb];
            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];
            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];
            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];
            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];
            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];
            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];
            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];
            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];
            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];
            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];
            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];
            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)
            ;
            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)
            ;
            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)
            ;
            iVar4 = psVar9->cipher;
            iVar6 = (uint)bVar1 * 2;
            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];
            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];
            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);
          } while (psVar7 != psVar9);
          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);
        } while (lrw + 1 != psVar7);
        iVar6 = lrw_setiv(IV,0x10,lrw);
      }
    }
    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {
      return iVar6;
    }
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);
}



int lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,
             undefined4 param_6,int *param_7)

{
  undefined8 uVar1;
  undefined *puVar2;
  int iVar3;
  byte *pbVar4;
  char cVar5;
  int *piVar6;
  byte *pbVar7;
  long in_FS_OFFSET;
  char local_58 [24];
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);
  }
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);
  }
  if (param_5 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);
  }
  if (param_7 != (int *)0x0) {
    iVar3 = cipher_is_valid();
    if (iVar3 == 0) {
      iVar3 = 10;
      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {
        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))
                          (param_3,param_4,param_6,param_7 + 0xe);
        if (iVar3 == 0) {
          *param_7 = param_1;
          uVar1 = param_5[1];
          *(undefined8 *)(param_7 + 5) = *param_5;
          *(undefined8 *)(param_7 + 7) = uVar1;
          zeromem(local_58,0x10);
          piVar6 = param_7 + 0x436;
          iVar3 = 0;
          do {
            cVar5 = (char)iVar3;
            local_58[0] = cVar5;
            gcm_gf_mult(param_5,local_58,piVar6);
            local_58[0] = cVar5 + '\x01';
            gcm_gf_mult(param_5,local_58,piVar6 + 4);
            local_58[0] = cVar5 + '\x02';
            gcm_gf_mult(param_5,local_58,piVar6 + 8);
            local_58[0] = cVar5 + '\x03';
            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);
            local_58[0] = cVar5 + '\x04';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);
            local_58[0] = cVar5 + '\x05';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);
            local_58[0] = cVar5 + '\x06';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);
            local_58[0] = cVar5 + '\a';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);
            puVar2 = PTR_gcm_shift_table_001dffd8;
            iVar3 = iVar3 + 8;
            piVar6 = piVar6 + 0x20;
          } while (iVar3 != 0x100);
          pbVar4 = (byte *)(param_7 + 0x836);
          do {
            pbVar7 = pbVar4 + -0x1000;
            do {
              pbVar7[0x100f] = pbVar7[0xe];
              pbVar7[0x100e] = pbVar7[0xd];
              pbVar7[0x100d] = pbVar7[0xc];
              pbVar7[0x100c] = pbVar7[0xb];
              pbVar7[0x100b] = pbVar7[10];
              pbVar7[0x100a] = pbVar7[9];
              pbVar7[0x1009] = pbVar7[8];
              pbVar7[0x1008] = pbVar7[7];
              pbVar7[0x1007] = pbVar7[6];
              pbVar7[0x1006] = pbVar7[5];
              pbVar7[0x1005] = pbVar7[4];
              pbVar7[0x1004] = pbVar7[3];
              pbVar7[0x1003] = pbVar7[2];
              pbVar7[0x1002] = pbVar7[1];
              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];
              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];
              pbVar7 = pbVar7 + 0x10;
            } while (pbVar4 != pbVar7);
            pbVar4 = pbVar4 + 0x1000;
          } while ((byte *)(param_7 + 0x4436) != pbVar4);
          iVar3 = lrw_setiv(param_2,0x10,param_7);
        }
      }
    }
    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
      return iVar3;
    }
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x38
MOV dword ptr [RSP + 0x8],ECX
MOV dword ptr [RSP + 0xc],R9D
MOV R13,qword ptr [RSP + 0x70]
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x28],RAX
XOR EAX,EAX
TEST RSI,RSI
JZ 0x0016dc1f
MOV EBP,EDI
MOV R15,RSI
MOV R14,RDX
MOV R12,R8
TEST RDX,RDX
JZ 0x0016dc37
TEST R8,R8
JZ 0x0016dc4f
TEST R13,R13
JZ 0x0016dc67
CALL 0x00113d90
MOV EBX,EAX
TEST EAX,EAX
JNZ 0x0016dbfa
MOVSXD RAX,EBP
LEA RDX,[RAX + RAX*0x2]
SHL RDX,0x6
ADD RDX,qword ptr [0x001dfee8]
MOV EBX,0xa
CMP dword ptr [RDX + 0x14],0x10
JNZ 0x0016dbfa
LEA RCX,[R13 + 0x38]
MOVSXD RBX,EBP
LEA RAX,[RBX + RBX*0x2]
SHL RAX,0x6
ADD RAX,qword ptr [0x001dfee8]
MOV EDX,dword ptr [RSP + 0xc]
MOV ESI,dword ptr [RSP + 0x8]
MOV RDI,R14
CALL qword ptr [RAX + 0x20]
MOV EBX,EAX
TEST EAX,EAX
JZ 0x0016dc7f
MOV EAX,EBX
MOV RBX,qword ptr [RSP + 0x28]
XOR RBX,qword ptr FS:[0x28]
JNZ 0x0016deb6
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDX,0x2a
LEA RSI,[0x1c393d]
LEA RDI,[0x1af847]
CALL 0x00114260
MOV EDX,0x2b
LEA RSI,[0x1c393d]
LEA RDI,[0x1c8f9d]
CALL 0x00114260
MOV EDX,0x2c
LEA RSI,[0x1c393d]
LEA RDI,[0x1c3957]
CALL 0x00114260
MOV EDX,0x2d
LEA RSI,[0x1c393d]
LEA RDI,[0x1c38ac]
CALL 0x00114260
MOV dword ptr [R13],EBP
MOVDQU XMM0,xmmword ptr [R12]
MOVUPS xmmword ptr [R13 + 0x14],XMM0
LEA RDI,[RSP + 0x10]
MOV ESI,0x10
CALL 0x00114df0
LEA RBP,[R13 + 0x10d8]
LEA R14,[RSP + 0x10]
MOV byte ptr [RSP + 0x10],BL
MOV RDX,RBP
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
ADD EBX,0x1
ADD RBP,0x10
MOV RDX,RBP
MOV byte ptr [RSP + 0x10],BL
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
LEA ESI,[RBX + 0x1]
LEA RDX,[RBP + 0x10]
MOV byte ptr [RSP + 0x10],SIL
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
LEA EDI,[RBX + 0x2]
LEA RDX,[RBP + 0x20]
MOV byte ptr [RSP + 0x10],DIL
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
LEA R8D,[RBX + 0x3]
LEA RDX,[RBP + 0x30]
MOV byte ptr [RSP + 0x10],R8B
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
LEA R9D,[RBX + 0x4]
LEA RDX,[RBP + 0x40]
MOV byte ptr [RSP + 0x10],R9B
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
LEA R10D,[RBX + 0x5]
LEA RDX,[RBP + 0x50]
MOV byte ptr [RSP + 0x10],R10B
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
LEA R11D,[RBX + 0x6]
LEA RDX,[RBP + 0x60]
MOV byte ptr [RSP + 0x10],R11B
MOV RSI,R14
MOV RDI,R12
CALL 0x00113e10
ADD EBX,0x7
ADD RBP,0x70
CMP EBX,0x100
JNZ 0x0016dca9
LEA RAX,[R13 + 0x20d8]
LEA RBP,[R13 + 0x110d8]
MOV RBX,qword ptr [0x001dffd8]
LEA R12,[RAX + -0x1000]
MOVZX EDX,byte ptr [R12 + 0xf]
MOVZX R14D,byte ptr [R12 + 0xe]
MOV byte ptr [R12 + 0x100f],R14B
MOVZX ECX,byte ptr [R12 + 0xd]
MOV byte ptr [R12 + 0x100e],CL
MOVZX ESI,byte ptr [R12 + 0xc]
MOV byte ptr [R12 + 0x100d],SIL
MOVZX EDI,byte ptr [R12 + 0xb]
MOV byte ptr [R12 + 0x100c],DIL
MOVZX R8D,byte ptr [R12 + 0xa]
MOV byte ptr [R12 + 0x100b],R8B
MOVZX R9D,byte ptr [R12 + 0x9]
MOV byte ptr [R12 + 0x100a],R9B
MOVZX R10D,byte ptr [R12 + 0x8]
MOV byte ptr [R12 + 0x1009],R10B
MOVZX R11D,byte ptr [R12 + 0x7]
MOV byte ptr [R12 + 0x1008],R11B
MOVZX R14D,byte ptr [R12 + 0x6]
MOV byte ptr [R12 + 0x1007],R14B
MOVZX ECX,byte ptr [R12 + 0x5]
MOV byte ptr [R12 + 0x1006],CL
MOVZX ESI,byte ptr [R12 + 0x4]
MOV byte ptr [R12 + 0x1005],SIL
MOVZX EDI,byte ptr [R12 + 0x3]
MOV byte ptr [R12 + 0x1004],DIL
MOVZX R8D,byte ptr [R12 + 0x2]
MOV byte ptr [R12 + 0x1003],R8B
MOVZX R9D,byte ptr [R12 + 0x1]
MOV byte ptr [R12 + 0x1002],R9B
MOVZX ECX,byte ptr [R12]
ADD EDX,EDX
MOVSXD R10,EDX
MOVZX R11D,byte ptr [RBX + R10*0x1]
MOV byte ptr [R12 + 0x1000],R11B
ADD EDX,0x1
MOVSXD RDX,EDX
XOR CL,byte ptr [RBX + RDX*0x1]
MOV byte ptr [R12 + 0x1001],CL
ADD R12,0x10
CMP RAX,R12
JNZ 0x0016dd91
ADD RAX,0x1000
CMP RBP,RAX
JNZ 0x0016dd8a
MOV RDX,R13
MOV ESI,0x10
MOV RDI,R15
CALL 0x00113860
MOV EBX,EAX
JMP 0x0016dbfa
CALL 0x00113870
(translation_unit "int lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)\n\n{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}\n\n" (function_definition "int lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)\n\n{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" primitive_type (function_declarator "lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)" identifier (parameter_list "(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined8 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int *param_7" primitive_type (pointer_declarator "*param_7" * identifier)) ))) (compound_statement "{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_58 [24];" primitive_type (array_declarator "local_58 [24]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" { comment (expression_statement "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);" (call_expression "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" identifier (argument_list "("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" ( (string_literal ""IV != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == 0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);" (call_expression "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" identifier (argument_list "("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_5 == (undefined8 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" if (parenthesized_expression "(param_5 == (undefined8 *)0x0)" ( (binary_expression "param_5 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" { comment (expression_statement "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);" (call_expression "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" identifier (argument_list "("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" ( (string_literal ""tweak != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(param_7 != (int *)0x0)" ( (binary_expression "param_7 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { (expression_statement "iVar3 = cipher_is_valid();" (assignment_expression "iVar3 = cipher_is_valid()" identifier = (call_expression "cipher_is_valid()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }" { (expression_statement "iVar3 = 10;" (assignment_expression "iVar3 = 10" identifier = number_literal) ;) (if_statement "if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }" if (parenthesized_expression "(*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10)" ( (binary_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10" (pointer_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" * (cast_expression "(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" ( (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0" identifier + (binary_expression "(long)param_1 * 0xc0" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) )))) == number_literal) )) (compound_statement "{\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }" { (expression_statement "iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);" (assignment_expression "iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe)" identifier = (call_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" * (cast_expression "(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" ( (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0" identifier + (binary_expression "(long)param_1 * 0xc0" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) ))))) )) (argument_list "(param_3,param_4,param_6,param_7 + 0xe)" ( identifier , identifier , identifier , (binary_expression "param_7 + 0xe" identifier + number_literal) )))) ;) (if_statement "if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }" { (expression_statement "*param_7 = param_1;" (assignment_expression "*param_7 = param_1" (pointer_expression "*param_7" * identifier) = identifier) ;) (expression_statement "uVar1 = param_5[1];" (assignment_expression "uVar1 = param_5[1]" identifier = (subscript_expression "param_5[1]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_7 + 5) = *param_5;" (assignment_expression "*(undefined8 *)(param_7 + 5) = *param_5" (pointer_expression "*(undefined8 *)(param_7 + 5)" * (cast_expression "(undefined8 *)(param_7 + 5)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 5)" ( (binary_expression "param_7 + 5" identifier + number_literal) )))) = (pointer_expression "*param_5" * identifier)) ;) (expression_statement "*(undefined8 *)(param_7 + 7) = uVar1;" (assignment_expression "*(undefined8 *)(param_7 + 7) = uVar1" (pointer_expression "*(undefined8 *)(param_7 + 7)" * (cast_expression "(undefined8 *)(param_7 + 7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 7)" ( (binary_expression "param_7 + 7" identifier + number_literal) )))) = identifier) ;) (expression_statement "zeromem(local_58,0x10);" (call_expression "zeromem(local_58,0x10)" identifier (argument_list "(local_58,0x10)" ( identifier , number_literal ))) ;) (expression_statement "piVar6 = param_7 + 0x436;" (assignment_expression "piVar6 = param_7 + 0x436" identifier = (binary_expression "param_7 + 0x436" identifier + number_literal)) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);" do (compound_statement "{\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          }" { (expression_statement "cVar5 = (char)iVar3;" (assignment_expression "cVar5 = (char)iVar3" identifier = (cast_expression "(char)iVar3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "local_58[0] = cVar5;" (assignment_expression "local_58[0] = cVar5" (subscript_expression "local_58[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6)" identifier (argument_list "(param_5,local_58,piVar6)" ( identifier , identifier , identifier ))) ;) (expression_statement "local_58[0] = cVar5 + '\x01';" (assignment_expression "local_58[0] = cVar5 + '\x01'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x01'" identifier + (char_literal "'\x01'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 4);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 4)" identifier (argument_list "(param_5,local_58,piVar6 + 4)" ( identifier , identifier , (binary_expression "piVar6 + 4" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x02';" (assignment_expression "local_58[0] = cVar5 + '\x02'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x02'" identifier + (char_literal "'\x02'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 8);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 8)" identifier (argument_list "(param_5,local_58,piVar6 + 8)" ( identifier , identifier , (binary_expression "piVar6 + 8" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x03';" (assignment_expression "local_58[0] = cVar5 + '\x03'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x03'" identifier + (char_literal "'\x03'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0xc);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0xc)" identifier (argument_list "(param_5,local_58,piVar6 + 0xc)" ( identifier , identifier , (binary_expression "piVar6 + 0xc" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x04';" (assignment_expression "local_58[0] = cVar5 + '\x04'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x04'" identifier + (char_literal "'\x04'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x10);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x10)" identifier (argument_list "(param_5,local_58,piVar6 + 0x10)" ( identifier , identifier , (binary_expression "piVar6 + 0x10" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x05';" (assignment_expression "local_58[0] = cVar5 + '\x05'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x05'" identifier + (char_literal "'\x05'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x14);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x14)" identifier (argument_list "(param_5,local_58,piVar6 + 0x14)" ( identifier , identifier , (binary_expression "piVar6 + 0x14" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x06';" (assignment_expression "local_58[0] = cVar5 + '\x06'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x06'" identifier + (char_literal "'\x06'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x18);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x18)" identifier (argument_list "(param_5,local_58,piVar6 + 0x18)" ( identifier , identifier , (binary_expression "piVar6 + 0x18" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\a';" (assignment_expression "local_58[0] = cVar5 + '\a'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\a'" identifier + (char_literal "'\a'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x1c)" identifier (argument_list "(param_5,local_58,piVar6 + 0x1c)" ( identifier , identifier , (binary_expression "piVar6 + 0x1c" identifier + number_literal) ))) ;) (expression_statement "puVar2 = PTR_gcm_shift_table_001dffd8;" (assignment_expression "puVar2 = PTR_gcm_shift_table_001dffd8" identifier = identifier) ;) (expression_statement "iVar3 = iVar3 + 8;" (assignment_expression "iVar3 = iVar3 + 8" identifier = (binary_expression "iVar3 + 8" identifier + number_literal)) ;) (expression_statement "piVar6 = piVar6 + 0x20;" (assignment_expression "piVar6 = piVar6 + 0x20" identifier = (binary_expression "piVar6 + 0x20" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 != 0x100)" ( (binary_expression "iVar3 != 0x100" identifier != number_literal) )) ;) (expression_statement "pbVar4 = (byte *)(param_7 + 0x836);" (assignment_expression "pbVar4 = (byte *)(param_7 + 0x836)" identifier = (cast_expression "(byte *)(param_7 + 0x836)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x836)" ( (binary_expression "param_7 + 0x836" identifier + number_literal) )))) ;) (do_statement "do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);" do (compound_statement "{\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          }" { (expression_statement "pbVar7 = pbVar4 + -0x1000;" (assignment_expression "pbVar7 = pbVar4 + -0x1000" identifier = (binary_expression "pbVar4 + -0x1000" identifier + number_literal)) ;) (do_statement "do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);" do (compound_statement "{\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            }" { (expression_statement "pbVar7[0x100f] = pbVar7[0xe];" (assignment_expression "pbVar7[0x100f] = pbVar7[0xe]" (subscript_expression "pbVar7[0x100f]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xe]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100e] = pbVar7[0xd];" (assignment_expression "pbVar7[0x100e] = pbVar7[0xd]" (subscript_expression "pbVar7[0x100e]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xd]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100d] = pbVar7[0xc];" (assignment_expression "pbVar7[0x100d] = pbVar7[0xc]" (subscript_expression "pbVar7[0x100d]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xc]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100c] = pbVar7[0xb];" (assignment_expression "pbVar7[0x100c] = pbVar7[0xb]" (subscript_expression "pbVar7[0x100c]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xb]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100b] = pbVar7[10];" (assignment_expression "pbVar7[0x100b] = pbVar7[10]" (subscript_expression "pbVar7[0x100b]" identifier [ number_literal ]) = (subscript_expression "pbVar7[10]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100a] = pbVar7[9];" (assignment_expression "pbVar7[0x100a] = pbVar7[9]" (subscript_expression "pbVar7[0x100a]" identifier [ number_literal ]) = (subscript_expression "pbVar7[9]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1009] = pbVar7[8];" (assignment_expression "pbVar7[0x1009] = pbVar7[8]" (subscript_expression "pbVar7[0x1009]" identifier [ number_literal ]) = (subscript_expression "pbVar7[8]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1008] = pbVar7[7];" (assignment_expression "pbVar7[0x1008] = pbVar7[7]" (subscript_expression "pbVar7[0x1008]" identifier [ number_literal ]) = (subscript_expression "pbVar7[7]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1007] = pbVar7[6];" (assignment_expression "pbVar7[0x1007] = pbVar7[6]" (subscript_expression "pbVar7[0x1007]" identifier [ number_literal ]) = (subscript_expression "pbVar7[6]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1006] = pbVar7[5];" (assignment_expression "pbVar7[0x1006] = pbVar7[5]" (subscript_expression "pbVar7[0x1006]" identifier [ number_literal ]) = (subscript_expression "pbVar7[5]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1005] = pbVar7[4];" (assignment_expression "pbVar7[0x1005] = pbVar7[4]" (subscript_expression "pbVar7[0x1005]" identifier [ number_literal ]) = (subscript_expression "pbVar7[4]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1004] = pbVar7[3];" (assignment_expression "pbVar7[0x1004] = pbVar7[3]" (subscript_expression "pbVar7[0x1004]" identifier [ number_literal ]) = (subscript_expression "pbVar7[3]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1003] = pbVar7[2];" (assignment_expression "pbVar7[0x1003] = pbVar7[2]" (subscript_expression "pbVar7[0x1003]" identifier [ number_literal ]) = (subscript_expression "pbVar7[2]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1002] = pbVar7[1];" (assignment_expression "pbVar7[0x1002] = pbVar7[1]" (subscript_expression "pbVar7[0x1002]" identifier [ number_literal ]) = (subscript_expression "pbVar7[1]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];" (assignment_expression "pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)]" (subscript_expression "pbVar7[0x1000]" identifier [ number_literal ]) = (subscript_expression "puVar2[(int)((uint)pbVar7[0xf] * 2)]" identifier [ (cast_expression "(int)((uint)pbVar7[0xf] * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)pbVar7[0xf] * 2)" ( (binary_expression "(uint)pbVar7[0xf] * 2" (cast_expression "(uint)pbVar7[0xf]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar7[0xf]" identifier [ number_literal ])) * number_literal) ))) ])) ;) (expression_statement "pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];" (assignment_expression "pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (subscript_expression "pbVar7[0x1001]" identifier [ number_literal ]) = (binary_expression "*pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (pointer_expression "*pbVar7" * identifier) ^ (subscript_expression "puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" identifier [ (cast_expression "(int)((uint)pbVar7[0xf] * 2 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)pbVar7[0xf] * 2 + 1)" ( (binary_expression "(uint)pbVar7[0xf] * 2 + 1" (binary_expression "(uint)pbVar7[0xf] * 2" (cast_expression "(uint)pbVar7[0xf]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar7[0xf]" identifier [ number_literal ])) * number_literal) + number_literal) ))) ]))) ;) (expression_statement "pbVar7 = pbVar7 + 0x10;" (assignment_expression "pbVar7 = pbVar7 + 0x10" identifier = (binary_expression "pbVar7 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar4 != pbVar7)" ( (binary_expression "pbVar4 != pbVar7" identifier != identifier) )) ;) (expression_statement "pbVar4 = pbVar4 + 0x1000;" (assignment_expression "pbVar4 = pbVar4 + 0x1000" identifier = (binary_expression "pbVar4 + 0x1000" identifier + number_literal)) ;) }) while (parenthesized_expression "((byte *)(param_7 + 0x4436) != pbVar4)" ( (binary_expression "(byte *)(param_7 + 0x4436) != pbVar4" (cast_expression "(byte *)(param_7 + 0x4436)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x4436)" ( (binary_expression "param_7 + 0x4436" identifier + number_literal) ))) != identifier) )) ;) (expression_statement "iVar3 = lrw_setiv(param_2,0x10,param_7);" (assignment_expression "iVar3 = lrw_setiv(param_2,0x10,param_7)" identifier = (call_expression "lrw_setiv(param_2,0x10,param_7)" identifier (argument_list "(param_2,0x10,param_7)" ( identifier , number_literal , identifier )))) ;) })) })) })) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      return iVar3;\n    }" { (return_statement "return iVar3;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);" (call_expression "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" identifier (argument_list "("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" ( (string_literal ""lrw != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "int lrw_start(int cipher,uchar *IV,uchar *key,int keylen,uchar *tweak,int num_rounds,\n             symmetric_LRW *lrw)\n\n{\n  byte bVar1;\n  long lVar2;\n  undefined8 uVar3;\n  int iVar4;\n  undefined *puVar5;\n  int iVar6;\n  symmetric_LRW *psVar7;\n  uchar uVar8;\n  uchar (*c) [256] [16];\n  symmetric_LRW *psVar9;\n  long in_FS_OFFSET;\n  uchar B [16];\n  \n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  if (IV == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (tweak == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (lrw != (symmetric_LRW *)0x0) {\n    iVar6 = cipher_is_valid(cipher);\n    if ((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))\n    {\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}\n\n" (function_definition "int lrw_start(int cipher,uchar *IV,uchar *key,int keylen,uchar *tweak,int num_rounds,\n             symmetric_LRW *lrw)\n\n{\n  byte bVar1;\n  long lVar2;\n  undefined8 uVar3;\n  int iVar4;\n  undefined *puVar5;\n  int iVar6;\n  symmetric_LRW *psVar7;\n  uchar uVar8;\n  uchar (*c) [256] [16];\n  symmetric_LRW *psVar9;\n  long in_FS_OFFSET;\n  uchar B [16];\n  \n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  if (IV == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (tweak == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (lrw != (symmetric_LRW *)0x0) {\n    iVar6 = cipher_is_valid(cipher);\n    if ((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))\n    {\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" primitive_type (function_declarator "lrw_start(int cipher,uchar *IV,uchar *key,int keylen,uchar *tweak,int num_rounds,\n             symmetric_LRW *lrw)" identifier (parameter_list "(int cipher,uchar *IV,uchar *key,int keylen,uchar *tweak,int num_rounds,\n             symmetric_LRW *lrw)" ( (parameter_declaration "int cipher" primitive_type identifier) , (parameter_declaration "uchar *IV" type_identifier (pointer_declarator "*IV" * identifier)) , (parameter_declaration "uchar *key" type_identifier (pointer_declarator "*key" * identifier)) , (parameter_declaration "int keylen" primitive_type identifier) , (parameter_declaration "uchar *tweak" type_identifier (pointer_declarator "*tweak" * identifier)) , (parameter_declaration "int num_rounds" primitive_type identifier) , (parameter_declaration "symmetric_LRW *lrw" type_identifier (pointer_declarator "*lrw" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  undefined8 uVar3;\n  int iVar4;\n  undefined *puVar5;\n  int iVar6;\n  symmetric_LRW *psVar7;\n  uchar uVar8;\n  uchar (*c) [256] [16];\n  symmetric_LRW *psVar9;\n  long in_FS_OFFSET;\n  uchar B [16];\n  \n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  if (IV == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (tweak == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (lrw != (symmetric_LRW *)0x0) {\n    iVar6 = cipher_is_valid(cipher);\n    if ((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))\n    {\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "symmetric_LRW *psVar7;" type_identifier (pointer_declarator "*psVar7" * identifier) ;) (declaration "uchar uVar8;" type_identifier identifier ;) (expression_statement "uchar (*c) [256] [16];" (subscript_expression "uchar (*c) [256] [16]" (subscript_expression "uchar (*c) [256]" (call_expression "uchar (*c)" identifier (argument_list "(*c)" ( (pointer_expression "*c" * identifier) ))) [ number_literal ]) [ number_literal ]) ;) (declaration "symmetric_LRW *psVar9;" type_identifier (pointer_declarator "*psVar9" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "uchar B [16];" type_identifier (array_declarator "B [16]" identifier [ number_literal ]) ;) (expression_statement "lVar2 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar2 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (IV == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" if (parenthesized_expression "(IV == (uchar *)0x0)" ( (binary_expression "IV == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" { comment (expression_statement "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);" (call_expression "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" identifier (argument_list "("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" ( (string_literal ""IV != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (key == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\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                    /* WARNING: Subroutine does not return */\n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" { comment (expression_statement "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);" (call_expression "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" identifier (argument_list "("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (tweak == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" if (parenthesized_expression "(tweak == (uchar *)0x0)" ( (binary_expression "tweak == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" { comment (expression_statement "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);" (call_expression "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" identifier (argument_list "("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" ( (string_literal ""tweak != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (lrw != (symmetric_LRW *)0x0) {\n    iVar6 = cipher_is_valid(cipher);\n    if ((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))\n    {\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(lrw != (symmetric_LRW *)0x0)" ( (binary_expression "lrw != (symmetric_LRW *)0x0" identifier != (cast_expression "(symmetric_LRW *)0x0" ( (type_descriptor "symmetric_LRW *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar6 = cipher_is_valid(cipher);\n    if ((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))\n    {\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { (expression_statement "iVar6 = cipher_is_valid(cipher);" (assignment_expression "iVar6 = cipher_is_valid(cipher)" identifier = (call_expression "cipher_is_valid(cipher)" identifier (argument_list "(cipher)" ( identifier )))) ;) (if_statement "if ((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))\n    {\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }" if (parenthesized_expression "((iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10))" ( (binary_expression "(iVar6 == 0) &&\n       (iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10)" (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) && (parenthesized_expression "(iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10)" ( (comma_expression "iVar6 = 10, *(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10" (assignment_expression "iVar6 = 10" identifier = number_literal) , (binary_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14) == 0x10" (pointer_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14)" * (cast_expression "(int *)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14)" ( (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0" identifier + (binary_expression "(long)cipher * 0xc0" (cast_expression "(long)cipher" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) )))) == number_literal)) ))) )) (compound_statement "{\n      iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);\n      if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }\n    }" { (expression_statement "iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key);" (assignment_expression "iVar6 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key)" identifier = (call_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))\n                        (key,keylen,num_rounds,&lrw->key)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20)" * (pointer_expression "*(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20)" * (cast_expression "(code **)(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20)" ( (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)cipher * 0xc0" identifier + (binary_expression "(long)cipher * 0xc0" (cast_expression "(long)cipher" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) ))))) )) (argument_list "(key,keylen,num_rounds,&lrw->key)" ( identifier , identifier , identifier , (pointer_expression "&lrw->key" & (field_expression "lrw->key" identifier -> field_identifier)) )))) ;) (if_statement "if (iVar6 == 0) {\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        lrw->cipher = cipher;\n        uVar3 = *(undefined8 *)(tweak + 8);\n        *(undefined8 *)lrw->tweak = *(undefined8 *)tweak;\n        *(undefined8 *)(lrw->tweak + 8) = uVar3;\n        zeromem(B,0x10);\n        c = lrw->PC;\n        iVar6 = 0;\n        do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);\n        psVar7 = (symmetric_LRW *)(lrw->PC + 1);\n        do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);\n        iVar6 = lrw_setiv(IV,0x10,lrw);\n      }" { (expression_statement "lrw->cipher = cipher;" (assignment_expression "lrw->cipher = cipher" (field_expression "lrw->cipher" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar3 = *(undefined8 *)(tweak + 8);" (assignment_expression "uVar3 = *(undefined8 *)(tweak + 8)" identifier = (pointer_expression "*(undefined8 *)(tweak + 8)" * (cast_expression "(undefined8 *)(tweak + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(tweak + 8)" ( (binary_expression "tweak + 8" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)lrw->tweak = *(undefined8 *)tweak;" (assignment_expression "*(undefined8 *)lrw->tweak = *(undefined8 *)tweak" (pointer_expression "*(undefined8 *)lrw->tweak" * (cast_expression "(undefined8 *)lrw->tweak" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "lrw->tweak" identifier -> field_identifier))) = (pointer_expression "*(undefined8 *)tweak" * (cast_expression "(undefined8 *)tweak" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined8 *)(lrw->tweak + 8) = uVar3;" (assignment_expression "*(undefined8 *)(lrw->tweak + 8) = uVar3" (pointer_expression "*(undefined8 *)(lrw->tweak + 8)" * (cast_expression "(undefined8 *)(lrw->tweak + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lrw->tweak + 8)" ( (binary_expression "lrw->tweak + 8" (field_expression "lrw->tweak" identifier -> field_identifier) + number_literal) )))) = identifier) ;) (expression_statement "zeromem(B,0x10);" (call_expression "zeromem(B,0x10)" identifier (argument_list "(B,0x10)" ( identifier , number_literal ))) ;) (expression_statement "c = lrw->PC;" (assignment_expression "c = lrw->PC" identifier = (field_expression "lrw->PC" identifier -> field_identifier)) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        } while (iVar6 != 0x100);" do (compound_statement "{\n          uVar8 = (uchar)iVar6;\n          B[0] = uVar8;\n          gcm_gf_mult(tweak,B,(uchar *)c);\n          B[0] = uVar8 + '\x01';\n          gcm_gf_mult(tweak,B,(*c)[1]);\n          B[0] = uVar8 + '\x02';\n          gcm_gf_mult(tweak,B,(*c)[2]);\n          B[0] = uVar8 + '\x03';\n          gcm_gf_mult(tweak,B,(*c)[3]);\n          B[0] = uVar8 + '\x04';\n          gcm_gf_mult(tweak,B,(*c)[4]);\n          B[0] = uVar8 + '\x05';\n          gcm_gf_mult(tweak,B,(*c)[5]);\n          B[0] = uVar8 + '\x06';\n          gcm_gf_mult(tweak,B,(*c)[6]);\n          B[0] = uVar8 + '\a';\n          gcm_gf_mult(tweak,B,(*c)[7]);\n          puVar5 = PTR_gcm_shift_table_001dffd8;\n          iVar6 = iVar6 + 8;\n          c = (uchar (*) [256] [16])(*c + 8);\n        }" { (expression_statement "uVar8 = (uchar)iVar6;" (assignment_expression "uVar8 = (uchar)iVar6" identifier = (cast_expression "(uchar)iVar6" ( (type_descriptor "uchar" type_identifier) ) identifier)) ;) (expression_statement "B[0] = uVar8;" (assignment_expression "B[0] = uVar8" (subscript_expression "B[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "gcm_gf_mult(tweak,B,(uchar *)c);" (call_expression "gcm_gf_mult(tweak,B,(uchar *)c)" identifier (argument_list "(tweak,B,(uchar *)c)" ( identifier , identifier , (cast_expression "(uchar *)c" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "B[0] = uVar8 + '\x01';" (assignment_expression "B[0] = uVar8 + '\x01'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\x01'" identifier + (char_literal "'\x01'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[1]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[1])" identifier (argument_list "(tweak,B,(*c)[1])" ( identifier , identifier , (subscript_expression "(*c)[1]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "B[0] = uVar8 + '\x02';" (assignment_expression "B[0] = uVar8 + '\x02'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\x02'" identifier + (char_literal "'\x02'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[2]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[2])" identifier (argument_list "(tweak,B,(*c)[2])" ( identifier , identifier , (subscript_expression "(*c)[2]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "B[0] = uVar8 + '\x03';" (assignment_expression "B[0] = uVar8 + '\x03'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\x03'" identifier + (char_literal "'\x03'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[3]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[3])" identifier (argument_list "(tweak,B,(*c)[3])" ( identifier , identifier , (subscript_expression "(*c)[3]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "B[0] = uVar8 + '\x04';" (assignment_expression "B[0] = uVar8 + '\x04'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\x04'" identifier + (char_literal "'\x04'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[4]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[4])" identifier (argument_list "(tweak,B,(*c)[4])" ( identifier , identifier , (subscript_expression "(*c)[4]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "B[0] = uVar8 + '\x05';" (assignment_expression "B[0] = uVar8 + '\x05'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\x05'" identifier + (char_literal "'\x05'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[5]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[5])" identifier (argument_list "(tweak,B,(*c)[5])" ( identifier , identifier , (subscript_expression "(*c)[5]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "B[0] = uVar8 + '\x06';" (assignment_expression "B[0] = uVar8 + '\x06'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\x06'" identifier + (char_literal "'\x06'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[6]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[6])" identifier (argument_list "(tweak,B,(*c)[6])" ( identifier , identifier , (subscript_expression "(*c)[6]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "B[0] = uVar8 + '\a';" (assignment_expression "B[0] = uVar8 + '\a'" (subscript_expression "B[0]" identifier [ number_literal ]) = (binary_expression "uVar8 + '\a'" identifier + (char_literal "'\a'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(tweak,B,(*c)[7]);" (call_expression "gcm_gf_mult(tweak,B,(*c)[7])" identifier (argument_list "(tweak,B,(*c)[7])" ( identifier , identifier , (subscript_expression "(*c)[7]" (parenthesized_expression "(*c)" ( (pointer_expression "*c" * identifier) )) [ number_literal ]) ))) ;) (expression_statement "puVar5 = PTR_gcm_shift_table_001dffd8;" (assignment_expression "puVar5 = PTR_gcm_shift_table_001dffd8" identifier = identifier) ;) (expression_statement "iVar6 = iVar6 + 8;" (assignment_expression "iVar6 = iVar6 + 8" identifier = (binary_expression "iVar6 + 8" identifier + number_literal)) ;) (expression_statement "c = (uchar (*) [256] [16])(*c + 8);" (assignment_expression "c = (uchar (*) [256] [16])(*c + 8)" identifier = (cast_expression "(uchar (*) [256] [16])(*c + 8)" ( (type_descriptor "uchar (*) [256] [16]" type_identifier (abstract_array_declarator "(*) [256] [16]" (abstract_array_declarator "(*) [256]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ]) [ number_literal ])) ) (parenthesized_expression "(*c + 8)" ( (binary_expression "*c + 8" (pointer_expression "*c" * identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(iVar6 != 0x100)" ( (binary_expression "iVar6 != 0x100" identifier != number_literal) )) ;) (expression_statement "psVar7 = (symmetric_LRW *)(lrw->PC + 1);" (assignment_expression "psVar7 = (symmetric_LRW *)(lrw->PC + 1)" identifier = (cast_expression "(symmetric_LRW *)(lrw->PC + 1)" ( (type_descriptor "symmetric_LRW *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lrw->PC + 1)" ( (binary_expression "lrw->PC + 1" (field_expression "lrw->PC" identifier -> field_identifier) + number_literal) )))) ;) (do_statement "do {\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        } while (lrw + 1 != psVar7);" do (compound_statement "{\n          psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);\n          do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);\n          psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);\n        }" { (expression_statement "psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf);" (assignment_expression "psVar9 = (symmetric_LRW *)(psVar7[-1].PC + 0xf)" identifier = (cast_expression "(symmetric_LRW *)(psVar7[-1].PC + 0xf)" ( (type_descriptor "symmetric_LRW *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar7[-1].PC + 0xf)" ( (binary_expression "psVar7[-1].PC + 0xf" (field_expression "psVar7[-1].PC" (subscript_expression "psVar7[-1]" identifier [ number_literal ]) . field_identifier) + number_literal) )))) ;) (do_statement "do {\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          } while (psVar7 != psVar9);" do (compound_statement "{\n            bVar1 = psVar9->IV[0xb];\n            *(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];\n            *(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];\n            *(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];\n            *(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];\n            *(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];\n            *(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];\n            *(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];\n            *(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];\n            *(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];\n            *(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];\n            *(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];\n            *(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;\n            *(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;\n            iVar4 = psVar9->cipher;\n            iVar6 = (uint)bVar1 * 2;\n            *(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];\n            *(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];\n            psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);\n          }" { (expression_statement "bVar1 = psVar9->IV[0xb];" (assignment_expression "bVar1 = psVar9->IV[0xb]" identifier = (subscript_expression "psVar9->IV[0xb]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd7) = psVar9->IV[10]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd7)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd7)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd7)" ( (binary_expression "(long)&psVar9->key + 0xfd7" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[10]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd6) = psVar9->IV[9]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd6)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd6)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd6)" ( (binary_expression "(long)&psVar9->key + 0xfd6" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[9]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd5) = psVar9->IV[8]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd5)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd5)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd5)" ( (binary_expression "(long)&psVar9->key + 0xfd5" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[8]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd4) = psVar9->IV[7]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd4)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd4)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd4)" ( (binary_expression "(long)&psVar9->key + 0xfd4" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[7]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd3) = psVar9->IV[6]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd3)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd3)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd3)" ( (binary_expression "(long)&psVar9->key + 0xfd3" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[6]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd2) = psVar9->IV[5]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd2)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd2)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd2)" ( (binary_expression "(long)&psVar9->key + 0xfd2" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[5]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd1) = psVar9->IV[4]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd1)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd1)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd1)" ( (binary_expression "(long)&psVar9->key + 0xfd1" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[4]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfd0) = psVar9->IV[3]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfd0)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfd0)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfd0)" ( (binary_expression "(long)&psVar9->key + 0xfd0" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[3]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfcf) = psVar9->IV[2]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfcf)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfcf)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfcf)" ( (binary_expression "(long)&psVar9->key + 0xfcf" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[2]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfce) = psVar9->IV[1]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfce)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfce)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfce)" ( (binary_expression "(long)&psVar9->key + 0xfce" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[1]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0];" (assignment_expression "*(uchar *)((long)&psVar9->key + 0xfcd) = psVar9->IV[0]" (pointer_expression "*(uchar *)((long)&psVar9->key + 0xfcd)" * (cast_expression "(uchar *)((long)&psVar9->key + 0xfcd)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfcd)" ( (binary_expression "(long)&psVar9->key + 0xfcd" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (subscript_expression "psVar9->IV[0]" (field_expression "psVar9->IV" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "*(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)\n            ;" (assignment_expression "*(undefined1 *)((long)&psVar9->key + 0xfcc) = *(undefined1 *)((long)&psVar9->cipher + 3)" (pointer_expression "*(undefined1 *)((long)&psVar9->key + 0xfcc)" * (cast_expression "(undefined1 *)((long)&psVar9->key + 0xfcc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfcc)" ( (binary_expression "(long)&psVar9->key + 0xfcc" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (pointer_expression "*(undefined1 *)((long)&psVar9->cipher + 3)" * (cast_expression "(undefined1 *)((long)&psVar9->cipher + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->cipher + 3)" ( (binary_expression "(long)&psVar9->cipher + 3" (cast_expression "(long)&psVar9->cipher" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->cipher" & (field_expression "psVar9->cipher" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)\n            ;" (assignment_expression "*(undefined1 *)((long)&psVar9->key + 0xfcb) = *(undefined1 *)((long)&psVar9->cipher + 2)" (pointer_expression "*(undefined1 *)((long)&psVar9->key + 0xfcb)" * (cast_expression "(undefined1 *)((long)&psVar9->key + 0xfcb)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfcb)" ( (binary_expression "(long)&psVar9->key + 0xfcb" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (pointer_expression "*(undefined1 *)((long)&psVar9->cipher + 2)" * (cast_expression "(undefined1 *)((long)&psVar9->cipher + 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->cipher + 2)" ( (binary_expression "(long)&psVar9->cipher + 2" (cast_expression "(long)&psVar9->cipher" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->cipher" & (field_expression "psVar9->cipher" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)\n            ;" (assignment_expression "*(undefined1 *)((long)&psVar9->key + 0xfca) = *(undefined1 *)((long)&psVar9->cipher + 1)" (pointer_expression "*(undefined1 *)((long)&psVar9->key + 0xfca)" * (cast_expression "(undefined1 *)((long)&psVar9->key + 0xfca)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfca)" ( (binary_expression "(long)&psVar9->key + 0xfca" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (pointer_expression "*(undefined1 *)((long)&psVar9->cipher + 1)" * (cast_expression "(undefined1 *)((long)&psVar9->cipher + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->cipher + 1)" ( (binary_expression "(long)&psVar9->cipher + 1" (cast_expression "(long)&psVar9->cipher" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->cipher" & (field_expression "psVar9->cipher" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "iVar4 = psVar9->cipher;" (assignment_expression "iVar4 = psVar9->cipher" identifier = (field_expression "psVar9->cipher" identifier -> field_identifier)) ;) (expression_statement "iVar6 = (uint)bVar1 * 2;" (assignment_expression "iVar6 = (uint)bVar1 * 2" identifier = (binary_expression "(uint)bVar1 * 2" (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) ;) (expression_statement "*(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6];" (assignment_expression "*(undefined *)((psVar9->key).twofish.S[3] + 0xf2) = puVar5[iVar6]" (pointer_expression "*(undefined *)((psVar9->key).twofish.S[3] + 0xf2)" * (cast_expression "(undefined *)((psVar9->key).twofish.S[3] + 0xf2)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((psVar9->key).twofish.S[3] + 0xf2)" ( (binary_expression "(psVar9->key).twofish.S[3] + 0xf2" (subscript_expression "(psVar9->key).twofish.S[3]" (field_expression "(psVar9->key).twofish.S" (field_expression "(psVar9->key).twofish" (parenthesized_expression "(psVar9->key)" ( (field_expression "psVar9->key" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ number_literal ]) + number_literal) )))) = (subscript_expression "puVar5[iVar6]" identifier [ identifier ])) ;) (expression_statement "*(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1];" (assignment_expression "*(byte *)((long)&psVar9->key + 0xfc9) = (byte)iVar4 ^ puVar5[iVar6 + 1]" (pointer_expression "*(byte *)((long)&psVar9->key + 0xfc9)" * (cast_expression "(byte *)((long)&psVar9->key + 0xfc9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar9->key + 0xfc9)" ( (binary_expression "(long)&psVar9->key + 0xfc9" (cast_expression "(long)&psVar9->key" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar9->key" & (field_expression "psVar9->key" identifier -> field_identifier))) + number_literal) )))) = (binary_expression "(byte)iVar4 ^ puVar5[iVar6 + 1]" (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier) ^ (subscript_expression "puVar5[iVar6 + 1]" identifier [ (binary_expression "iVar6 + 1" identifier + number_literal) ]))) ;) (expression_statement "psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc);" (assignment_expression "psVar9 = (symmetric_LRW *)(psVar9->IV + 0xc)" identifier = (cast_expression "(symmetric_LRW *)(psVar9->IV + 0xc)" ( (type_descriptor "symmetric_LRW *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar9->IV + 0xc)" ( (binary_expression "psVar9->IV + 0xc" (field_expression "psVar9->IV" identifier -> field_identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(psVar7 != psVar9)" ( (binary_expression "psVar7 != psVar9" identifier != identifier) )) ;) (expression_statement "psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2);" (assignment_expression "psVar7 = (symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2)" identifier = (cast_expression "(symmetric_LRW *)((psVar7->key).twofish.S[3] + 0xf2)" ( (type_descriptor "symmetric_LRW *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((psVar7->key).twofish.S[3] + 0xf2)" ( (binary_expression "(psVar7->key).twofish.S[3] + 0xf2" (subscript_expression "(psVar7->key).twofish.S[3]" (field_expression "(psVar7->key).twofish.S" (field_expression "(psVar7->key).twofish" (parenthesized_expression "(psVar7->key)" ( (field_expression "psVar7->key" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ number_literal ]) + number_literal) )))) ;) }) while (parenthesized_expression "(lrw + 1 != psVar7)" ( (binary_expression "lrw + 1 != psVar7" (binary_expression "lrw + 1" identifier + number_literal) != identifier) )) ;) (expression_statement "iVar6 = lrw_setiv(IV,0x10,lrw);" (assignment_expression "iVar6 = lrw_setiv(IV,0x10,lrw)" identifier = (call_expression "lrw_setiv(IV,0x10,lrw)" identifier (argument_list "(IV,0x10,lrw)" ( identifier , number_literal , identifier )))) ;) })) })) (if_statement "if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar6;\n    }" if (parenthesized_expression "(lVar2 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar2 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);" (call_expression "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" identifier (argument_list "("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" ( (string_literal ""lrw != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "int lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)\n\n{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }\n                    \n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}\n\n" (function_definition "int lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)\n\n{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }\n                    \n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" primitive_type (function_declarator "lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)" identifier (parameter_list "(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined8 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int *param_7" primitive_type (pointer_declarator "*param_7" * identifier)) ))) (compound_statement "{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }\n                    \n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_58 [24];" primitive_type (array_declarator "local_58 [24]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" { (expression_statement "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);" (call_expression "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" identifier (argument_list "("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" ( (string_literal ""IV != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" { (expression_statement "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);" (call_expression "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" identifier (argument_list "("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" ( (string_literal ""key != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" if (parenthesized_expression "(param_5 == (undefined8 *)0x0)" ( (binary_expression "param_5 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" { (expression_statement "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);" (call_expression "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" identifier (argument_list "("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" ( (string_literal ""tweak != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }" if (parenthesized_expression "(param_7 != (int *)0x0)" ( (binary_expression "param_7 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }" { (expression_statement "iVar3 = cipher_is_valid();" (assignment_expression "iVar3 = cipher_is_valid()" identifier = (call_expression "cipher_is_valid()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }" { (expression_statement "iVar3 = 10;" (assignment_expression "iVar3 = 10" identifier = number_literal) ;) (if_statement "if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }" if (parenthesized_expression "(*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10)" ( (binary_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10" (pointer_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" * (cast_expression "(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" ( (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0" identifier + (binary_expression "(long)param_1 * 0xc0" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) )))) == number_literal) )) (compound_statement "{\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }" { (expression_statement "iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);" (assignment_expression "iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe)" identifier = (call_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))" ( (pointer_expression "**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" * (pointer_expression "*(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" * (cast_expression "(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" ( (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0" identifier + (binary_expression "(long)param_1 * 0xc0" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) ))))) )) (argument_list "(param_3,param_4,param_6,param_7 + 0xe)" ( identifier , identifier , identifier , (binary_expression "param_7 + 0xe" identifier + number_literal) )))) ;) (if_statement "if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }" { (expression_statement "*param_7 = param_1;" (assignment_expression "*param_7 = param_1" (pointer_expression "*param_7" * identifier) = identifier) ;) (expression_statement "uVar1 = param_5[1];" (assignment_expression "uVar1 = param_5[1]" identifier = (subscript_expression "param_5[1]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)(param_7 + 5) = *param_5;" (assignment_expression "*(undefined8 *)(param_7 + 5) = *param_5" (pointer_expression "*(undefined8 *)(param_7 + 5)" * (cast_expression "(undefined8 *)(param_7 + 5)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 5)" ( (binary_expression "param_7 + 5" identifier + number_literal) )))) = (pointer_expression "*param_5" * identifier)) ;) (expression_statement "*(undefined8 *)(param_7 + 7) = uVar1;" (assignment_expression "*(undefined8 *)(param_7 + 7) = uVar1" (pointer_expression "*(undefined8 *)(param_7 + 7)" * (cast_expression "(undefined8 *)(param_7 + 7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 7)" ( (binary_expression "param_7 + 7" identifier + number_literal) )))) = identifier) ;) (expression_statement "zeromem(local_58,0x10);" (call_expression "zeromem(local_58,0x10)" identifier (argument_list "(local_58,0x10)" ( identifier , number_literal ))) ;) (expression_statement "piVar6 = param_7 + 0x436;" (assignment_expression "piVar6 = param_7 + 0x436" identifier = (binary_expression "param_7 + 0x436" identifier + number_literal)) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);" do (compound_statement "{\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          }" { (expression_statement "cVar5 = (char)iVar3;" (assignment_expression "cVar5 = (char)iVar3" identifier = (cast_expression "(char)iVar3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "local_58[0] = cVar5;" (assignment_expression "local_58[0] = cVar5" (subscript_expression "local_58[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6)" identifier (argument_list "(param_5,local_58,piVar6)" ( identifier , identifier , identifier ))) ;) (expression_statement "local_58[0] = cVar5 + '\x01';" (assignment_expression "local_58[0] = cVar5 + '\x01'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x01'" identifier + (char_literal "'\x01'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 4);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 4)" identifier (argument_list "(param_5,local_58,piVar6 + 4)" ( identifier , identifier , (binary_expression "piVar6 + 4" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x02';" (assignment_expression "local_58[0] = cVar5 + '\x02'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x02'" identifier + (char_literal "'\x02'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 8);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 8)" identifier (argument_list "(param_5,local_58,piVar6 + 8)" ( identifier , identifier , (binary_expression "piVar6 + 8" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x03';" (assignment_expression "local_58[0] = cVar5 + '\x03'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x03'" identifier + (char_literal "'\x03'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0xc);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0xc)" identifier (argument_list "(param_5,local_58,piVar6 + 0xc)" ( identifier , identifier , (binary_expression "piVar6 + 0xc" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x04';" (assignment_expression "local_58[0] = cVar5 + '\x04'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x04'" identifier + (char_literal "'\x04'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x10);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x10)" identifier (argument_list "(param_5,local_58,piVar6 + 0x10)" ( identifier , identifier , (binary_expression "piVar6 + 0x10" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x05';" (assignment_expression "local_58[0] = cVar5 + '\x05'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x05'" identifier + (char_literal "'\x05'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x14);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x14)" identifier (argument_list "(param_5,local_58,piVar6 + 0x14)" ( identifier , identifier , (binary_expression "piVar6 + 0x14" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\x06';" (assignment_expression "local_58[0] = cVar5 + '\x06'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\x06'" identifier + (char_literal "'\x06'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x18);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x18)" identifier (argument_list "(param_5,local_58,piVar6 + 0x18)" ( identifier , identifier , (binary_expression "piVar6 + 0x18" identifier + number_literal) ))) ;) (expression_statement "local_58[0] = cVar5 + '\a';" (assignment_expression "local_58[0] = cVar5 + '\a'" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (binary_expression "cVar5 + '\a'" identifier + (char_literal "'\a'" ' escape_sequence '))) ;) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x1c)" identifier (argument_list "(param_5,local_58,piVar6 + 0x1c)" ( identifier , identifier , (binary_expression "piVar6 + 0x1c" identifier + number_literal) ))) ;) (expression_statement "puVar2 = PTR_gcm_shift_table_001dffd8;" (assignment_expression "puVar2 = PTR_gcm_shift_table_001dffd8" identifier = identifier) ;) (expression_statement "iVar3 = iVar3 + 8;" (assignment_expression "iVar3 = iVar3 + 8" identifier = (binary_expression "iVar3 + 8" identifier + number_literal)) ;) (expression_statement "piVar6 = piVar6 + 0x20;" (assignment_expression "piVar6 = piVar6 + 0x20" identifier = (binary_expression "piVar6 + 0x20" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 != 0x100)" ( (binary_expression "iVar3 != 0x100" identifier != number_literal) )) ;) (expression_statement "pbVar4 = (byte *)(param_7 + 0x836);" (assignment_expression "pbVar4 = (byte *)(param_7 + 0x836)" identifier = (cast_expression "(byte *)(param_7 + 0x836)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x836)" ( (binary_expression "param_7 + 0x836" identifier + number_literal) )))) ;) (do_statement "do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);" do (compound_statement "{\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          }" { (expression_statement "pbVar7 = pbVar4 + -0x1000;" (assignment_expression "pbVar7 = pbVar4 + -0x1000" identifier = (binary_expression "pbVar4 + -0x1000" identifier + number_literal)) ;) (do_statement "do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);" do (compound_statement "{\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            }" { (expression_statement "pbVar7[0x100f] = pbVar7[0xe];" (assignment_expression "pbVar7[0x100f] = pbVar7[0xe]" (subscript_expression "pbVar7[0x100f]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xe]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100e] = pbVar7[0xd];" (assignment_expression "pbVar7[0x100e] = pbVar7[0xd]" (subscript_expression "pbVar7[0x100e]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xd]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100d] = pbVar7[0xc];" (assignment_expression "pbVar7[0x100d] = pbVar7[0xc]" (subscript_expression "pbVar7[0x100d]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xc]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100c] = pbVar7[0xb];" (assignment_expression "pbVar7[0x100c] = pbVar7[0xb]" (subscript_expression "pbVar7[0x100c]" identifier [ number_literal ]) = (subscript_expression "pbVar7[0xb]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100b] = pbVar7[10];" (assignment_expression "pbVar7[0x100b] = pbVar7[10]" (subscript_expression "pbVar7[0x100b]" identifier [ number_literal ]) = (subscript_expression "pbVar7[10]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x100a] = pbVar7[9];" (assignment_expression "pbVar7[0x100a] = pbVar7[9]" (subscript_expression "pbVar7[0x100a]" identifier [ number_literal ]) = (subscript_expression "pbVar7[9]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1009] = pbVar7[8];" (assignment_expression "pbVar7[0x1009] = pbVar7[8]" (subscript_expression "pbVar7[0x1009]" identifier [ number_literal ]) = (subscript_expression "pbVar7[8]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1008] = pbVar7[7];" (assignment_expression "pbVar7[0x1008] = pbVar7[7]" (subscript_expression "pbVar7[0x1008]" identifier [ number_literal ]) = (subscript_expression "pbVar7[7]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1007] = pbVar7[6];" (assignment_expression "pbVar7[0x1007] = pbVar7[6]" (subscript_expression "pbVar7[0x1007]" identifier [ number_literal ]) = (subscript_expression "pbVar7[6]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1006] = pbVar7[5];" (assignment_expression "pbVar7[0x1006] = pbVar7[5]" (subscript_expression "pbVar7[0x1006]" identifier [ number_literal ]) = (subscript_expression "pbVar7[5]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1005] = pbVar7[4];" (assignment_expression "pbVar7[0x1005] = pbVar7[4]" (subscript_expression "pbVar7[0x1005]" identifier [ number_literal ]) = (subscript_expression "pbVar7[4]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1004] = pbVar7[3];" (assignment_expression "pbVar7[0x1004] = pbVar7[3]" (subscript_expression "pbVar7[0x1004]" identifier [ number_literal ]) = (subscript_expression "pbVar7[3]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1003] = pbVar7[2];" (assignment_expression "pbVar7[0x1003] = pbVar7[2]" (subscript_expression "pbVar7[0x1003]" identifier [ number_literal ]) = (subscript_expression "pbVar7[2]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1002] = pbVar7[1];" (assignment_expression "pbVar7[0x1002] = pbVar7[1]" (subscript_expression "pbVar7[0x1002]" identifier [ number_literal ]) = (subscript_expression "pbVar7[1]" identifier [ number_literal ])) ;) (expression_statement "pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];" (assignment_expression "pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)]" (subscript_expression "pbVar7[0x1000]" identifier [ number_literal ]) = (subscript_expression "puVar2[(int)((uint)pbVar7[0xf] * 2)]" identifier [ (cast_expression "(int)((uint)pbVar7[0xf] * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)pbVar7[0xf] * 2)" ( (binary_expression "(uint)pbVar7[0xf] * 2" (cast_expression "(uint)pbVar7[0xf]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar7[0xf]" identifier [ number_literal ])) * number_literal) ))) ])) ;) (expression_statement "pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];" (assignment_expression "pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (subscript_expression "pbVar7[0x1001]" identifier [ number_literal ]) = (binary_expression "*pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (pointer_expression "*pbVar7" * identifier) ^ (subscript_expression "puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" identifier [ (cast_expression "(int)((uint)pbVar7[0xf] * 2 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)pbVar7[0xf] * 2 + 1)" ( (binary_expression "(uint)pbVar7[0xf] * 2 + 1" (binary_expression "(uint)pbVar7[0xf] * 2" (cast_expression "(uint)pbVar7[0xf]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar7[0xf]" identifier [ number_literal ])) * number_literal) + number_literal) ))) ]))) ;) (expression_statement "pbVar7 = pbVar7 + 0x10;" (assignment_expression "pbVar7 = pbVar7 + 0x10" identifier = (binary_expression "pbVar7 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar4 != pbVar7)" ( (binary_expression "pbVar4 != pbVar7" identifier != identifier) )) ;) (expression_statement "pbVar4 = pbVar4 + 0x1000;" (assignment_expression "pbVar4 = pbVar4 + 0x1000" identifier = (binary_expression "pbVar4 + 0x1000" identifier + number_literal)) ;) }) while (parenthesized_expression "((byte *)(param_7 + 0x4436) != pbVar4)" ( (binary_expression "(byte *)(param_7 + 0x4436) != pbVar4" (cast_expression "(byte *)(param_7 + 0x4436)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x4436)" ( (binary_expression "param_7 + 0x4436" identifier + number_literal) ))) != identifier) )) ;) (expression_statement "iVar3 = lrw_setiv(param_2,0x10,param_7);" (assignment_expression "iVar3 = lrw_setiv(param_2,0x10,param_7)" identifier = (call_expression "lrw_setiv(param_2,0x10,param_7)" identifier (argument_list "(param_2,0x10,param_7)" ( identifier , number_literal , identifier )))) ;) })) })) })) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      return iVar3;\n    }" { (return_statement "return iVar3;" return identifier ;) })) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);" (call_expression "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" identifier (argument_list "("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" ( (string_literal ""lrw != NULL"" " string_content ") , (string_literal ""src/modes/lrw/lrw_start.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (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 { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT , (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (char_literal ' escape_sequence '))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (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 ]) = (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 ]) = (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 ]) = (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 [ (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) * LIT) ))) ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (pointer_expression * IDENT) ^ (subscript_expression IDENT [ (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) * LIT) + LIT) ))) ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT )))) ;) })) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })))
(function_definition "int lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)\n\n{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }\n                    \n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" (primitive_type "int") (function_declarator "lrw_start(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)" (identifier "lrw_start") (parameter_list "(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,\n             undefined4 param_6,int *param_7)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "undefined8 *param_5" (type_identifier "undefined8") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) (, ",") (parameter_declaration "int *param_7" (primitive_type "int") (pointer_declarator "*param_7" (* "*") (identifier "param_7"))) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  undefined *puVar2;\n  int iVar3;\n  byte *pbVar4;\n  char cVar5;\n  int *piVar6;\n  byte *pbVar7;\n  long in_FS_OFFSET;\n  char local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }\n  if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }\n  if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }\n  if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }\n                    \n  crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "byte *pbVar4;" (type_identifier "byte") (pointer_declarator "*pbVar4" (* "*") (identifier "pbVar4")) (; ";")) (declaration "char cVar5;" (primitive_type "char") (identifier "cVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "byte *pbVar7;" (type_identifier "byte") (pointer_declarator "*pbVar7" (* "*") (identifier "pbVar7")) (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "char local_58 [24];" (primitive_type "char") (array_declarator "local_58 [24]" (identifier "local_58") ([ "[") (number_literal "24") (] "]")) (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (param_2 == 0) {\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);\n  }" ({ "{") (expression_statement "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);" (call_expression "crypt_argchk("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" (identifier "crypt_argchk") (argument_list "("IV != NULL","src/modes/lrw/lrw_start.c",0x2a)" (( "(") (string_literal ""IV != NULL"" (" """) (string_content "IV != NULL") (" """)) (, ",") (string_literal ""src/modes/lrw/lrw_start.c"" (" """) (string_content "src/modes/lrw/lrw_start.c") (" """)) (, ",") (number_literal "0x2a") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_3 == 0) {\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);\n  }" ({ "{") (expression_statement "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b);" (call_expression "crypt_argchk("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" (identifier "crypt_argchk") (argument_list "("key != NULL","src/modes/lrw/lrw_start.c",0x2b)" (( "(") (string_literal ""key != NULL"" (" """) (string_content "key != NULL") (" """)) (, ",") (string_literal ""src/modes/lrw/lrw_start.c"" (" """) (string_content "src/modes/lrw/lrw_start.c") (" """)) (, ",") (number_literal "0x2b") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_5 == (undefined8 *)0x0) {\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" (if "if") (parenthesized_expression "(param_5 == (undefined8 *)0x0)" (( "(") (binary_expression "param_5 == (undefined8 *)0x0" (identifier "param_5") (== "==") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);\n  }" ({ "{") (expression_statement "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);" (call_expression "crypt_argchk("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" (identifier "crypt_argchk") (argument_list "("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c)" (( "(") (string_literal ""tweak != NULL"" (" """) (string_content "tweak != NULL") (" """)) (, ",") (string_literal ""src/modes/lrw/lrw_start.c"" (" """) (string_content "src/modes/lrw/lrw_start.c") (" """)) (, ",") (number_literal "0x2c") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_7 != (int *)0x0) {\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }" (if "if") (parenthesized_expression "(param_7 != (int *)0x0)" (( "(") (binary_expression "param_7 != (int *)0x0" (identifier "param_7") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    iVar3 = cipher_is_valid();\n    if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }\n    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }\n                    \n    __stack_chk_fail();\n  }" ({ "{") (expression_statement "iVar3 = cipher_is_valid();" (assignment_expression "iVar3 = cipher_is_valid()" (identifier "iVar3") (= "=") (call_expression "cipher_is_valid()" (identifier "cipher_is_valid") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar3 = 10;\n      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }\n    }" ({ "{") (expression_statement "iVar3 = 10;" (assignment_expression "iVar3 = 10" (identifier "iVar3") (= "=") (number_literal "10")) (; ";")) (if_statement "if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }" (if "if") (parenthesized_expression "(*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10)" (( "(") (binary_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10" (pointer_expression "*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" (* "*") (cast_expression "(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14)" (( "(") (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0" (identifier "PTR_cipher_descriptor_001dfee8") (+ "+") (binary_expression "(long)param_1 * 0xc0" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x14")) () ")")))) (== "==") (number_literal "0x10")) () ")")) (compound_statement "{\n        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);\n        if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }\n      }" ({ "{") (expression_statement "iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe);" (assignment_expression "iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))\n                          (param_3,param_4,param_6,param_7 + 0xe)" (parenthesized_expression "(**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))" (( "(") (pointer_expression "**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" (* "*") (pointer_expression "*(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" (* "*") (cast_expression "(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20)" (( "(") (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20" (binary_expression "PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0" (identifier "PTR_cipher_descriptor_001dfee8") (+ "+") (binary_expression "(long)param_1 * 0xc0" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (* "*") (number_literal "0xc0"))) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(param_3,param_4,param_6,param_7 + 0xe)" (( "(") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_6") (, ",") (binary_expression "param_7 + 0xe" (identifier "param_7") (+ "+") (number_literal "0xe")) () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          *param_7 = param_1;\n          uVar1 = param_5[1];\n          *(undefined8 *)(param_7 + 5) = *param_5;\n          *(undefined8 *)(param_7 + 7) = uVar1;\n          zeromem(local_58,0x10);\n          piVar6 = param_7 + 0x436;\n          iVar3 = 0;\n          do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);\n          pbVar4 = (byte *)(param_7 + 0x836);\n          do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);\n          iVar3 = lrw_setiv(param_2,0x10,param_7);\n        }" ({ "{") (expression_statement "*param_7 = param_1;" (assignment_expression "*param_7 = param_1" (pointer_expression "*param_7" (* "*") (identifier "param_7")) (= "=") (identifier "param_1")) (; ";")) (expression_statement "uVar1 = param_5[1];" (assignment_expression "uVar1 = param_5[1]" (identifier "uVar1") (= "=") (subscript_expression "param_5[1]" (identifier "param_5") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)(param_7 + 5) = *param_5;" (assignment_expression "*(undefined8 *)(param_7 + 5) = *param_5" (pointer_expression "*(undefined8 *)(param_7 + 5)" (* "*") (cast_expression "(undefined8 *)(param_7 + 5)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 5)" (( "(") (binary_expression "param_7 + 5" (identifier "param_7") (+ "+") (number_literal "5")) () ")")))) (= "=") (pointer_expression "*param_5" (* "*") (identifier "param_5"))) (; ";")) (expression_statement "*(undefined8 *)(param_7 + 7) = uVar1;" (assignment_expression "*(undefined8 *)(param_7 + 7) = uVar1" (pointer_expression "*(undefined8 *)(param_7 + 7)" (* "*") (cast_expression "(undefined8 *)(param_7 + 7)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 7)" (( "(") (binary_expression "param_7 + 7" (identifier "param_7") (+ "+") (number_literal "7")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "zeromem(local_58,0x10);" (call_expression "zeromem(local_58,0x10)" (identifier "zeromem") (argument_list "(local_58,0x10)" (( "(") (identifier "local_58") (, ",") (number_literal "0x10") () ")"))) (; ";")) (expression_statement "piVar6 = param_7 + 0x436;" (assignment_expression "piVar6 = param_7 + 0x436" (identifier "piVar6") (= "=") (binary_expression "param_7 + 0x436" (identifier "param_7") (+ "+") (number_literal "0x436"))) (; ";")) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          } while (iVar3 != 0x100);" (do "do") (compound_statement "{\n            cVar5 = (char)iVar3;\n            local_58[0] = cVar5;\n            gcm_gf_mult(param_5,local_58,piVar6);\n            local_58[0] = cVar5 + '\x01';\n            gcm_gf_mult(param_5,local_58,piVar6 + 4);\n            local_58[0] = cVar5 + '\x02';\n            gcm_gf_mult(param_5,local_58,piVar6 + 8);\n            local_58[0] = cVar5 + '\x03';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);\n            local_58[0] = cVar5 + '\x04';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);\n            local_58[0] = cVar5 + '\x05';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);\n            local_58[0] = cVar5 + '\x06';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);\n            local_58[0] = cVar5 + '\a';\n            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);\n            puVar2 = PTR_gcm_shift_table_001dffd8;\n            iVar3 = iVar3 + 8;\n            piVar6 = piVar6 + 0x20;\n          }" ({ "{") (expression_statement "cVar5 = (char)iVar3;" (assignment_expression "cVar5 = (char)iVar3" (identifier "cVar5") (= "=") (cast_expression "(char)iVar3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "iVar3"))) (; ";")) (expression_statement "local_58[0] = cVar5;" (assignment_expression "local_58[0] = cVar5" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "cVar5")) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (identifier "piVar6") () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\x01';" (assignment_expression "local_58[0] = cVar5 + '\x01'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\x01'" (identifier "cVar5") (+ "+") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 4);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 4)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 4)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 4" (identifier "piVar6") (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\x02';" (assignment_expression "local_58[0] = cVar5 + '\x02'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\x02'" (identifier "cVar5") (+ "+") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 8);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 8)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 8)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 8" (identifier "piVar6") (+ "+") (number_literal "8")) () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\x03';" (assignment_expression "local_58[0] = cVar5 + '\x03'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\x03'" (identifier "cVar5") (+ "+") (char_literal "'\x03'" (' "'") (escape_sequence "\x03") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0xc);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0xc)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 0xc)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 0xc" (identifier "piVar6") (+ "+") (number_literal "0xc")) () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\x04';" (assignment_expression "local_58[0] = cVar5 + '\x04'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\x04'" (identifier "cVar5") (+ "+") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x10);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x10)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 0x10)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 0x10" (identifier "piVar6") (+ "+") (number_literal "0x10")) () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\x05';" (assignment_expression "local_58[0] = cVar5 + '\x05'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\x05'" (identifier "cVar5") (+ "+") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x14);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x14)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 0x14)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 0x14" (identifier "piVar6") (+ "+") (number_literal "0x14")) () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\x06';" (assignment_expression "local_58[0] = cVar5 + '\x06'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\x06'" (identifier "cVar5") (+ "+") (char_literal "'\x06'" (' "'") (escape_sequence "\x06") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x18);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x18)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 0x18)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 0x18" (identifier "piVar6") (+ "+") (number_literal "0x18")) () ")"))) (; ";")) (expression_statement "local_58[0] = cVar5 + '\a';" (assignment_expression "local_58[0] = cVar5 + '\a'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "cVar5 + '\a'" (identifier "cVar5") (+ "+") (char_literal "'\a'" (' "'") (escape_sequence "\a") (' "'")))) (; ";")) (expression_statement "gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);" (call_expression "gcm_gf_mult(param_5,local_58,piVar6 + 0x1c)" (identifier "gcm_gf_mult") (argument_list "(param_5,local_58,piVar6 + 0x1c)" (( "(") (identifier "param_5") (, ",") (identifier "local_58") (, ",") (binary_expression "piVar6 + 0x1c" (identifier "piVar6") (+ "+") (number_literal "0x1c")) () ")"))) (; ";")) (expression_statement "puVar2 = PTR_gcm_shift_table_001dffd8;" (assignment_expression "puVar2 = PTR_gcm_shift_table_001dffd8" (identifier "puVar2") (= "=") (identifier "PTR_gcm_shift_table_001dffd8")) (; ";")) (expression_statement "iVar3 = iVar3 + 8;" (assignment_expression "iVar3 = iVar3 + 8" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "piVar6 = piVar6 + 0x20;" (assignment_expression "piVar6 = piVar6 + 0x20" (identifier "piVar6") (= "=") (binary_expression "piVar6 + 0x20" (identifier "piVar6") (+ "+") (number_literal "0x20"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar3 != 0x100)" (( "(") (binary_expression "iVar3 != 0x100" (identifier "iVar3") (!= "!=") (number_literal "0x100")) () ")")) (; ";")) (expression_statement "pbVar4 = (byte *)(param_7 + 0x836);" (assignment_expression "pbVar4 = (byte *)(param_7 + 0x836)" (identifier "pbVar4") (= "=") (cast_expression "(byte *)(param_7 + 0x836)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 0x836)" (( "(") (binary_expression "param_7 + 0x836" (identifier "param_7") (+ "+") (number_literal "0x836")) () ")")))) (; ";")) (do_statement "do {\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          } while ((byte *)(param_7 + 0x4436) != pbVar4);" (do "do") (compound_statement "{\n            pbVar7 = pbVar4 + -0x1000;\n            do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);\n            pbVar4 = pbVar4 + 0x1000;\n          }" ({ "{") (expression_statement "pbVar7 = pbVar4 + -0x1000;" (assignment_expression "pbVar7 = pbVar4 + -0x1000" (identifier "pbVar7") (= "=") (binary_expression "pbVar4 + -0x1000" (identifier "pbVar4") (+ "+") (number_literal "-0x1000"))) (; ";")) (do_statement "do {\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            } while (pbVar4 != pbVar7);" (do "do") (compound_statement "{\n              pbVar7[0x100f] = pbVar7[0xe];\n              pbVar7[0x100e] = pbVar7[0xd];\n              pbVar7[0x100d] = pbVar7[0xc];\n              pbVar7[0x100c] = pbVar7[0xb];\n              pbVar7[0x100b] = pbVar7[10];\n              pbVar7[0x100a] = pbVar7[9];\n              pbVar7[0x1009] = pbVar7[8];\n              pbVar7[0x1008] = pbVar7[7];\n              pbVar7[0x1007] = pbVar7[6];\n              pbVar7[0x1006] = pbVar7[5];\n              pbVar7[0x1005] = pbVar7[4];\n              pbVar7[0x1004] = pbVar7[3];\n              pbVar7[0x1003] = pbVar7[2];\n              pbVar7[0x1002] = pbVar7[1];\n              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];\n              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];\n              pbVar7 = pbVar7 + 0x10;\n            }" ({ "{") (expression_statement "pbVar7[0x100f] = pbVar7[0xe];" (assignment_expression "pbVar7[0x100f] = pbVar7[0xe]" (subscript_expression "pbVar7[0x100f]" (identifier "pbVar7") ([ "[") (number_literal "0x100f") (] "]")) (= "=") (subscript_expression "pbVar7[0xe]" (identifier "pbVar7") ([ "[") (number_literal "0xe") (] "]"))) (; ";")) (expression_statement "pbVar7[0x100e] = pbVar7[0xd];" (assignment_expression "pbVar7[0x100e] = pbVar7[0xd]" (subscript_expression "pbVar7[0x100e]" (identifier "pbVar7") ([ "[") (number_literal "0x100e") (] "]")) (= "=") (subscript_expression "pbVar7[0xd]" (identifier "pbVar7") ([ "[") (number_literal "0xd") (] "]"))) (; ";")) (expression_statement "pbVar7[0x100d] = pbVar7[0xc];" (assignment_expression "pbVar7[0x100d] = pbVar7[0xc]" (subscript_expression "pbVar7[0x100d]" (identifier "pbVar7") ([ "[") (number_literal "0x100d") (] "]")) (= "=") (subscript_expression "pbVar7[0xc]" (identifier "pbVar7") ([ "[") (number_literal "0xc") (] "]"))) (; ";")) (expression_statement "pbVar7[0x100c] = pbVar7[0xb];" (assignment_expression "pbVar7[0x100c] = pbVar7[0xb]" (subscript_expression "pbVar7[0x100c]" (identifier "pbVar7") ([ "[") (number_literal "0x100c") (] "]")) (= "=") (subscript_expression "pbVar7[0xb]" (identifier "pbVar7") ([ "[") (number_literal "0xb") (] "]"))) (; ";")) (expression_statement "pbVar7[0x100b] = pbVar7[10];" (assignment_expression "pbVar7[0x100b] = pbVar7[10]" (subscript_expression "pbVar7[0x100b]" (identifier "pbVar7") ([ "[") (number_literal "0x100b") (] "]")) (= "=") (subscript_expression "pbVar7[10]" (identifier "pbVar7") ([ "[") (number_literal "10") (] "]"))) (; ";")) (expression_statement "pbVar7[0x100a] = pbVar7[9];" (assignment_expression "pbVar7[0x100a] = pbVar7[9]" (subscript_expression "pbVar7[0x100a]" (identifier "pbVar7") ([ "[") (number_literal "0x100a") (] "]")) (= "=") (subscript_expression "pbVar7[9]" (identifier "pbVar7") ([ "[") (number_literal "9") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1009] = pbVar7[8];" (assignment_expression "pbVar7[0x1009] = pbVar7[8]" (subscript_expression "pbVar7[0x1009]" (identifier "pbVar7") ([ "[") (number_literal "0x1009") (] "]")) (= "=") (subscript_expression "pbVar7[8]" (identifier "pbVar7") ([ "[") (number_literal "8") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1008] = pbVar7[7];" (assignment_expression "pbVar7[0x1008] = pbVar7[7]" (subscript_expression "pbVar7[0x1008]" (identifier "pbVar7") ([ "[") (number_literal "0x1008") (] "]")) (= "=") (subscript_expression "pbVar7[7]" (identifier "pbVar7") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1007] = pbVar7[6];" (assignment_expression "pbVar7[0x1007] = pbVar7[6]" (subscript_expression "pbVar7[0x1007]" (identifier "pbVar7") ([ "[") (number_literal "0x1007") (] "]")) (= "=") (subscript_expression "pbVar7[6]" (identifier "pbVar7") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1006] = pbVar7[5];" (assignment_expression "pbVar7[0x1006] = pbVar7[5]" (subscript_expression "pbVar7[0x1006]" (identifier "pbVar7") ([ "[") (number_literal "0x1006") (] "]")) (= "=") (subscript_expression "pbVar7[5]" (identifier "pbVar7") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1005] = pbVar7[4];" (assignment_expression "pbVar7[0x1005] = pbVar7[4]" (subscript_expression "pbVar7[0x1005]" (identifier "pbVar7") ([ "[") (number_literal "0x1005") (] "]")) (= "=") (subscript_expression "pbVar7[4]" (identifier "pbVar7") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1004] = pbVar7[3];" (assignment_expression "pbVar7[0x1004] = pbVar7[3]" (subscript_expression "pbVar7[0x1004]" (identifier "pbVar7") ([ "[") (number_literal "0x1004") (] "]")) (= "=") (subscript_expression "pbVar7[3]" (identifier "pbVar7") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1003] = pbVar7[2];" (assignment_expression "pbVar7[0x1003] = pbVar7[2]" (subscript_expression "pbVar7[0x1003]" (identifier "pbVar7") ([ "[") (number_literal "0x1003") (] "]")) (= "=") (subscript_expression "pbVar7[2]" (identifier "pbVar7") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1002] = pbVar7[1];" (assignment_expression "pbVar7[0x1002] = pbVar7[1]" (subscript_expression "pbVar7[0x1002]" (identifier "pbVar7") ([ "[") (number_literal "0x1002") (] "]")) (= "=") (subscript_expression "pbVar7[1]" (identifier "pbVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];" (assignment_expression "pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)]" (subscript_expression "pbVar7[0x1000]" (identifier "pbVar7") ([ "[") (number_literal "0x1000") (] "]")) (= "=") (subscript_expression "puVar2[(int)((uint)pbVar7[0xf] * 2)]" (identifier "puVar2") ([ "[") (cast_expression "(int)((uint)pbVar7[0xf] * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)pbVar7[0xf] * 2)" (( "(") (binary_expression "(uint)pbVar7[0xf] * 2" (cast_expression "(uint)pbVar7[0xf]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "pbVar7[0xf]" (identifier "pbVar7") ([ "[") (number_literal "0xf") (] "]"))) (* "*") (number_literal "2")) () ")"))) (] "]"))) (; ";")) (expression_statement "pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];" (assignment_expression "pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (subscript_expression "pbVar7[0x1001]" (identifier "pbVar7") ([ "[") (number_literal "0x1001") (] "]")) (= "=") (binary_expression "*pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (^ "^") (subscript_expression "puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)]" (identifier "puVar2") ([ "[") (cast_expression "(int)((uint)pbVar7[0xf] * 2 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)pbVar7[0xf] * 2 + 1)" (( "(") (binary_expression "(uint)pbVar7[0xf] * 2 + 1" (binary_expression "(uint)pbVar7[0xf] * 2" (cast_expression "(uint)pbVar7[0xf]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "pbVar7[0xf]" (identifier "pbVar7") ([ "[") (number_literal "0xf") (] "]"))) (* "*") (number_literal "2")) (+ "+") (number_literal "1")) () ")"))) (] "]")))) (; ";")) (expression_statement "pbVar7 = pbVar7 + 0x10;" (assignment_expression "pbVar7 = pbVar7 + 0x10" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + 0x10" (identifier "pbVar7") (+ "+") (number_literal "0x10"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pbVar4 != pbVar7)" (( "(") (binary_expression "pbVar4 != pbVar7" (identifier "pbVar4") (!= "!=") (identifier "pbVar7")) () ")")) (; ";")) (expression_statement "pbVar4 = pbVar4 + 0x1000;" (assignment_expression "pbVar4 = pbVar4 + 0x1000" (identifier "pbVar4") (= "=") (binary_expression "pbVar4 + 0x1000" (identifier "pbVar4") (+ "+") (number_literal "0x1000"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((byte *)(param_7 + 0x4436) != pbVar4)" (( "(") (binary_expression "(byte *)(param_7 + 0x4436) != pbVar4" (cast_expression "(byte *)(param_7 + 0x4436)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 0x4436)" (( "(") (binary_expression "param_7 + 0x4436" (identifier "param_7") (+ "+") (number_literal "0x4436")) () ")"))) (!= "!=") (identifier "pbVar4")) () ")")) (; ";")) (expression_statement "iVar3 = lrw_setiv(param_2,0x10,param_7);" (assignment_expression "iVar3 = lrw_setiv(param_2,0x10,param_7)" (identifier "iVar3") (= "=") (call_expression "lrw_setiv(param_2,0x10,param_7)" (identifier "lrw_setiv") (argument_list "(param_2,0x10,param_7)" (( "(") (identifier "param_2") (, ",") (number_literal "0x10") (, ",") (identifier "param_7") () ")")))) (; ";")) (} "}"))) (} "}"))) (} "}"))) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return iVar3;\n    }" (if "if") (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n      return iVar3;\n    }" ({ "{") (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}"))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);" (call_expression "crypt_argchk("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" (identifier "crypt_argchk") (argument_list "("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d)" (( "(") (string_literal ""lrw != NULL"" (" """) (string_content "lrw != NULL") (" """)) (, ",") (string_literal ""src/modes/lrw/lrw_start.c"" (" """) (string_content "src/modes/lrw/lrw_start.c") (" """)) (, ",") (number_literal "0x2d") () ")"))) (; ";")) (} "}")))

int function_1(int cipher,type_1 *var_2,type_1 *var_4,int keylen,type_1 *var_5,int num_rounds,
             type_2 *var_6)

{
  type_3 bVar1;
  long var_16;
  type_4 uVar3;
  int iVar4;
  type_5 *puVar5;
  int var_8;
  type_2 *var_13;
  type_1 var_12;
  type_1 (*c) [256] [16];
  type_2 *var_14;
  long var_1;
  type_1 B [16];
  
  var_16 = *(long *)(var_1 + 0x28);
  if (var_2 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("IV != NULL","src/modes/lrw/lrw_start.c",0x2a);
  }
  if (var_4 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("key != NULL","src/modes/lrw/lrw_start.c",0x2b);
  }
  if (var_5 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("tweak != NULL","src/modes/lrw/lrw_start.c",0x2c);
  }
  if (var_6 != (type_2 *)0x0) {
    var_8 = var_7(cipher);
    if ((var_8 == 0) &&
       (var_8 = 10, *(int *)(var_9 + (long)cipher * 0xc0 + 0x14) == 0x10))
    {
      var_8 = (**(type_6 **)(var_9 + (long)cipher * 0xc0 + 0x20))
                        (var_4,keylen,num_rounds,&var_6->var_4);
      if (var_8 == 0) {
        var_6->cipher = cipher;
        uVar3 = *(type_4 *)(var_5 + 8);
        *(type_4 *)var_6->var_5 = *(type_4 *)var_5;
        *(type_4 *)(var_6->var_5 + 8) = uVar3;
        var_10(B,0x10);
        c = var_6->PC;
        var_8 = 0;
        do {
          var_12 = (type_1)var_8;
          B[0] = var_12;
          var_11(var_5,B,(type_1 *)c);
          B[0] = var_12 + '\x01';
          var_11(var_5,B,(*c)[1]);
          B[0] = var_12 + '\x02';
          var_11(var_5,B,(*c)[2]);
          B[0] = var_12 + '\x03';
          var_11(var_5,B,(*c)[3]);
          B[0] = var_12 + '\x04';
          var_11(var_5,B,(*c)[4]);
          B[0] = var_12 + '\x05';
          var_11(var_5,B,(*c)[5]);
          B[0] = var_12 + '\x06';
          var_11(var_5,B,(*c)[6]);
          B[0] = var_12 + '\a';
          var_11(var_5,B,(*c)[7]);
          puVar5 = PTR_gcm_shift_table_001dffd8;
          var_8 = var_8 + 8;
          c = (type_1 (*) [256] [16])(*c + 8);
        } while (var_8 != 0x100);
        var_13 = (type_2 *)(var_6->PC + 1);
        do {
          var_14 = (type_2 *)(var_13[-1].PC + 0xf);
          do {
            bVar1 = var_14->var_2[0xb];
            *(type_1 *)((long)&var_14->var_4 + 0xfd7) = var_14->var_2[10];
            *(type_1 *)((long)&var_14->var_4 + 0xfd6) = var_14->var_2[9];
            *(type_1 *)((long)&var_14->var_4 + 0xfd5) = var_14->var_2[8];
            *(type_1 *)((long)&var_14->var_4 + 0xfd4) = var_14->var_2[7];
            *(type_1 *)((long)&var_14->var_4 + 0xfd3) = var_14->var_2[6];
            *(type_1 *)((long)&var_14->var_4 + 0xfd2) = var_14->var_2[5];
            *(type_1 *)((long)&var_14->var_4 + 0xfd1) = var_14->var_2[4];
            *(type_1 *)((long)&var_14->var_4 + 0xfd0) = var_14->var_2[3];
            *(type_1 *)((long)&var_14->var_4 + 0xfcf) = var_14->var_2[2];
            *(type_1 *)((long)&var_14->var_4 + 0xfce) = var_14->var_2[1];
            *(type_1 *)((long)&var_14->var_4 + 0xfcd) = var_14->var_2[0];
            *(type_7 *)((long)&var_14->var_4 + 0xfcc) = *(type_7 *)((long)&var_14->cipher + 3)
            ;
            *(type_7 *)((long)&var_14->var_4 + 0xfcb) = *(type_7 *)((long)&var_14->cipher + 2)
            ;
            *(type_7 *)((long)&var_14->var_4 + 0xfca) = *(type_7 *)((long)&var_14->cipher + 1)
            ;
            iVar4 = var_14->cipher;
            var_8 = (type_8)bVar1 * 2;
            *(type_5 *)((var_14->var_4).twofish.S[3] + 0xf2) = puVar5[var_8];
            *(type_3 *)((long)&var_14->var_4 + 0xfc9) = (type_3)iVar4 ^ puVar5[var_8 + 1];
            var_14 = (type_2 *)(var_14->var_2 + 0xc);
          } while (var_13 != var_14);
          var_13 = (type_2 *)((var_13->var_4).twofish.S[3] + 0xf2);
        } while (var_6 + 1 != var_13);
        var_8 = var_15(var_2,0x10,var_6);
      }
    }
    if (var_16 == *(long *)(var_1 + 0x28)) {
      return var_8;
    }
                    /* WARNING: Subroutine does not return */
    var_17();
  }
                    /* WARNING: Subroutine does not return */
  var_3("lrw != NULL","src/modes/lrw/lrw_start.c",0x2d);
}


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

int MASKED(int param_1,long param_2,long param_3,undefined4 param_4,undefined8 *param_5,
             undefined4 param_6,int *param_7)

{
  undefined8 uVar1;
  undefined *puVar2;
  int iVar3;
  byte *pbVar4;
  char cVar5;
  int *piVar6;
  byte *pbVar7;
  long in_FS_OFFSET;
  char local_58 [24];
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("IV != NULL","src/modes/lrw/MASKED.c",0x2a);
  }
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("key != NULL","src/modes/lrw/MASKED.c",0x2b);
  }
  if (param_5 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("tweak != NULL","src/modes/lrw/MASKED.c",0x2c);
  }
  if (param_7 != (int *)0x0) {
    iVar3 = cipher_is_valid();
    if (iVar3 == 0) {
      iVar3 = 10;
      if (*(int *)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x14) == 0x10) {
        iVar3 = (**(code **)(PTR_cipher_descriptor_001dfee8 + (long)param_1 * 0xc0 + 0x20))
                          (param_3,param_4,param_6,param_7 + 0xe);
        if (iVar3 == 0) {
          *param_7 = param_1;
          uVar1 = param_5[1];
          *(undefined8 *)(param_7 + 5) = *param_5;
          *(undefined8 *)(param_7 + 7) = uVar1;
          zeromem(local_58,0x10);
          piVar6 = param_7 + 0x436;
          iVar3 = 0;
          do {
            cVar5 = (char)iVar3;
            local_58[0] = cVar5;
            gcm_gf_mult(param_5,local_58,piVar6);
            local_58[0] = cVar5 + '\x01';
            gcm_gf_mult(param_5,local_58,piVar6 + 4);
            local_58[0] = cVar5 + '\x02';
            gcm_gf_mult(param_5,local_58,piVar6 + 8);
            local_58[0] = cVar5 + '\x03';
            gcm_gf_mult(param_5,local_58,piVar6 + 0xc);
            local_58[0] = cVar5 + '\x04';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x10);
            local_58[0] = cVar5 + '\x05';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x14);
            local_58[0] = cVar5 + '\x06';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x18);
            local_58[0] = cVar5 + '\a';
            gcm_gf_mult(param_5,local_58,piVar6 + 0x1c);
            puVar2 = PTR_gcm_shift_table_001dffd8;
            iVar3 = iVar3 + 8;
            piVar6 = piVar6 + 0x20;
          } while (iVar3 != 0x100);
          pbVar4 = (byte *)(param_7 + 0x836);
          do {
            pbVar7 = pbVar4 + -0x1000;
            do {
              pbVar7[0x100f] = pbVar7[0xe];
              pbVar7[0x100e] = pbVar7[0xd];
              pbVar7[0x100d] = pbVar7[0xc];
              pbVar7[0x100c] = pbVar7[0xb];
              pbVar7[0x100b] = pbVar7[10];
              pbVar7[0x100a] = pbVar7[9];
              pbVar7[0x1009] = pbVar7[8];
              pbVar7[0x1008] = pbVar7[7];
              pbVar7[0x1007] = pbVar7[6];
              pbVar7[0x1006] = pbVar7[5];
              pbVar7[0x1005] = pbVar7[4];
              pbVar7[0x1004] = pbVar7[3];
              pbVar7[0x1003] = pbVar7[2];
              pbVar7[0x1002] = pbVar7[1];
              pbVar7[0x1000] = puVar2[(int)((uint)pbVar7[0xf] * 2)];
              pbVar7[0x1001] = *pbVar7 ^ puVar2[(int)((uint)pbVar7[0xf] * 2 + 1)];
              pbVar7 = pbVar7 + 0x10;
            } while (pbVar4 != pbVar7);
            pbVar4 = pbVar4 + 0x1000;
          } while ((byte *)(param_7 + 0x4436) != pbVar4);
          iVar3 = lrw_setiv(param_2,0x10,param_7);
        }
      }
    }
    if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
      return iVar3;
    }
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("lrw != NULL","src/modes/lrw/MASKED.c",0x2d);
}

