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; } }