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)
203 uint32_t ui32KeyLocation,
bool bEncrypt,
363 uint32_t *pui32Nonce, uint32_t *pui32PlainText,
364 uint32_t ui32PlainTextLength, uint32_t *pui32Header,
365 uint32_t ui32HeaderLength, uint32_t ui32KeyLocation,
366 uint32_t ui32FieldLength,
bool bIntEnable)
368 uint32_t ui32CtrlVal;
370 uint32_t *pui32CipherText;
379 pui32CipherText = pui32PlainText;
432 ui8InitVec.b[0] = ui32FieldLength - 1;
433 for(i = 0; i < 12; i++)
435 ui8InitVec.b[i + 1] = ((uint8_t*)pui32Nonce)[i];
437 if(ui32FieldLength == 2)
439 ui8InitVec.b[13] = ((uint8_t*)pui32Nonce)[12];
443 ui8InitVec.b[13] = 0;
445 ui8InitVec.b[14] = 0;
446 ui8InitVec.b[15] = 0;
460 if ( ui32AuthLength >= 2 ) {
492 if(ui32HeaderLength != 0)
573 (uint32_t)pui32PlainText;
584 (uint32_t)pui32CipherText;
646 uint32_t
volatile ui32Tag[4];
673 for(ui32Idx = 0; ui32Idx < ui32TagLength ; ui32Idx++)
675 *((uint8_t*)pui32CcmTag + ui32Idx) = *((uint8_t*)ui32Tag + ui32Idx);
694 uint32_t *pui32Nonce, uint32_t *pui32CipherText,
695 uint32_t ui32CipherTextLength,
696 uint32_t *pui32Header, uint32_t ui32HeaderLength,
697 uint32_t ui32KeyLocation,
698 uint32_t ui32FieldLength,
bool bIntEnable)
700 uint32_t ui32CtrlVal;
702 uint32_t *pui32PlainText;
703 uint32_t ui32CryptoBlockLength;
712 pui32PlainText = pui32CipherText;
764 ui8InitVec.b[0] = ui32FieldLength - 1;
765 for(i = 0; i < 12; i++)
767 ui8InitVec.b[i + 1] = ((uint8_t*)pui32Nonce)[i];
769 if(ui32FieldLength == 2)
771 ui8InitVec.b[13] = ((uint8_t*)pui32Nonce)[12];
775 ui8InitVec.b[13] = 0;
777 ui8InitVec.b[14] = 0;
778 ui8InitVec.b[15] = 0;
791 ui32CryptoBlockLength = ui32CipherTextLength - ui32AuthLength;
793 if ( ui32AuthLength >= 2 ) {
825 if(ui32HeaderLength != 0)
906 (uint32_t)pui32CipherText;
922 (uint32_t)pui32PlainText;
979 uint32_t *pui32CipherText,
980 uint32_t ui32CipherTextLength,
981 uint32_t *pui32CcmTag)
983 uint32_t
volatile ui32Tag[4];
984 uint32_t ui32TagIndex;
988 ui32TagIndex = ui32CipherTextLength - ui32AuthLength;
1014 for(ui32Idx = 0; ui32Idx < ui32AuthLength ; ui32Idx++)
1016 *((uint8_t*)pui32CcmTag + ui32Idx) = *((uint8_t*)ui32Tag + ui32Idx);
1028 for(i = 0; i < ui32AuthLength; i++)
1030 if(*((uint8_t *)pui32CcmTag + i) !=
1031 (*((uint8_t *)pui32CipherText + ui32TagIndex + i)))
1058 if(ui32Channels & CRYPTO_DMA_CHAN0)
1062 if(ui32Channels & CRYPTO_DMA_CHAN1)
1085 if(ui32Channels & CRYPTO_DMA_CHAN0)
1089 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