private byte[] InverseSecondRound(byte[] cipherText, byte[] roundKey) { var inversedRoundKey = Aes16Helper.AddRoundKey(cipherText, roundKey); var inversedShiftRow = Aes16Helper.ShiftRow(inversedRoundKey); var inversedNibbleSubstitution = Aes16Helper.InverseNibbleSubstitution(inversedShiftRow); return(inversedNibbleSubstitution); }
private byte[] InverseFirstRound(byte[] firstRoundCipherText, byte[] roundKey) { var inversedRoundKey = Aes16Helper.AddRoundKey(firstRoundCipherText, roundKey); var inversedMixColumns = Aes16Helper.InverseMixColumns(inversedRoundKey); var inversedShiftRow = Aes16Helper.ShiftRow(inversedMixColumns); var inversedNibbleSubstitution = Aes16Helper.InverseNibbleSubstitution(inversedShiftRow); return(inversedNibbleSubstitution); }
private byte[] GetFirstRoundResult(byte[] zeroRoundResult, byte[] roundKey) { // Nibble substitution var nibbled = Aes16Helper.NibbleSubstitution(zeroRoundResult); // Shift row var shiftedRowBytes = Aes16Helper.ShiftRow(nibbled); var mixedBytes = Aes16Helper.MixColumns(shiftedRowBytes); return(Aes16Helper.AddRoundKey(new[] { mixedBytes[0], mixedBytes[1] }, roundKey)); }