48 #include "../inc/hw_types.h" 49 #include "../inc/hw_memmap.h" 50 #include "../inc/hw_aes.h" 56 #define AES_BLOCK_SIZE 16U 57 #define AES_BLOCK_SIZE_WORDS (AES_BLOCK_SIZE / 4U) 58 #define AES_BLOCK_SIZE_MULTIPLE_MASK 0xFFFFFFF0U 59 #define AES_BLOCK_SIZE_MULTIPLE_LENGTH(len) ((len)&AES_BLOCK_SIZE_MULTIPLE_MASK) 60 #define AES_NON_BLOCK_SIZE_MULTIPLE_MASK 0x0000000FU 61 #define AES_NON_BLOCK_SIZE_MULTIPLE_LENGTH(len) ((len)&AES_NON_BLOCK_SIZE_MULTIPLE_MASK) 62 #define AES_GET_NUM_BLOCKS(len) ((len) >> 4) 63 #define AES_BLOCKS_TO_BYTES(numBlocks) ((numBlocks) << 4) 65 #define AES_DOUBLE_BLOCK_SIZE_MULTIPLE_MASK (size_t)(0xFFFFFFE0UL) 67 #define AES_IV_LENGTH_BYTES AES_BLOCK_SIZE 68 #define AES_TAG_LENGTH_BYTES AES_BLOCK_SIZE 70 #define AES_128_KEY_LENGTH_BYTES (128U / 8U) 72 #define IS_WORD_ALIGNED(ptr) (((uintptr_t)(ptr) << 30) == 0U) 74 #define AES_ICLR_ALL \ 75 ((uint32_t)AES_ICLR_AESDONE | (uint32_t)AES_ICLR_AESSTART | (uint32_t)AES_ICLR_CHADONE | (uint32_t)AES_ICLR_CHBDONE) 94 void AESProcessAlignedBlocksCMAC(
const uint32_t *input, uint32_t numBlocks);
106 void AESProcessAlignedBlocksCTR(
const uint32_t *input, uint32_t *output, uint32_t numBlocks);
118 void AESProcessAlignedBlocksECB(
const uint32_t *input, uint32_t *output, uint32_t numBlocks);
135 void AESCopyBlock(
void *dst,
const void *src);
147 AESCopyBlock((
void *)(AES_BASE + AES_O_KEY0), key);
161 AESCopyBlock((
void *)(AES_BASE + AES_O_BUF0), buf);
175 HWREG(AES_BASE + AES_O_BUF0) = buf[0];
176 HWREG(AES_BASE + AES_O_BUF1) = buf[1];
177 HWREG(AES_BASE + AES_O_BUF2) = buf[2];
178 HWREG(AES_BASE + AES_O_BUF3) = buf[3];
191 AESCopyBlock(buf, (
const void *)(AES_BASE + AES_O_BUF0));
204 buf[0] = HWREG(AES_BASE + AES_O_BUF0);
205 buf[1] = HWREG(AES_BASE + AES_O_BUF1);
206 buf[2] = HWREG(AES_BASE + AES_O_BUF2);
207 buf[3] = HWREG(AES_BASE + AES_O_BUF3);
221 AESCopyBlock((
void *)(AES_BASE + AES_O_TXTX0), txtxor);
235 HWREG(AES_BASE + AES_O_TXTX0) = txtxor[0];
236 HWREG(AES_BASE + AES_O_TXTX1) = txtxor[1];
237 HWREG(AES_BASE + AES_O_TXTX2) = txtxor[2];
238 HWREG(AES_BASE + AES_O_TXTX3) = txtxor[3];
252 AESCopyBlock(txtxbuf, (
const void *)(AES_BASE + AES_O_TXTXBUF0));
266 AESCopyBlock((
void *)(AES_BASE + AES_O_TXT0), txt);
280 HWREG(AES_BASE + AES_O_TXT0) = txt[0];
281 HWREG(AES_BASE + AES_O_TXT1) = txt[1];
282 HWREG(AES_BASE + AES_O_TXT2) = txt[2];
283 HWREG(AES_BASE + AES_O_TXT3) = txt[3];
297 AESCopyBlock(txt, (
const void *)(AES_BASE + AES_O_TXT0));
311 txt[0] = HWREG(AES_BASE + AES_O_TXT0);
312 txt[1] = HWREG(AES_BASE + AES_O_TXT1);
313 txt[2] = HWREG(AES_BASE + AES_O_TXT2);
314 txt[3] = HWREG(AES_BASE + AES_O_TXT3);
390 HWREG(AES_BASE + AES_O_AUTOCFG) = autoCfg;
402 uint32_t autoCfg = HWREG(AES_BASE + AES_O_AUTOCFG);
405 autoCfg &= (uint32_t)~AES_AUTOCFG_TRGAES_M;
407 HWREG(AES_BASE + AES_O_AUTOCFG) = autoCfg;
419 uint32_t autoCfg = HWREG(AES_BASE + AES_O_AUTOCFG);
422 autoCfg &= (uint32_t)~AES_AUTOCFG_BUSHALT_M;
424 HWREG(AES_BASE + AES_O_AUTOCFG) = autoCfg;
438 return (HWREG(AES_BASE + AES_O_STA) & AES_STA_STATE_M);
456 HWREG(AES_BASE + AES_O_TRG) = triggerMask;
469 HWREG(AES_BASE + AES_O_ABORT) = AES_ABORT_ABORTAES_SET;
481 HWREG(AES_BASE + AES_O_CLR) = AES_CLR_TXT_M;
493 HWREG(AES_BASE + AES_O_CLR) = AES_CLR_BUF_M;
506 HWREG(AES_BASE + AES_O_CLR) = AES_CLR_TXT_M | AES_CLR_BUF_M;
585 return HWREG(AES_BASE + AES_O_RIS);
603 HWREG(AES_BASE + AES_O_ISET) = intFlags;
620 HWREG(AES_BASE + AES_O_ICLR) = intFlags;
636 return HWREG(AES_BASE + AES_O_MIS);
653 HWREG(AES_BASE + AES_O_IMASK) = intFlags;
672 HWREG(AES_BASE + AES_O_DMA) = dmaConfig;
683 HWREG(AES_BASE + AES_O_DMA) = AES_DMA_DONEACT_DIS | AES_DMA_TRGCHB_DIS | AES_DMA_TRGCHA_DIS;
#define __STATIC_INLINE
Definition: cmsis_gcc.h:47