def METHOD_NAME(data):
    new_data = np.zeros(data.shape[0] + 16, dtype=data.dtype)
    new_data[:data.shape[0]] = data
    new_data = np.flipud(new_data)
    for i in range(data.shape[0]):
        i = new_data.shape[0] - i - 1
        z = rev[new_data[i] ^ new_data[15]]
        for j in range(16):
            j = 15 - j
            if j == 0:
                x = 0
            else:
                x = new_data[j - 1]
            if z != 0xFF:
                y = gg[j]
                if y != 0xFF:
                    y += z
                    if y >= 0xFF:
                        y -= 0xFF
                    x ^= pow[y]
            new_data[j] = x
    new_data[:16] = ~new_data[:16]
    new_data = np.flipud(new_data)
    return new_data