Feistel cipher

In the early 1970's Horst Feistel developed the following idea for an iterated block cipher.

Split the plaintext block into 2 pieces, (L0, R0)

For each round i =1,2,...,n, compute

     Li = Ri-1
     Ri = Li-1 ⊕ f(Ri-1, Ki)

where f is the round function and Ki is the sub-key.

Then the ciphertext is (Ln, Rn).

Regardless of the function f, decryption is accomplished via


     Ri-1 = Li
     Li-1 = Ri ⊕ f(Ri-1, Ki)