예제 #1
0
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)))
예제 #2
0
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)