'Similar to mix_columns above, but performed in inverse for decryption.'

def mix_columns_inv(self, block):

    mul_9 = gf_mul_by_9
    mul_11 = gf_mul_by_11
    mul_13 = gf_mul_by_13
    mul_14 = gf_mul_by_14
    for i in xrange(4):
        col = (i * 4)
        (v0, v1, v2, v3) = (block[col], block[(col + 1)], block[(col + 2)], block[(col + 3)])
        block[col] = (((mul_14[v0] ^ mul_9[v3]) ^ mul_13[v2]) ^ mul_11[v1])
        block[(col + 1)] = (((mul_14[v1] ^ mul_9[v0]) ^ mul_13[v3]) ^ mul_11[v2])
        block[(col + 2)] = (((mul_14[v2] ^ mul_9[v1]) ^ mul_13[v0]) ^ mul_11[v3])
        block[(col + 3)] = (((mul_14[v3] ^ mul_9[v2]) ^ mul_13[v1]) ^ mul_11[v0])
