Workflow

  1. 1.
    Define sample data from NIST-800-38A appendix F for ECB mode.
    #define AES_EXAMPLE_REFBUF_SIZE 4
    
    /* @{ */
    uint32_t ref_plain_text[AES_EXAMPLE_REFBUF_SIZE] = {
        0xe2bec16b,
        0x969f402e,
        0x117e3de9,
        0x2a179373
    };
    
    uint32_t ref_cipher_text_ecb[AES_EXAMPLE_REFBUF_SIZE] = {
        0xb47bd73a,
        0x60367a0d,
        0xf3ca9ea8,
        0x97ef6624
    };
    
    const uint32_t key128[4] = {
        0x16157e2b,
        0xa6d2ae28,
        0x8815f7ab,
        0x3c4fcf09
    };
    /* @} */
    
  2. 2.
    Create related module variable and software instance structure.
    /* Output data array */
    static uint32_t output_data[AES_EXAMPLE_REFBUF_SIZE];
    
    /* State indicate */
    volatile bool state = false;
    /* AES configuration */
    struct aes_config g_aes_cfg;
    /* AES instance*/
    struct aes_module aes_instance;
    struct usart_module usart_instance;
    
  3. 3.
    Configure, initialize, and enable AES module.
    1. 3.1.
      Configuration AES struct, which can be filled out to adjust the configuration of a physical AES peripheral.
      aes_get_config_defaults(&g_aes_cfg);
      
    2. 3.2.
      Initialize the AES configuration struct with the module's default values.
      aes_init(&aes_instance,AES, &g_aes_cfg);
      
    3. 3.3.
      Enable the AES module.
      aes_enable(&aes_instance);