47 #ifndef DRIVERLIB_GENERATE_ROM
48 #undef CRYPTOAesLoadKey
49 #define CRYPTOAesLoadKey NOROM_CRYPTOAesLoadKey
51 #define CRYPTOAesEcb NOROM_CRYPTOAesEcb
52 #undef CRYPTOAesEcbStatus
53 #define CRYPTOAesEcbStatus NOROM_CRYPTOAesEcbStatus
54 #undef CRYPTOCcmAuthEncrypt
55 #define CRYPTOCcmAuthEncrypt NOROM_CRYPTOCcmAuthEncrypt
56 #undef CRYPTOCcmAuthEncryptStatus
57 #define CRYPTOCcmAuthEncryptStatus NOROM_CRYPTOCcmAuthEncryptStatus
58 #undef CRYPTOCcmAuthEncryptResultGet
59 #define CRYPTOCcmAuthEncryptResultGet NOROM_CRYPTOCcmAuthEncryptResultGet
60 #undef CRYPTOCcmInvAuthDecrypt
61 #define CRYPTOCcmInvAuthDecrypt NOROM_CRYPTOCcmInvAuthDecrypt
62 #undef CRYPTOCcmInvAuthDecryptStatus
63 #define CRYPTOCcmInvAuthDecryptStatus NOROM_CRYPTOCcmInvAuthDecryptStatus
64 #undef CRYPTOCcmInvAuthDecryptResultGet
65 #define CRYPTOCcmInvAuthDecryptResultGet NOROM_CRYPTOCcmInvAuthDecryptResultGet
66 #undef CRYPTODmaEnable
67 #define CRYPTODmaEnable NOROM_CRYPTODmaEnable
68 #undef CRYPTODmaDisable
69 #define CRYPTODmaDisable NOROM_CRYPTODmaDisable
86 uint32_t ui32KeyLocation)
204 uint32_t ui32KeyLocation,
bool bEncrypt,
359 uint32_t *pui32Nonce, uint32_t *pui32PlainText,
360 uint32_t ui32PlainTextLength, uint32_t *pui32Header,
361 uint32_t ui32HeaderLength, uint32_t ui32KeyLocation,
362 uint32_t ui32FieldLength,
bool bIntEnable)
364 uint8_t ui8InitVec[16];
365 uint32_t ui32CtrlVal;
367 uint32_t *pui32CipherText;
372 pui32CipherText = pui32PlainText;
425 ui8InitVec[0] = ui32FieldLength - 1;
426 for(i = 0; i < 12; i++)
428 ui8InitVec[i + 1] = ((uint8_t*)pui32Nonce)[i];
430 if(ui32FieldLength == 2)
432 ui8InitVec[13] = ((uint8_t*)pui32Nonce)[12];
444 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV0) = ((uint32_t *)&ui8InitVec)[0];
445 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV1) = ((uint32_t *)&ui8InitVec)[1];
446 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV2) = ((uint32_t *)&ui8InitVec)[2];
447 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV3) = ((uint32_t *)&ui8InitVec)[3];
483 if(ui32HeaderLength != 0)
553 (uint32_t)pui32PlainText;
569 (uint32_t)pui32CipherText;
627 uint32_t
volatile ui32Tag[4];
649 ui32Tag[0] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT0);
650 ui32Tag[1] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT1);
651 ui32Tag[2] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT2);
652 ui32Tag[3] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT3);
654 for(ui32Idx = 0; ui32Idx < ui32TagLength ; ui32Idx++)
656 *((uint8_t*)pui32CcmTag + ui32Idx) = *((uint8_t*)ui32Tag + ui32Idx);
675 uint32_t *pui32Nonce, uint32_t *pui32CipherText,
676 uint32_t ui32CipherTextLength,
677 uint32_t *pui32Header, uint32_t ui32HeaderLength,
678 uint32_t ui32KeyLocation,
679 uint32_t ui32FieldLength,
bool bIntEnable)
681 uint8_t ui8InitVec[16];
682 uint32_t ui32CtrlVal;
684 uint32_t *pui32PlainText;
685 uint32_t ui32CryptoBlockLength;
690 pui32PlainText = pui32CipherText;
742 ui8InitVec[0] = ui32FieldLength - 1;
743 for(i = 0; i < 12; i++)
745 ui8InitVec[i + 1] = ((uint8_t*)pui32Nonce)[i];
747 if(ui32FieldLength == 2)
749 ui8InitVec[13] = ((uint8_t*)pui32Nonce)[12];
761 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV0) = ((uint32_t *)&ui8InitVec)[0];
762 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV1) = ((uint32_t *)&ui8InitVec)[1];
763 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV2) = ((uint32_t *)&ui8InitVec)[2];
764 HWREG(
CRYPTO_BASE + CRYPTO_O_AESIV3) = ((uint32_t *)&ui8InitVec)[3];
769 ui32CryptoBlockLength = ui32CipherTextLength - ui32AuthLength;
770 ui32AuthLength = ui32AuthLength < 2 ? 0 : ((ui32AuthLength - 2) >> 1);
802 if(ui32HeaderLength != 0)
872 (uint32_t)pui32CipherText;
888 (uint32_t)pui32PlainText;
945 uint32_t *pui32CipherText,
946 uint32_t ui32CipherTextLength,
947 uint32_t *pui32CcmTag)
949 uint32_t
volatile ui32Tag[4];
950 uint32_t ui32TagIndex;
954 ui32TagIndex = ui32CipherTextLength - ui32AuthLength;
975 ui32Tag[0] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT0);
976 ui32Tag[1] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT1);
977 ui32Tag[2] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT2);
978 ui32Tag[3] = HWREG(
CRYPTO_BASE + CRYPTO_O_AESTAGOUT3);
980 for(ui32Idx = 0; ui32Idx < ui32AuthLength ; ui32Idx++)
982 *((uint8_t*)pui32CcmTag + ui32Idx) = *((uint8_t*)ui32Tag + ui32Idx);
994 for(i = 0; i < ui32AuthLength; i++)
996 if(*((uint8_t *)pui32CcmTag + i) !=
997 (*((uint8_t *)pui32CipherText + ui32TagIndex + i)))
1024 if(ui32Channels & CRYPTO_DMA_CHAN0)
1028 if(ui32Channels & CRYPTO_DMA_CHAN1)
1051 if(ui32Channels & CRYPTO_DMA_CHAN0)
1055 if(ui32Channels & CRYPTO_DMA_CHAN1)
uint32_t CRYPTOCcmAuthEncryptStatus(void)
Check the result of an AES CCM operation.
#define CRYPTO_RESULT_RDY
#define CRYPTO_AES_KEYL0AD
#define CRYPTO_KEY_AREA_3
#define CRYPTO_KEY_AREA_1
#define AES_KEYSTORE_READ_ERROR
#define CRYPTO_KEY_AREA_2
#define CRYPTO_DMA_BUS_ERROR
void IntPendClear(uint32_t ui32Interrupt)
Unpends an interrupt.
#define CRYPTO_AES_CTR_128
uint32_t CRYPTOCcmInvAuthDecrypt(bool bDecrypt, uint32_t ui32AuthLength, uint32_t *pui32Nonce, uint32_t *pui32CipherText, uint32_t ui32CipherTextLength, uint32_t *pui32Header, uint32_t ui32HeaderLength, uint32_t ui32KeyLocation, uint32_t ui32FieldLength, bool bIntEnable)
Start a CCM Decryption and Inverse Authentication operation.
uint32_t CRYPTOAesLoadKey(uint32_t *pui32AesKey, uint32_t ui32KeyLocation)
Write the key into the Key Ram.
uint32_t CRYPTOCcmAuthEncryptResultGet(uint32_t ui32TagLength, uint32_t *pui32CcmTag)
Get the result of an AES-CCM operation.
#define CRYPTO_DMA_IN_DONE
volatile uint32_t g_ui32CurrentAesOp
#define KEY_STORE_SIZE_128
#define CRYPTO_AES128_ENCRYPT
#define CRYPTO_DMA_BUS_ERR
uint32_t CRYPTOCcmInvAuthDecryptStatus(void)
Checks CCM decrypt and Inverse Authentication result.
#define CRYPTO_KEY_AREA_7
#define CRYPTO_KEY_AREA_0
#define CRYPTO_KEY_AREA_5
#define CRYPTO_AES128_DECRYPT
#define CRYPTO_KEY_AREA_4
uint32_t CRYPTOCcmInvAuthDecryptResultGet(uint32_t ui32AuthLength, uint32_t *pui32CipherText, uint32_t ui32CipherTextLength, uint32_t *pui32CcmTag)
Get the result of the CCM operation.
uint32_t CRYPTOAesEcbStatus(void)
Check the result of an AES ECB operation.
#define CCM_AUTHENTICATION_FAILED
#define AES_DMA_BUS_ERROR
void CRYPTODmaDisable(uint32_t ui32Channels)
Disable Crypto DMA operation.
uint32_t CRYPTOAesEcb(uint32_t *pui32MsgIn, uint32_t *pui32MsgOut, uint32_t ui32KeyLocation, bool bEncrypt, bool bIntEnable)
Start an AES-ECB operation (encryption or decryption).
void CRYPTODmaEnable(uint32_t ui32Channels)
Enable Crypto DMA operation.
void CPUdelay(uint32_t ui32Count)
Provide a small delay.
void IntDisable(uint32_t ui32Interrupt)
Disables an interrupt.
void IntEnable(uint32_t ui32Interrupt)
Enables an interrupt.
#define CRYPTO_KEY_AREA_6
uint32_t CRYPTOCcmAuthEncrypt(bool bEncrypt, uint32_t ui32AuthLength, uint32_t *pui32Nonce, uint32_t *pui32PlainText, uint32_t ui32PlainTextLength, uint32_t *pui32Header, uint32_t ui32HeaderLength, uint32_t ui32KeyLocation, uint32_t ui32FieldLength, bool bIntEnable)
Start CCM operation.
#define CRYPTO_KEY_ST_RD_ERR