45#include "lib/assert.h"
50#define CCM_FLAGS_LEN 1
54#define LOG_MODULE "cc2538-ccm-star"
55#define LOG_LEVEL LOG_LEVEL_NONE
58 uint8_t u8[AES_128_BLOCK_SIZE];
59 uint32_t u32[AES_128_BLOCK_SIZE /
sizeof(uint32_t)];
64set_key(
const uint8_t *key)
66 cc2538_aes_128_driver.
set_key(key);
70aead(
const uint8_t *nonce, uint8_t *m, uint16_t m_len,
const uint8_t *a,
71 uint16_t a_len, uint8_t *result, uint8_t mic_len,
int forward)
73 if(!a_len && !m_len) {
81 if(!was_crypto_enabled) {
102 iv.u8[0] = CCM_L - 1;
103 memcpy(iv.u8 + CCM_FLAGS_LEN, nonce, CCM_STAR_NONCE_LENGTH);
104 memset(iv.u8 + CCM_FLAGS_LEN + CCM_STAR_NONCE_LENGTH,
106 AES_128_BLOCK_SIZE - CCM_FLAGS_LEN - CCM_STAR_NONCE_LENGTH);
113 LOG_ERR(
"error at line %d\n", __LINE__);
158 LOG_ERR(
"error at line %d\n", __LINE__);
193 LOG_ERR(
"error at line %d\n", __LINE__);
212 memcpy(result, tag.u8, mic_len);
221 if(!was_crypto_enabled) {
Header file for the cc2538 AES driver.
Header file of the AES-128 driver for the CC2538 SoC.
Header file of the AES-CCM* driver for the CC2538 SoC.
#define AES_CTRL_INT_CLR
Interrupt clear.
#define AES_AES_IV_0
AES initialization vector.
#define AES_AES_CTRL_SAVED_CONTEXT_READY
AES auth.
#define AES_DMAC_CH1_CTRL
Channel 1 control.
#define AES_AES_CTRL_DIRECTION_ENCRYPT
Encrypt.
#define AES_AES_CTRL_CTR_WIDTH_128
CTR counter width: 128 bits.
#define AES_CTRL_INT_CFG
Interrupt configuration.
#define AES_AES_TAG_OUT_2
TAG.
#define AES_CTRL_INT_CFG_LEVEL
Level interrupt type.
#define AES_DMAC_CH1_DMALENGTH
Channel 1 DMA length.
#define AES_AES_IV_3
AES initialization vector.
#define AES_AES_CTRL_CCM_M_S
CCM auth.
#define AES_CTRL_INT_EN_DMA_IN_DONE
DMA input done interrupt enabled.
#define AES_AES_CTRL
AES input/output buffer control and mode.
#define AES_AES_CTRL_CCM_L_S
CCM length field width shift.
#define AES_CTRL_INT_STAT_KEY_ST_RD_ERR
Read error detected.
#define AES_CTRL_INT_STAT_DMA_BUS_ERR
DMA bus error detected.
#define AES_AES_AUTH_LENGTH
Authentication length.
#define AES_AES_CTRL_CCM
AES-CCM mode.
#define AES_DMAC_CH0_CTRL
Channel 0 control.
#define AES_DMAC_CH_CTRL_EN
Channel enable.
#define AES_KEY_STORE_READ_AREA_BUSY
Key store operation busy.
#define AES_AES_IV_2
AES initialization vector.
#define AES_AES_TAG_OUT_1
TAG.
#define AES_CTRL_INT_CLR_DMA_IN_DONE
Clear DMA in done interrupt.
#define AES_DMAC_CH0_EXTADDR
Channel 0 external address.
#define AES_CTRL_INT_EN_RESULT_AV
Result available interrupt enabled.
#define AES_KEY_STORE_READ_AREA
Key store read area.
#define AES_DMAC_CH1_EXTADDR
Channel 1 external address.
#define AES_AES_C_LENGTH_1
AES crypto length (MSW)
#define AES_AES_TAG_OUT_0
TAG.
#define AES_AES_CTRL_SAVE_CONTEXT
Auth.
#define AES_AES_TAG_OUT_3
TAG.
#define AES_AES_C_LENGTH_0
AES crypto length (LSW)
#define AES_CTRL_INT_STAT_DMA_IN_DONE
DMA data in done interrupt status.
#define AES_CTRL_INT_CLR_RESULT_AV
Clear result available interrupt.
#define AES_CTRL_ALG_SEL
Algorithm select.
#define AES_CTRL_ALG_SEL_AES
Select AES engine as DMA source/destination.
#define AES_AES_CTRL_CTR
AES-CTR mode.
#define AES_CTRL_INT_STAT
Interrupt status.
#define AES_DMAC_CH0_DMALENGTH
Channel 0 DMA length.
#define AES_CTRL_INT_EN
Interrupt enable.
#define AES_CTRL_INT_STAT_RESULT_AV
Result available interrupt status.
#define AES_AES_IV_1
AES initialization vector.
void crypto_enable(void)
Enables the AES/SHA cryptoprocessor.
#define CRYPTO_IS_ENABLED()
Indicates whether the AES/SHA cryptoprocessor is enabled.
void crypto_disable(void)
Disables the AES/SHA cryptoprocessor.
Header file for the logging system.
void(* set_key)(const uint8_t *key)
Sets the current key.
Structure of CCM* drivers.
void(* aead)(const uint8_t *nonce, uint8_t *m, uint16_t m_len, const uint8_t *a, uint16_t a_len, uint8_t *result, uint8_t mic_len, int forward)
Combines authentication and encryption.
void(* set_key)(const uint8_t *key)
Sets the key in use.