From cdfb7d117266b541f09ee731fe4ba075faf285bd Mon Sep 17 00:00:00 2001 From: rsiddharth Date: Sun, 6 Dec 2020 14:48:06 -0500 Subject: lib/aes: add aesMixColumns --- lib/aes.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'lib/aes.go') diff --git a/lib/aes.go b/lib/aes.go index bd0a86b..4c0c86d 100644 --- a/lib/aes.go +++ b/lib/aes.go @@ -66,6 +66,25 @@ func aesInvCipher(in, ky []byte) []byte { return output } +func aesMixColumns(state [][]byte) [][]byte { + + // Initialize new state. + n_state := make([][]byte, 4) + nb := 4 + for r := 0; r < 4; r++ { + n_state[r] = make([]byte, nb) + } + + // Mix columns transformation. + for c := 0; c < nb; c++ { + n_state[0][c] = GFMultiply(0x02, state[0][c]) ^ GFMultiply(0x03, state[1][c]) ^ state[2][c] ^ state[3][c] + n_state[1][c] = state[0][c] ^ GFMultiply(0x02, state[1][c]) ^ GFMultiply(0x03, state[2][c]) ^ state[3][c] + n_state[2][c] = state[0][c] ^ state[1][c] ^ GFMultiply(0x02, state[2][c]) ^ GFMultiply(0x03, state[3][c]) + n_state[3][c] = GFMultiply(0x03, state[0][c]) ^ state[1][c] ^ state[2][c] ^ GFMultiply(0x02, state[3][c]) + } + return n_state +} + func aesInvMixColumns(state [][]byte) [][]byte { // Initialize new state. -- cgit v1.2.3