Skip to content
Michael Mattioli edited this page Feb 23, 2020 · 3 revisions

Introduction

AES-128 uses a 128-bit secret key, 128-bit plain text, and 128-bit cipher text. Since we are working with 128-bit data, we can represent 128 bits as 16 bytes. Those 16 bytes can be visually represented using a 4x4 grid as shown here (where a is the input data).

a0,0 a0,1 a0,2 a0,3
a1,0 a1,1 a1,2 a1,3
a2,0 a2,1 a2,2 a2,3
a3,0 a3,1 a3,2 a3,3

This is also sometimes represented as b0...b16 (representing each of the 16 bytes) arranged as such.

b0 b4 b8 b12
b1 b5 b9 b13
b2 b6 b10 b14
b3 b7 b11 b15

Throughout the documentation and the commented designs, the aforementioned representation is used when explaining how operations are performed and data is manipulated.

All of the operations have been documented in this wiki. All synthesizable designs have been commented throughout to help correlate with the documentation on this wiki and help with overall understanding.

Design verification

Testbenches have been written for all of the operations. Test vectors have been sourced from a variety of places:

Clone this wiki locally