def feistel_s(plaintext_byte_s, keys_s): l, r = init_perm_b(plaintext_byte_s) for i in range(16): l, r = r, xor_s(l, f(r, keys_s[i])) l, r = r, l return map(lambda bits: "".join(bits), take(inverse_init_perm_b(l + r)))
def f(r, k): e = map_(r, table=expansion_table) mid = xor_s(e, k) sbox_res = [] for i in range(0, 48, 6): cur_sbox = sbox[i / 6] coord = (b2i_d[mid[i] + mid[i + 5]], b2i_d[mid[i + 1] + mid[i + 2] + mid[i + 3] + mid[i + 4]]) sbox_res.append(i2b_d[cur_sbox[coord[0]][coord[1]]]) sbox_res = "".join(sbox_res) return map_(sbox_res, table=sbox_perm_table)