private void MixColumns() { byte[,] buffer = new byte[4, 4]; for (int i = 0; i < 4; i++) { for (int num2 = 0; num2 < 4; num2++) { buffer[i, num2] = this.State[i, num2]; } } for (int num2 = 0; num2 < 4; num2++) { this.State[0, num2] = (CryptoEngineAES.gfmultby02(buffer[0, num2]) ^ CryptoEngineAES.gfmultby03(buffer[1, num2]) ^ CryptoEngineAES.gfmultby01(buffer[2, num2]) ^ CryptoEngineAES.gfmultby01(buffer[3, num2])); this.State[1, num2] = (CryptoEngineAES.gfmultby01(buffer[0, num2]) ^ CryptoEngineAES.gfmultby02(buffer[1, num2]) ^ CryptoEngineAES.gfmultby03(buffer[2, num2]) ^ CryptoEngineAES.gfmultby01(buffer[3, num2])); this.State[2, num2] = (CryptoEngineAES.gfmultby01(buffer[0, num2]) ^ CryptoEngineAES.gfmultby01(buffer[1, num2]) ^ CryptoEngineAES.gfmultby02(buffer[2, num2]) ^ CryptoEngineAES.gfmultby03(buffer[3, num2])); this.State[3, num2] = (CryptoEngineAES.gfmultby03(buffer[0, num2]) ^ CryptoEngineAES.gfmultby01(buffer[1, num2]) ^ CryptoEngineAES.gfmultby01(buffer[2, num2]) ^ CryptoEngineAES.gfmultby02(buffer[3, num2])); } }
private static byte gfmultby0e(byte b) { return(CryptoEngineAES.gfmultby02(CryptoEngineAES.gfmultby02(CryptoEngineAES.gfmultby02(b))) ^ CryptoEngineAES.gfmultby02(CryptoEngineAES.gfmultby02(b)) ^ CryptoEngineAES.gfmultby02(b)); }
private static byte gfmultby03(byte b) { return(CryptoEngineAES.gfmultby02(b) ^ b); }
private static byte gfmultby09(byte b) { return((byte)(CryptoEngineAES.gfmultby02(CryptoEngineAES.gfmultby02(CryptoEngineAES.gfmultby02(b))) ^ b)); }