DES Key Schedule (Round Keys Generation) Algorithm

This section describes DES (Data Encryption Standard) algorithm - A 16-round Feistel cipher with block size of 64 bits.

Key schedule algorithm:

```Input:
K: 64-bit key
PC1: Permuted choice 1
PC2: Permuted choice 2
r1, r2, ..., r16: left shifts (rotations)

Output:
k1, k2, ..., k16: 16 48-bit round keys

Algorithm:
K' = PC1(K), applying permuted choice 1 and returning 56 bits
(C0, D0) = K', dividing K' into two 28-bit parts
(C1, D1) = (r1(C0), r1(D0)), shifting to the left
k1 = PC2(C1,D1), applying permuted choice 2 and returning 48 bits
(C2, D2) = (r2(C1), r2(D1)), shifting to the left
k2 = PC2(C2,D2), applying permuted choice 2 and returning 48 bits
......
k16 = PC2(C16,D16)
```

DES key schedule supporting tables:

Permuted Choice 1 - PC1:

```57   49    41   33    25    17    9
1   58    50   42    34    26   18
10    2    59   51    43    35   27
19   11     3   60    52    44   36
63   55    47   39    31    23   15
7   62    54   46    38    30   22
14    6    61   53    45    37   29
21   13     5   28    20    12    4
```

Permuted Choice 2 - PC2:

```14    17   11    24     1    5
3    28   15     6    21   10
23    19   12     4    26    8
16     7   27    20    13    2
41    52   31    37    47   55
30    40   51    45    33   48
44    49   39    56    34   53
46    42   50    36    29   32
```

Left shifts (number of bits to rotate) - r1, r2, ..., r16:

``` r1  r2  r3  r4  r5  r6  r7  r8  r9 r10 r11 r12 r13 r14 r15 r16
1   1   2   2   2   2   2   2   1   2   2   2   2   2   2   1
```