def METHOD_NAME(self, data, K, s, S, L1, L2, L3, L4):
    if len(data) != 16:
        raise ValueError('wrong block length')
    rds = len(K) - 1
    (s1, s2, s3) = s
    a = [0, 0, 0, 0]
    t = [(_cw(data[4 * i:4 * i + 4]) ^ K[0][i])for i in xrange(0, 4)]
    for r in xrange(1, rds):
        for i in xrange(0, 4):
            a[i] = L1[(t[i] >> 24) & 255]
            a[i] ^= L2[(t[(i + s1) % 4] >> 16) & 255]
            a[i] ^= L3[(t[(i + s2) % 4] >> 8) & 255]
            a[i] ^= L4[t[(i + s3) % 4] & 255] ^ K[r][i]
        t = copy.copy(a)
    rst = []
    for i in xrange(0, 4):
        tt = K[rds][i]
        rst.append((S[(t[i] >> 24) & 255] ^ (tt >> 24)) & 255)
        rst.append((S[(t[(i + s1) % 4] >> 16) & 255] ^ (tt >> 16)) & 255)
        rst.append((S[(t[(i + s2) % 4] >> 8) & 255] ^ (tt >> 8)) & 255)
        rst.append((S[t[(i + s3) % 4] & 255] ^ tt) & 255)
    return rst