| 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. |