14.2.3.3.2 AES Engine
AES engine can be used to encrypt/decrypt stream of bytes. With APIs provided by HAL, it is possible to perform CBC/ECB - encryption/decryption the APIs HAL_AES_EncryptReq() and inputs are explained below with example
void HAL_AES_EncryptReq(HAL_AES_EncryptReq_t *reqParams_s)
The following actions in the enum, can be performed with the above API
/** Defines HAL AES commands such as setkey, cbc encrypt, cbc decrypt etc */ typedef enum { SM_SET_KEY_COMMAND = 0, SM_ECB_ENCRYPT_COMMAND, SM_CBC_ENCRYPT_COMMAND, SM_ECB_DECRYPT_COMMAND, SM_CBC_DECRYPT_COMMAND, } HAL_AesCmd_t;
1. To set the key in the AES engine before performing encryption/decryption
/* Declare a memory for Encrypt request*/ HAL_AES_EncryptReq_t appSetKeyReq; /* define a callback after key is set*/ void setAesKeyConf(void) { .. } appSetKeyReq.aesCmd = SM_SET_KEY_COMMAND; appSetKeyReq.text = &key; // 16 bytes of key appSetKeyReq.blockcount = 1; // 128-bit block appSetKeyReq.encryptConf = setAesKeyConf; HAL_AES_EncryptReq(&appSetKeyReq);
2. To perform ECB encryption after setting the key
/* Declare a memory for Encrypt request*/ HAL_AES_EncryptReq_t appEncryptReq; /* define a callback after key is set*/ void aesEncryptConf(void) { // Action to be taken after the encryption is completed for a block .. .. } appEncryptReq.aesCmd = SM_ECB_ENCRYPT_COMMAND; appEncryptReq.text = &text; // 16 bytes of text to encrypt appEncryptReq.blockcount = 1; // 128-bit block appEncryptReq.encryptConf = aesEncryptConf; HAL_AES_EncryptReq(&appEncryptReq);