The goal of this project is to implement the Rijndael (AES) encryption system using Verilog. To do this, several separate sections of the algorithm will be coded to work together towards the end goal of performing the correct encryption routines. The algorithm lends itself well towards parallel computations acting on separate sections of the data during the different stages in each round.
AES encryption is done in rounds, similar to DES and IDEA. Each round of encryption consists of four steps. These steps are byte substitution, row shifting, column transformation, and round key addition. The interaction of these steps can be seen in more detail in the figures below.