blob: de36f64bdab2df08e86a5662cb5b7a268ff0d1c8 [file] [log] [blame] [view]
AES Model & OpenSSL/BoringSSL Interface
=======================================
This directory contains a basic C model of the AES unit's cipher core including
OpenSSL/BoringSSL library interface functions. This infrastructure targets
functional verification of the AES unit during the design phase as well as
actual design verification.
In addition, this directory also contains two example applications.
1. `aes_example`:
- Allows printing of intermediate results for debugging the AES cipher core.
- Shows how to interface the C model and how to use the OpenSSL/BoringSSL
interface.
- Checks the output of the model versus the expected results.
- Checks the output of the model versus the output of the BoringSSL/OpenSSL
library.
- Supports ECB mode only.
2. `aes_modes`:
- Shows how to interface the OpenSSL/BoringSSL interface functions.
- Checks the output of BoringSSL/OpenSSL versus expected results.
- Supports ECB, CBC, CTR modes.
How to build and run the examples
---------------------------------
Open the makefile and update the variable BORING_SSL_PATH pointing to the
BoringSSL directory on your machine. If make cannot find the crypto library in
that directory, the example is automatically linked to OpenSSL instead of
BoringSSL.
Simply execute
```make```
to build both example applications and
```./aes_example KEY_LEN_BYTES```
to run `aes_example`. The optional argument `KEY_LEN_BYTES` determines the key
length in bytes and is either 16, 24, or 32 for AES-128, 192 or 256,
respectively. By default, a key length of 16 Bytes is used (AES-128).
To run the second example, simply type
```./aes_modes```
Details of the model
--------------------
- `aes.c/h`: Contains the C model of the AES unit's cipher core.
- `crypto.c/h`: Contains BoringSSL/OpenSSL library interface functions.
- `aes_example.c/h`: Contains the first example application including test input
and expected output for ECB mode.
- `aes_modes.c/h`: Contains the second example application including test input
and expected output for ECB, CBC, CTR modes.