16,472
社区成员
发帖
与我相关
我的任务
分享
signed int __fastcall Calculation(unsigned char *a1, unsigned char *a2, unsigned char *a3)
{
char v15[16];
char v25[16];
char v23[16];
for (int i = 0; i < 16; i++)
{
v15[i] = a2[i];
v25[i] = a1[i] ^ a2[i];
}
int v6 = 0;
LOBYTE(v6 = 0);
while (1)
{
int v7 = 1 << v6;
v6++;
for (int j = 15; j > 7; j = (unsigned __int8)(j - 1))
{
if ((v7 >> j) & 1)
v7 = (unsigned __int16)((283 << (j - 8)) ^ v7);
}
v15[0] = v15[0] ^ SurfaceGrid[(BYTE)v15[0x0D]] ^ v7;
v15[1] = v15[1] ^ SurfaceGrid[(BYTE)v15[0x0E]];
v15[2] = v15[2] ^ SurfaceGrid[(BYTE)v15[0x0F]];
v15[3] = v15[3] ^ SurfaceGrid[(BYTE)v15[0x0C]];
for (int k = 4; k < 16; k = k++)
v15[k] = v15[k] ^ v15[k - 4];
for (int l = 0; l < 16; l = l++)
v23[(-3 * l & 0xF)] = SurfaceGrid[(BYTE)v25[l]];
if (v6 == 10)
break;
for (int m = 0; m < 16; m = m++)
{
int v12 = 2 * (BYTE)v23[m & 0xC | (m + 1) & 3] ^ 2 * (BYTE)v23[m] ^ (BYTE)v23[m & 0xC | (m + 1) & 3] ^ (BYTE)v23[m & 0xC | (m + 2) & 3] ^ (BYTE)v23[m & 0xC | (m + 3) & 3];
for (int n = 15; n > 7; n = n--)
{
if ((v12 >> n) & 1)
v12 = (283 << (n - 8)) ^ v12;
}
v25[m] = v15[m] ^ v12;
}
}
for (int result = 0; result < 16; result = result++)
a3[result] = v23[result] ^ v15[result];
return 0;
}