You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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: