예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
        }