internal static void Permutation(byte[] input, byte[] output, uint[] permTab, bool preSwap)
{
if (preSwap && BitConverter.IsLittleEndian)
{
DESTransform.BSwap(input);
}
int num = input[0] >> 4 << 1;
int num2 = 32 + ((int)(input[0] & 15) << 1);
uint num3 = permTab[num++] | permTab[num2++];
uint num4 = permTab[num] | permTab[num2];
int num5 = DESTransform.BLOCK_BYTE_SIZE << 1;
int i = 2;
int num6 = 1;
while (i < num5)
{
int num7 = (int)input[num6];
num = (i << 5) + (num7 >> 4 << 1);
num2 = (i + 1 << 5) + ((num7 & 15) << 1);
num3 |= (permTab[num++] | permTab[num2++]);
num4 |= (permTab[num] | permTab[num2]);
i += 2;
num6++;
}
if (preSwap || !BitConverter.IsLittleEndian)
{
output[0] = (byte)num3;
output[1] = (byte)(num3 >> 8);
output[2] = (byte)(num3 >> 16);
output[3] = (byte)(num3 >> 24);
output[4] = (byte)num4;
output[5] = (byte)(num4 >> 8);
output[6] = (byte)(num4 >> 16);
output[7] = (byte)(num4 >> 24);
}
else
{
output[0] = (byte)(num3 >> 24);
output[1] = (byte)(num3 >> 16);
output[2] = (byte)(num3 >> 8);
output[3] = (byte)num3;
output[4] = (byte)(num4 >> 24);
output[5] = (byte)(num4 >> 16);
output[6] = (byte)(num4 >> 8);
output[7] = (byte)num4;
}
}