def ad.aes.mix

bend-osdev-aead@0.1.0.0 · aesround.bend:156

import bend-osdev-aead@0.1.0.0/aesround.bend as Aesround
import Base

156# MixColumns of one column a0 .. a3 (row 0 first), as a word
157def ad.aes.mix(+a0: U32, +a1: U32, +a2: U32, +a3: U32) -> U32:
158  +b0 = U32.xor(U32.xor(ad.aes.x2(a0), U32.xor(ad.aes.x2(a1), a1)), U32.xor(a2, a3))
159  +b1 = U32.xor(U32.xor(a0, ad.aes.x2(a1)), U32.xor(U32.xor(ad.aes.x2(a2), a2), a3))
160  +b2 = U32.xor(U32.xor(a0, a1), U32.xor(ad.aes.x2(a2), U32.xor(ad.aes.x2(a3), a3)))
161  +b3 = U32.xor(U32.xor(U32.xor(ad.aes.x2(a0), a0), a1), U32.xor(a2, ad.aes.x2(a3)))
162  U32.or(U32.or(U32.shln(b0, 24n), U32.shln(b1, 16n)), U32.or(U32.shln(b2, 8n), b3))

Uses (5)

Used by (1)