AES example for SAM.
This file defines a useful set of functions for the AES on SAM devices.
Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries.
#include <asf.h>
#include <string.h>
Macros | |
#define | AES_EXAMPLE_REFBUF_SIZE 4 |
#define | PDCA_RX_CHANNEL 0 |
#define | PDCA_TX_CHANNEL 1 |
Functions | |
static void | aes_callback (void) |
The AES interrupt call back function. More... | |
static void | aes_callback_pdca (void) |
The AES interrupt call back function. More... | |
static void | cbc_mode_test (void) |
CBC mode encryption and decryption test. More... | |
static void | cfb128_mode_test (void) |
CFB128 mode encryption and decryption test. More... | |
static void | configure_console (void) |
Configure serial console. More... | |
static void | ctr_mode_test (void) |
CTR mode encryption and decryption test. More... | |
static void | display_menu (void) |
Display the user menu on the terminal. More... | |
static void | ecb_mode_test (void) |
ECB mode encryption and decryption test. More... | |
static void | ecb_mode_test_pdca (void) |
ECB mode encryption and decryption test with PDCA. More... | |
int | main (void) |
The main function. More... | |
static void | ofb_mode_test (void) |
OFB mode encryption and decryption test. More... | |
Variables | |
struct aes_config | g_aes_cfg |
AES configuration. More... | |
struct aes_dev_inst | g_aes_inst |
AES instance. More... | |
static uint32_t | output_data [AES_EXAMPLE_REFBUF_SIZE] |
pdca_channel_config_t | PDCA_RX_OPTIONS |
PDCA channel options. More... | |
pdca_channel_config_t | PDCA_TX_OPTIONS |
volatile bool | state = false |
sample data from NIST-800-38A appendix F | |
const uint32_t | ref_plain_text [AES_EXAMPLE_REFBUF_SIZE] |
Reference plain data. More... | |
const uint32_t | ref_cipher_text_ecb [AES_EXAMPLE_REFBUF_SIZE] |
Reference ECB cipher data. More... | |
const uint32_t | ref_cipher_text_cbc [AES_EXAMPLE_REFBUF_SIZE] |
Reference CBC cipher data. More... | |
const uint32_t | ref_cipher_text_cfb128 [AES_EXAMPLE_REFBUF_SIZE] |
Reference CFB128 cipher data. More... | |
const uint32_t | ref_cipher_text_ofb [AES_EXAMPLE_REFBUF_SIZE] |
Reference OFB cipher data. More... | |
const uint32_t | ref_cipher_text_ctr [AES_EXAMPLE_REFBUF_SIZE] |
Reference CTR cipher data. More... | |
const uint32_t | key128 [4] |
Cipher 128 bits key array. More... | |
const uint32_t | init_vector [4] |
Init vector array for ECB, CBC, CFB128 and OFB mode. More... | |
const uint32_t | init_vector_ctr [4] |
Init vector array for CTR mode. More... | |
#define AES_EXAMPLE_REFBUF_SIZE 4 |
Referenced by ecb_mode_test_pdca().
#define PDCA_RX_CHANNEL 0 |
Referenced by aes_callback_pdca(), and ecb_mode_test_pdca().
#define PDCA_TX_CHANNEL 1 |
Referenced by ecb_mode_test_pdca().
|
static |
The AES interrupt call back function.
References aes_read_output_data(), g_aes_inst, output_data, and state.
Referenced by ecb_mode_test_pdca(), and main().
|
static |
The AES interrupt call back function.
References PDCA_CH_TRANSFER_COMPLETED, pdca_channel_enable(), pdca_get_channel_status(), PDCA_RX_CHANNEL, and state.
Referenced by ecb_mode_test_pdca().
|
static |
CBC mode encryption and decryption test.
References AES_CBC_MODE, AES_CFB_SIZE_128, aes_dev_inst::aes_cfg, AES_COUNTERMEASURE_TYPE_ALL, AES_DECRYPTION, AES_ENCRYPTION, AES_KEY_SIZE_128, AES_MANUAL_MODE, aes_set_config(), aes_set_new_message(), aes_write_initvector(), aes_write_input_data(), aes_write_key(), aes_config::cfb_size, aes_config::countermeasure_mask, aes_config::dma_mode, aes_config::encrypt_mode, g_aes_inst, init_vector, key128, aes_config::key_size, aes_config::opmode, output_data, ref_cipher_text_cbc, ref_plain_text, and state.
Referenced by main().
|
static |
CFB128 mode encryption and decryption test.
References AES_CFB_MODE, AES_CFB_SIZE_128, aes_dev_inst::aes_cfg, AES_COUNTERMEASURE_TYPE_ALL, AES_DECRYPTION, AES_ENCRYPTION, AES_KEY_SIZE_128, AES_MANUAL_MODE, aes_set_config(), aes_set_new_message(), aes_write_initvector(), aes_write_input_data(), aes_write_key(), aes_config::cfb_size, aes_config::countermeasure_mask, aes_config::dma_mode, aes_config::encrypt_mode, g_aes_inst, init_vector, key128, aes_config::key_size, aes_config::opmode, output_data, ref_cipher_text_cfb128, ref_plain_text, and state.
Referenced by main().
|
static |
Configure serial console.
References uart_rs232_options::baudrate, and stdio_serial_init().
Referenced by main().
|
static |
CTR mode encryption and decryption test.
References AES_CFB_SIZE_128, aes_dev_inst::aes_cfg, AES_COUNTERMEASURE_TYPE_ALL, AES_CTR_MODE, AES_DECRYPTION, AES_ENCRYPTION, AES_KEY_SIZE_128, AES_MANUAL_MODE, aes_set_config(), aes_set_new_message(), aes_write_initvector(), aes_write_input_data(), aes_write_key(), aes_config::cfb_size, aes_config::countermeasure_mask, aes_config::dma_mode, aes_config::encrypt_mode, g_aes_inst, init_vector_ctr, key128, aes_config::key_size, aes_config::opmode, output_data, ref_cipher_text_ctr, ref_plain_text, and state.
Referenced by main().
|
static |
Display the user menu on the terminal.
Referenced by main().
|
static |
ECB mode encryption and decryption test.
References AES_CFB_SIZE_128, aes_dev_inst::aes_cfg, AES_COUNTERMEASURE_TYPE_ALL, AES_DECRYPTION, AES_ECB_MODE, AES_ENCRYPTION, AES_KEY_SIZE_128, AES_MANUAL_MODE, aes_set_config(), aes_set_new_message(), aes_write_input_data(), aes_write_key(), aes_config::cfb_size, aes_config::countermeasure_mask, aes_config::dma_mode, aes_config::encrypt_mode, g_aes_inst, key128, aes_config::key_size, aes_config::opmode, output_data, ref_cipher_text_ecb, ref_plain_text, and state.
Referenced by main().
|
static |
ECB mode encryption and decryption test with PDCA.
References pdca_channel_config_t::addr, aes_callback(), aes_callback_pdca(), AES_CFB_SIZE_128, aes_dev_inst::aes_cfg, AES_COUNTERMEASURE_TYPE_ALL, AES_DECRYPTION, AES_DMA_MODE, AES_ECB_MODE, AES_ENCRYPTION, AES_EXAMPLE_REFBUF_SIZE, AES_INTERRUPT_INPUT_BUFFER_READY, AES_KEY_SIZE_128, aes_set_callback(), aes_set_config(), aes_set_new_message(), aes_write_key(), aes_config::cfb_size, aes_config::countermeasure_mask, aes_config::dma_mode, aes_config::encrypt_mode, g_aes_inst, key128, aes_config::key_size, aes_config::opmode, output_data, pdca_channel_disable(), pdca_channel_enable(), pdca_channel_set_config(), pdca_disable(), pdca_enable(), PDCA_RX_CHANNEL, PDCA_TX_CHANNEL, pdca_channel_config_t::pid, pdca_channel_config_t::r_addr, pdca_channel_config_t::r_size, ref_cipher_text_ecb, ref_plain_text, pdca_channel_config_t::size, state, and pdca_channel_config_t::transfer_size.
Referenced by main().
int main | ( | void | ) |
The main function.
References aes_callback(), aes_enable(), aes_get_config_defaults(), aes_init(), AES_INTERRUPT_INPUT_BUFFER_READY, aes_set_callback(), board_init(), BOARD_NAME, cbc_mode_test(), cfb128_mode_test(), configure_console(), ctr_mode_test(), display_menu(), ecb_mode_test(), ecb_mode_test_pdca(), g_aes_cfg, g_aes_inst, ofb_mode_test(), and sysclk_init().
|
static |
OFB mode encryption and decryption test.
References AES_CFB_SIZE_128, aes_dev_inst::aes_cfg, AES_COUNTERMEASURE_TYPE_ALL, AES_DECRYPTION, AES_ENCRYPTION, AES_KEY_SIZE_128, AES_MANUAL_MODE, AES_OFB_MODE, aes_set_config(), aes_set_new_message(), aes_write_initvector(), aes_write_input_data(), aes_write_key(), aes_config::cfb_size, aes_config::countermeasure_mask, aes_config::dma_mode, aes_config::encrypt_mode, g_aes_inst, init_vector, key128, aes_config::key_size, aes_config::opmode, output_data, ref_cipher_text_ofb, ref_plain_text, and state.
Referenced by main().
struct aes_config g_aes_cfg |
AES configuration.
Referenced by main().
struct aes_dev_inst g_aes_inst |
AES instance.
Referenced by aes_callback(), cbc_mode_test(), cfb128_mode_test(), ctr_mode_test(), ecb_mode_test(), ecb_mode_test_pdca(), main(), ofb_mode_test(), program_memory(), run_cbc_mode_test(), run_cfb128_mode_test(), run_ctr_mode_test(), run_ecb_mode_test(), run_ecb_mode_test_pdca(), and run_ofb_mode_test().
const uint32_t init_vector[4] |
Init vector array for ECB, CBC, CFB128 and OFB mode.
Referenced by cbc_mode_test(), cfb128_mode_test(), ofb_mode_test(), run_cbc_mode_test(), run_cfb128_mode_test(), and run_ofb_mode_test().
const uint32_t init_vector_ctr[4] |
Init vector array for CTR mode.
Referenced by ctr_mode_test(), and run_ctr_mode_test().
const uint32_t key128[4] |
Cipher 128 bits key array.
Referenced by cbc_mode_test(), cfb128_mode_test(), ctr_mode_test(), ecb_mode_test(), ecb_mode_test_pdca(), ofb_mode_test(), run_cbc_mode_test(), run_cfb128_mode_test(), run_ctr_mode_test(), run_ecb_mode_test(), run_ecb_mode_test_pdca(), and run_ofb_mode_test().
|
static |
Referenced by aes_callback(), cbc_mode_test(), cfb128_mode_test(), ctr_mode_test(), ecb_mode_test(), ecb_mode_test_pdca(), and ofb_mode_test().
pdca_channel_config_t PDCA_RX_OPTIONS |
PDCA channel options.
pdca_channel_config_t PDCA_TX_OPTIONS |
const uint32_t ref_cipher_text_cbc[AES_EXAMPLE_REFBUF_SIZE] |
Reference CBC cipher data.
Referenced by cbc_mode_test(), and run_cbc_mode_test().
const uint32_t ref_cipher_text_cfb128[AES_EXAMPLE_REFBUF_SIZE] |
Reference CFB128 cipher data.
Referenced by cfb128_mode_test(), and run_cfb128_mode_test().
const uint32_t ref_cipher_text_ctr[AES_EXAMPLE_REFBUF_SIZE] |
Reference CTR cipher data.
Referenced by ctr_mode_test(), and run_ctr_mode_test().
const uint32_t ref_cipher_text_ecb[AES_EXAMPLE_REFBUF_SIZE] |
Reference ECB cipher data.
Referenced by ecb_mode_test(), ecb_mode_test_pdca(), run_ecb_mode_test(), and run_ecb_mode_test_pdca().
const uint32_t ref_cipher_text_ofb[AES_EXAMPLE_REFBUF_SIZE] |
Reference OFB cipher data.
Referenced by ofb_mode_test(), and run_ofb_mode_test().
const uint32_t ref_plain_text[AES_EXAMPLE_REFBUF_SIZE] |
Reference plain data.
Referenced by cbc_mode_test(), cfb128_mode_test(), ctr_mode_test(), ecb_mode_test(), ecb_mode_test_pdca(), ofb_mode_test(), run_cbc_mode_test(), run_cfb128_mode_test(), run_ctr_mode_test(), run_ecb_mode_test(), run_ecb_mode_test_pdca(), and run_ofb_mode_test().