summaryrefslogtreecommitdiffstats
path: root/lib/aes.go
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2020-12-06 14:48:06 -0500
committerrsiddharth <s@ricketyspace.net>2020-12-06 14:48:06 -0500
commitcdfb7d117266b541f09ee731fe4ba075faf285bd (patch)
treeed57ded344bfdb0d2d34bed7f8fd0650311d450b /lib/aes.go
parent89238b1ebae839fb6d22d70dbe32dcdf205db158 (diff)
lib/aes: add aesMixColumns
Diffstat (limited to 'lib/aes.go')
-rw-r--r--lib/aes.go19
1 files changed, 19 insertions, 0 deletions
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.