Skip to content

Instantly share code, notes, and snippets.

@Antidote
Last active March 14, 2016 12:14
Show Gist options
  • Save Antidote/649ebd8c16ab1f817324 to your computer and use it in GitHub Desktop.
Save Antidote/649ebd8c16ab1f817324 to your computer and use it in GitHub Desktop.
s32 DecryptionCtx::DecryptRead(CInputStream& in, s32 key)
{
int ret = 0;
if (x20_encShift >= key)
{
int diff = x20_encShift - 0x20;
int baseVal = -1;
if (x20_encShift != 0x20)
baseVal = 1 << (x20_encShift - 1);
x20_encShift = key - x20_encShift;
ret = baseVal | (x1c_encVal >> diff);
}
else
{
int diff = x20_encShift - key;
int rem = x20_encShift - 0x20;
int baseVal1 = -1;
if (x20_encShift != 0x20)
baseVal1 = 1 << (x20_encShift - 1);
int bit = diff & 7;
x20_encShift = 0;
int count = (diff >> 3) + ((-bit | bit) >> 31);
int baseVal2 = (baseVal1 & (x1c_encVal >> rem)) << diff;
in.readBytesToBuf(&x1c_encVal, count);
int baseVal3 = -1;
if (diff != 0x20)
baseVal3 = 1 << (diff - 1);
int tmpShift = x20_encShift;
x20_encShift = (count << 3);
ret = baseVal2 | (baseVal3 & (x1c_encVal >> (diff - 0x20))) << tmpShift;
x20_encShift = diff - x20_encShift;
x1c_encVal = x1c_encVal >> diff;
}
return ret;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment