def mix_columns(state):
    """
    Transformation in the Cipher that takes all of the columns of the State and
    mixes their data (independently of one another) to produce new columns.
    """
    state = state.reshape(4, 4, 8)
    return fcat(
        multiply(MA, state[0]),
        multiply(MA, state[1]),
        multiply(MA, state[2]),
        multiply(MA, state[3]),
    )