265#if defined (AES) || defined (CRYP)
273#ifdef HAL_CRYP_MODULE_ENABLED
280#define CRYP_TIMEOUT_KEYPREPARATION 82U
281#define CRYP_TIMEOUT_GCMCCMINITPHASE 299U
283#define CRYP_TIMEOUT_GCMCCMHEADERPHASE 290U
285#define CRYP_PHASE_READY 0x00000001U
286#define CRYP_PHASE_PROCESS 0x00000002U
289#define CRYP_OPERATINGMODE_ENCRYPT 0x00000000U
290#define CRYP_OPERATINGMODE_KEYDERIVATION AES_CR_MODE_0
291#define CRYP_OPERATINGMODE_DECRYPT AES_CR_MODE_1
292#define CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT AES_CR_MODE
293#define CRYP_PHASE_INIT 0x00000000U
294#define CRYP_PHASE_HEADER AES_CR_GCMPH_0
295#define CRYP_PHASE_PAYLOAD AES_CR_GCMPH_1
296#define CRYP_PHASE_FINAL AES_CR_GCMPH
298#define CRYP_PHASE_INIT 0x00000000U
299#define CRYP_PHASE_HEADER CRYP_CR_GCM_CCMPH_0
300#define CRYP_PHASE_PAYLOAD CRYP_CR_GCM_CCMPH_1
301#define CRYP_PHASE_FINAL CRYP_CR_GCM_CCMPH
302#define CRYP_OPERATINGMODE_ENCRYPT 0x00000000U
303#define CRYP_OPERATINGMODE_DECRYPT CRYP_CR_ALGODIR
307#define CRYP_CCM_CTR1_0 0x07FFFFFFU
308#define CRYP_CCM_CTR1_1 0xFFFFFF00U
309#define CRYP_CCM_CTR1_2 0x00000001U
324#define CRYP_SET_PHASE(__HANDLE__, __PHASE__) do{(__HANDLE__)->Instance->CR &= (uint32_t)(~CRYP_CR_GCM_CCMPH);\
325 (__HANDLE__)->Instance->CR |= (uint32_t)(__PHASE__);\
328#define HAL_CRYP_FIFO_FLUSH(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRYP_CR_FFLUSH)
331#define CRYP_SET_PHASE(__HANDLE__, __PHASE__) do{(__HANDLE__)->Instance->CR &= (uint32_t)(~AES_CR_GCMPH);\
332 (__HANDLE__)->Instance->CR |= (uint32_t)(__PHASE__);\
348static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr);
352static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint32_t KeySize);
353static void CRYP_AES_IT(CRYP_HandleTypeDef *hcryp);
354#if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
355static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
356static void CRYP_GCMCCM_SetPayloadPhase_IT(CRYP_HandleTypeDef *hcryp);
357static void CRYP_GCMCCM_SetHeaderPhase_IT(CRYP_HandleTypeDef *hcryp);
358static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase_DMA(CRYP_HandleTypeDef *hcryp);
359static void CRYP_Workaround(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
362static HAL_StatusTypeDef CRYP_AESGCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
363static HAL_StatusTypeDef CRYP_AESCCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
367static void CRYP_AES_ProcessData(CRYP_HandleTypeDef *hcrypt, uint32_t Timeout);
368static HAL_StatusTypeDef CRYP_AES_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
369static HAL_StatusTypeDef CRYP_AES_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
374static void CRYP_TDES_IT(CRYP_HandleTypeDef *hcryp);
375#if defined (CRYP_CR_ALGOMODE_AES_GCM)
376static HAL_StatusTypeDef CRYP_WaitOnIFEMFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
378static HAL_StatusTypeDef CRYP_WaitOnBUSYFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
379static HAL_StatusTypeDef CRYP_WaitOnOFNEFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
380static HAL_StatusTypeDef CRYP_TDES_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
382static HAL_StatusTypeDef CRYP_WaitOnCCFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
444 assert_param(IS_CRYP_INIT(hcryp->Init.KeyIVConfigSkip));
446#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
447 if (hcryp->State == HAL_CRYP_STATE_RESET)
452 hcryp->InCpltCallback = HAL_CRYP_InCpltCallback;
453 hcryp->OutCpltCallback = HAL_CRYP_OutCpltCallback;
454 hcryp->ErrorCallback = HAL_CRYP_ErrorCallback;
456 if (hcryp->MspInitCallback == NULL)
458 hcryp->MspInitCallback = HAL_CRYP_MspInit;
462 hcryp->MspInitCallback(hcryp);
465 if (hcryp->State == HAL_CRYP_STATE_RESET)
471 HAL_CRYP_MspInit(hcryp);
478 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_DATATYPE | CRYP_CR_KEYSIZE | CRYP_CR_ALGOMODE,
479 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm);
483 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE | AES_CR_KEYSIZE | AES_CR_CHMOD,
484 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm);
489 hcryp->ErrorCode = HAL_CRYP_ERROR_NONE;
492 hcryp->State = HAL_CRYP_STATE_READY;
495 hcryp->Phase = CRYP_PHASE_READY;
516 hcryp->Phase = CRYP_PHASE_READY;
519 hcryp->CrypInCount = 0;
520 hcryp->CrypOutCount = 0;
521 hcryp->CrypHeaderCount = 0;
524 __HAL_CRYP_DISABLE(hcryp);
526#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
528 if (hcryp->MspDeInitCallback == NULL)
530 hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit;
533 hcryp->MspDeInitCallback(hcryp);
538 HAL_CRYP_MspDeInit(hcryp);
543 hcryp->State = HAL_CRYP_STATE_RESET;
560HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf)
563 if ((hcryp == NULL) || (pConf == NULL))
573 if (hcryp->State == HAL_CRYP_STATE_READY)
576 hcryp->State = HAL_CRYP_STATE_BUSY;
582 hcryp->Init.DataType = pConf->DataType;
583 hcryp->Init.pKey = pConf->pKey;
584 hcryp->Init.Algorithm = pConf->Algorithm;
585 hcryp->Init.KeySize = pConf->KeySize;
586 hcryp->Init.pInitVect = pConf->pInitVect;
587 hcryp->Init.Header = pConf->Header;
588 hcryp->Init.HeaderSize = pConf->HeaderSize;
589 hcryp->Init.B0 = pConf->B0;
590 hcryp->Init.DataWidthUnit = pConf->DataWidthUnit;
591 hcryp->Init.KeyIVConfigSkip = pConf->KeyIVConfigSkip;
592 hcryp->Init.HeaderWidthUnit = pConf->HeaderWidthUnit;
597 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_DATATYPE | CRYP_CR_KEYSIZE | CRYP_CR_ALGOMODE,
598 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm);
601 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE | AES_CR_KEYSIZE | AES_CR_CHMOD,
602 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm);
605 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_ERR_CLEAR);
613 hcryp->ErrorCode = HAL_CRYP_ERROR_NONE;
616 hcryp->State = HAL_CRYP_STATE_READY;
619 hcryp->Phase = CRYP_PHASE_READY;
630 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
642HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf)
645 if ((hcryp == NULL) || (pConf == NULL))
650 if (hcryp->State == HAL_CRYP_STATE_READY)
653 hcryp->State = HAL_CRYP_STATE_BUSY;
659 pConf->DataType = hcryp->Init.DataType;
660 pConf->pKey = hcryp->Init.pKey;
661 pConf->Algorithm = hcryp->Init.Algorithm;
662 pConf->KeySize = hcryp->Init.KeySize ;
663 pConf->pInitVect = hcryp->Init.pInitVect;
664 pConf->Header = hcryp->Init.Header ;
665 pConf->HeaderSize = hcryp->Init.HeaderSize;
666 pConf->B0 = hcryp->Init.B0;
667 pConf->DataWidthUnit = hcryp->Init.DataWidthUnit;
668 pConf->KeyIVConfigSkip = hcryp->Init.KeyIVConfigSkip;
669 pConf->HeaderWidthUnit = hcryp->Init.HeaderWidthUnit;
675 hcryp->State = HAL_CRYP_STATE_READY;
686 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
696__weak
void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
712__weak
void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
722#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
737HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID,
738 pCRYP_CallbackTypeDef pCallback)
742 if (pCallback == NULL)
745 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
752 if (hcryp->State == HAL_CRYP_STATE_READY)
756 case HAL_CRYP_INPUT_COMPLETE_CB_ID :
757 hcryp->InCpltCallback = pCallback;
760 case HAL_CRYP_OUTPUT_COMPLETE_CB_ID :
761 hcryp->OutCpltCallback = pCallback;
764 case HAL_CRYP_ERROR_CB_ID :
765 hcryp->ErrorCallback = pCallback;
768 case HAL_CRYP_MSPINIT_CB_ID :
769 hcryp->MspInitCallback = pCallback;
772 case HAL_CRYP_MSPDEINIT_CB_ID :
773 hcryp->MspDeInitCallback = pCallback;
778 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
784 else if (hcryp->State == HAL_CRYP_STATE_RESET)
788 case HAL_CRYP_MSPINIT_CB_ID :
789 hcryp->MspInitCallback = pCallback;
792 case HAL_CRYP_MSPDEINIT_CB_ID :
793 hcryp->MspDeInitCallback = pCallback;
798 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
807 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
831HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID)
838 if (hcryp->State == HAL_CRYP_STATE_READY)
842 case HAL_CRYP_INPUT_COMPLETE_CB_ID :
843 hcryp->InCpltCallback = HAL_CRYP_InCpltCallback;
846 case HAL_CRYP_OUTPUT_COMPLETE_CB_ID :
847 hcryp->OutCpltCallback = HAL_CRYP_OutCpltCallback;
850 case HAL_CRYP_ERROR_CB_ID :
851 hcryp->ErrorCallback = HAL_CRYP_ErrorCallback;
854 case HAL_CRYP_MSPINIT_CB_ID :
855 hcryp->MspInitCallback = HAL_CRYP_MspInit;
858 case HAL_CRYP_MSPDEINIT_CB_ID :
859 hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit;
864 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
870 else if (hcryp->State == HAL_CRYP_STATE_RESET)
874 case HAL_CRYP_MSPINIT_CB_ID :
875 hcryp->MspInitCallback = HAL_CRYP_MspInit;
878 case HAL_CRYP_MSPDEINIT_CB_ID :
879 hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit;
884 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
893 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
948HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
954 if (hcryp->State == HAL_CRYP_STATE_READY)
957 hcryp->State = HAL_CRYP_STATE_BUSY;
963 hcryp->CrypInCount = 0U;
964 hcryp->CrypOutCount = 0U;
965 hcryp->pCrypInBuffPtr = Input;
966 hcryp->pCrypOutBuffPtr = Output;
969 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD)
971 hcryp->Size = Size * 4U;
980 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT);
983 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE;
993 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
994 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
995 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
997 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
998 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
999 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
1000 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
1004 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1006 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1007 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1011 HAL_CRYP_FIFO_FLUSH(hcryp);
1014 hcryp->Phase = CRYP_PHASE_PROCESS;
1017 status = CRYP_TDES_Process(hcryp, Timeout);
1025 status = CRYP_AES_Encrypt(hcryp, Timeout);
1027#if defined (CRYP_CR_ALGOMODE_AES_GCM)
1031 status = CRYP_AESGCM_Process(hcryp, Timeout);
1038 status = CRYP_AESCCM_Process(hcryp, Timeout);
1042 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1044 hcryp->State = HAL_CRYP_STATE_READY;
1053 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
1056 algo = hcryp->Instance->CR & AES_CR_CHMOD;
1066 status = CRYP_AES_Encrypt(hcryp, Timeout);
1069 case CRYP_AES_GCM_GMAC:
1072 status = CRYP_AESGCM_Process(hcryp, Timeout) ;
1078 status = CRYP_AESCCM_Process(hcryp, Timeout);
1082 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1084 hcryp->State = HAL_CRYP_STATE_READY;
1094 hcryp->State = HAL_CRYP_STATE_READY;
1103 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
1121HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
1127 if (hcryp->State == HAL_CRYP_STATE_READY)
1130 hcryp->State = HAL_CRYP_STATE_BUSY;
1136 hcryp->CrypInCount = 0U;
1137 hcryp->CrypOutCount = 0U;
1138 hcryp->pCrypInBuffPtr = Input;
1139 hcryp->pCrypOutBuffPtr = Output;
1142 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD)
1144 hcryp->Size = Size * 4U;
1154 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT);
1157 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE;
1167 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
1168 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
1169 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1171 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
1172 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
1173 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
1174 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
1178 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1180 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1181 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1185 HAL_CRYP_FIFO_FLUSH(hcryp);
1188 hcryp->Phase = CRYP_PHASE_PROCESS;
1191 status = CRYP_TDES_Process(hcryp, Timeout);
1200 status = CRYP_AES_Decrypt(hcryp, Timeout);
1202#if defined (CRYP_CR_ALGOMODE_AES_GCM)
1206 status = CRYP_AESGCM_Process(hcryp, Timeout) ;
1212 status = CRYP_AESCCM_Process(hcryp, Timeout);
1216 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1218 hcryp->State = HAL_CRYP_STATE_READY;
1227 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
1230 algo = hcryp->Instance->CR & AES_CR_CHMOD;
1240 status = CRYP_AES_Decrypt(hcryp, Timeout);
1243 case CRYP_AES_GCM_GMAC:
1246 status = CRYP_AESGCM_Process(hcryp, Timeout) ;
1252 status = CRYP_AESCCM_Process(hcryp, Timeout);
1256 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1258 hcryp->State = HAL_CRYP_STATE_READY;
1268 hcryp->State = HAL_CRYP_STATE_READY;
1277 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
1294HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
1299 if (hcryp->State == HAL_CRYP_STATE_READY)
1302 hcryp->State = HAL_CRYP_STATE_BUSY;
1308 hcryp->CrypInCount = 0U;
1309 hcryp->CrypOutCount = 0U;
1310 hcryp->pCrypInBuffPtr = Input;
1311 hcryp->pCrypOutBuffPtr = Output;
1314 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD)
1316 hcryp->Size = Size * 4U;
1326 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT);
1329 algo = (hcryp->Instance->CR & CRYP_CR_ALGOMODE);
1339 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
1340 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
1341 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1343 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
1344 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
1345 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
1346 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
1349 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1351 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1352 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1356 HAL_CRYP_FIFO_FLUSH(hcryp);
1359 hcryp->Phase = CRYP_PHASE_PROCESS;
1362 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
1365 __HAL_CRYP_ENABLE(hcryp);
1372 status = CRYP_AES_Encrypt_IT(hcryp);
1374#if defined (CRYP_CR_ALGOMODE_AES_GCM)
1377 status = CRYP_AESGCM_Process_IT(hcryp) ;
1382 status = CRYP_AESCCM_Process_IT(hcryp);
1386 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1388 hcryp->State = HAL_CRYP_STATE_READY;
1398 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
1401 algo = hcryp->Instance->CR & AES_CR_CHMOD;
1410 status = CRYP_AES_Encrypt_IT(hcryp);
1413 case CRYP_AES_GCM_GMAC:
1416 status = CRYP_AESGCM_Process_IT(hcryp) ;
1422 status = CRYP_AESCCM_Process_IT(hcryp);
1426 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1428 hcryp->State = HAL_CRYP_STATE_READY;
1440 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
1457HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
1462 if (hcryp->State == HAL_CRYP_STATE_READY)
1465 hcryp->State = HAL_CRYP_STATE_BUSY;
1471 hcryp->CrypInCount = 0U;
1472 hcryp->CrypOutCount = 0U;
1473 hcryp->pCrypInBuffPtr = Input;
1474 hcryp->pCrypOutBuffPtr = Output;
1477 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD)
1479 hcryp->Size = Size * 4U;
1489 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT);
1492 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE;
1502 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
1503 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
1504 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1506 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
1507 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
1508 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
1509 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
1513 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1515 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1516 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1519 HAL_CRYP_FIFO_FLUSH(hcryp);
1522 hcryp->Phase = CRYP_PHASE_PROCESS;
1525 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
1528 __HAL_CRYP_ENABLE(hcryp);
1537 status = CRYP_AES_Decrypt_IT(hcryp);
1539#if defined (CRYP_CR_ALGOMODE_AES_GCM)
1543 status = CRYP_AESGCM_Process_IT(hcryp) ;
1549 status = CRYP_AESCCM_Process_IT(hcryp);
1553 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1555 hcryp->State = HAL_CRYP_STATE_READY;
1565 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
1568 algo = hcryp->Instance->CR & AES_CR_CHMOD;
1577 status = CRYP_AES_Decrypt_IT(hcryp);
1580 case CRYP_AES_GCM_GMAC:
1583 status = CRYP_AESGCM_Process_IT(hcryp) ;
1589 status = CRYP_AESCCM_Process_IT(hcryp);
1593 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1595 hcryp->State = HAL_CRYP_STATE_READY;
1607 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
1624HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
1628 uint32_t DoKeyIVConfig = 1U;
1630 if (hcryp->State == HAL_CRYP_STATE_READY)
1633 hcryp->State = HAL_CRYP_STATE_BUSY;
1639 hcryp->CrypInCount = 0U;
1640 hcryp->CrypOutCount = 0U;
1641 hcryp->pCrypInBuffPtr = Input;
1642 hcryp->pCrypOutBuffPtr = Output;
1645 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD)
1647 hcryp->Size = Size * 4U;
1657 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT);
1660 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE;
1670 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
1671 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
1672 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1674 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
1675 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
1676 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
1677 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
1681 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1683 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1684 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1688 HAL_CRYP_FIFO_FLUSH(hcryp);
1691 hcryp->Phase = CRYP_PHASE_PROCESS;
1694 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)(hcryp->Size) / 4U),
1695 (uint32_t)(hcryp->pCrypOutBuffPtr));
1702 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
1704 if (hcryp->KeyIVConfig == 1U)
1715 hcryp->KeyIVConfig = 1U;
1719 if (DoKeyIVConfig == 1U)
1722 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
1725 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
1727 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1728 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1U);
1729 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2U);
1730 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3U);
1735 hcryp->Phase = CRYP_PHASE_PROCESS;
1738 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)(hcryp->Size) / 4U),
1739 (uint32_t)(hcryp->pCrypOutBuffPtr));
1741#if defined (CRYP_CR_ALGOMODE_AES_GCM)
1744 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1749 status = CRYP_AESCCM_Process_DMA(hcryp);
1753 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1755 hcryp->State = HAL_CRYP_STATE_READY;
1764 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
1767 algo = hcryp->Instance->CR & AES_CR_CHMOD;
1776 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
1778 if (hcryp->KeyIVConfig == 1U)
1789 hcryp->KeyIVConfig = 1U;
1793 if (DoKeyIVConfig == 1U)
1796 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
1799 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
1801 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
1802 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1803 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
1804 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
1808 hcryp->Phase = CRYP_PHASE_PROCESS;
1811 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr),
1812 (hcryp->Size / 4U), (uint32_t)(hcryp->pCrypOutBuffPtr));
1815 case CRYP_AES_GCM_GMAC:
1817 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1822 status = CRYP_AESCCM_Process_DMA(hcryp);
1826 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1828 hcryp->State = HAL_CRYP_STATE_READY;
1840 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
1857HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
1862 if (hcryp->State == HAL_CRYP_STATE_READY)
1866 hcryp->State = HAL_CRYP_STATE_BUSY;
1872 hcryp->CrypInCount = 0U;
1873 hcryp->CrypOutCount = 0U;
1874 hcryp->pCrypInBuffPtr = Input;
1875 hcryp->pCrypOutBuffPtr = Output;
1878 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD)
1880 hcryp->Size = Size * 4U;
1890 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT);
1893 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE;
1903 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
1904 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
1905 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1907 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
1908 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
1909 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
1910 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
1914 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
1916 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
1917 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
1921 HAL_CRYP_FIFO_FLUSH(hcryp);
1924 hcryp->Phase = CRYP_PHASE_PROCESS;
1927 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)(hcryp->Size) / 4U),
1928 (uint32_t)(hcryp->pCrypOutBuffPtr));
1936 status = CRYP_AES_Decrypt_DMA(hcryp);
1938#if defined (CRYP_CR_ALGOMODE_AES_GCM)
1941 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1946 status = CRYP_AESCCM_Process_DMA(hcryp);
1950 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1952 hcryp->State = HAL_CRYP_STATE_READY;
1962 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
1965 algo = hcryp->Instance->CR & AES_CR_CHMOD;
1975 status = CRYP_AES_Decrypt_DMA(hcryp);
1978 case CRYP_AES_GCM_GMAC:
1980 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1985 status = CRYP_AESCCM_Process_DMA(hcryp);
1989 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1991 hcryp->State = HAL_CRYP_STATE_READY;
2002 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
2038void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
2043 uint32_t itstatus = hcryp->Instance->MISR;
2045 if ((itstatus & (CRYP_IT_INI | CRYP_IT_OUTI)) != 0U)
2047 if ((hcryp->Init.Algorithm == CRYP_DES_ECB) || (hcryp->Init.Algorithm == CRYP_DES_CBC)
2048 || (hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC))
2050 CRYP_TDES_IT(hcryp);
2052 else if ((hcryp->Init.Algorithm == CRYP_AES_ECB) || (hcryp->Init.Algorithm == CRYP_AES_CBC)
2053 || (hcryp->Init.Algorithm == CRYP_AES_CTR))
2057#if defined (CRYP_CR_ALGOMODE_AES_GCM)
2058 else if ((hcryp->Init.Algorithm == CRYP_AES_GCM) || (hcryp->Init.Algorithm == CRYP_CR_ALGOMODE_AES_CCM))
2061 if ((hcryp->Instance->CR & CRYP_PHASE_HEADER) == CRYP_PHASE_HEADER)
2063 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp);
2067 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp);
2078 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_CCF) != RESET)
2080 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_CCFIE) != RESET)
2084 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2086 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
2090 if ((hcryp->Instance->CR & CRYP_PHASE_HEADER) == CRYP_PHASE_HEADER)
2092 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp);
2096 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp);
2099 else if (hcryp->Init.Algorithm == CRYP_AES_CCM)
2102 if (hcryp->Init.HeaderSize >= hcryp->CrypHeaderCount)
2104 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp);
2108 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp);
2118 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_ERRIE) != RESET)
2121 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_WRERR) != RESET)
2123 hcryp->ErrorCode |= HAL_CRYP_ERROR_WRITE;
2126 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_RDERR) != RESET)
2128 hcryp->ErrorCode |= HAL_CRYP_ERROR_READ;
2140uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp)
2142 return hcryp->ErrorCode;
2151HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
2153 return hcryp->State;
2162__weak
void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
2178__weak
void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
2194__weak
void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
2221static HAL_StatusTypeDef CRYP_TDES_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
2229 __HAL_CRYP_ENABLE(hcryp);
2231 outcount = hcryp->CrypOutCount;
2234 while ((hcryp->CrypInCount < (hcryp->Size / 4U)) && (outcount < (hcryp->Size / 4U)))
2237 incount = hcryp->CrypInCount;
2239 if (((hcryp->Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->Size / 4U)))
2242 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
2243 hcryp->CrypInCount++;
2244 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
2245 hcryp->CrypInCount++;
2249 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) !=
HAL_OK)
2252 __HAL_CRYP_DISABLE(hcryp);
2255 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2256 hcryp->State = HAL_CRYP_STATE_READY;
2260#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
2262 hcryp->ErrorCallback(hcryp);
2265 HAL_CRYP_ErrorCallback(hcryp);
2270 outcount = hcryp->CrypOutCount;
2272 if (((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->Size / 4U)))
2276 for (i = 0U; i < 2U; i++)
2278 temp[i] = hcryp->Instance->DOUT;
2281 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 2U))
2283 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
2284 hcryp->CrypOutCount++;
2289 outcount = hcryp->CrypOutCount;
2292 __HAL_CRYP_DISABLE(hcryp);
2294 hcryp->State = HAL_CRYP_STATE_READY;
2308static void CRYP_TDES_IT(CRYP_HandleTypeDef *hcryp)
2313 if (hcryp->State == HAL_CRYP_STATE_BUSY)
2315 if (__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI) != 0x0U)
2317 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_FLAG_INRIS) != 0x0U)
2320 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
2321 hcryp->CrypInCount++;
2322 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
2323 hcryp->CrypInCount++;
2325 if (hcryp->CrypInCount == ((uint16_t)(hcryp->Size) / 4U))
2328 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
2330#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
2332 hcryp->InCpltCallback(hcryp);
2335 HAL_CRYP_InCpltCallback(hcryp);
2340 if (__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI) != 0x0U)
2342 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_FLAG_OUTRIS) != 0x0U)
2346 for (i = 0U; i < 2U; i++)
2348 temp[i] = hcryp->Instance->DOUT;
2351 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 2U))
2353 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
2354 hcryp->CrypOutCount++;
2357 if (hcryp->CrypOutCount == ((uint16_t)(hcryp->Size) / 4U))
2360 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
2363 __HAL_CRYP_DISABLE(hcryp);
2369 hcryp->State = HAL_CRYP_STATE_READY;
2371#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
2373 hcryp->OutCpltCallback(hcryp);
2376 HAL_CRYP_OutCpltCallback(hcryp);
2387 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
2388#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
2390 hcryp->ErrorCallback(hcryp);
2393 HAL_CRYP_ErrorCallback(hcryp);
2406static HAL_StatusTypeDef CRYP_AES_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
2409 uint32_t DoKeyIVConfig = 1U;
2411 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
2413 if (hcryp->KeyIVConfig == 1U)
2424 hcryp->KeyIVConfig = 1U;
2428 if (DoKeyIVConfig == 1U)
2432 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2434 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
2438 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
2439 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2440 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2441 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2443 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
2444 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2445 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2446 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2452 hcryp->Phase = CRYP_PHASE_PROCESS;
2455 __HAL_CRYP_ENABLE(hcryp);
2458 outcount = hcryp->CrypOutCount;
2460 while ((hcryp->CrypInCount < (hcryp->Size / 4U)) && (outcount < (hcryp->Size / 4U)))
2463 CRYP_AES_ProcessData(hcryp, Timeout);
2465 outcount = hcryp->CrypOutCount;
2469 __HAL_CRYP_DISABLE(hcryp);
2472 hcryp->State = HAL_CRYP_STATE_READY;
2486 uint32_t DoKeyIVConfig = 1U;
2488 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
2490 if (hcryp->KeyIVConfig == 1U)
2501 hcryp->KeyIVConfig = 1U;
2505 if (DoKeyIVConfig == 1U)
2508 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2510 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
2514 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
2515 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2516 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2517 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2520 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
2521 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2522 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2523 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2529 hcryp->Phase = CRYP_PHASE_PROCESS;
2531 if (hcryp->Size != 0U)
2536 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
2539 __HAL_CRYP_ENABLE(hcryp);
2544 hcryp->CrypInCount++;
2545 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2546 hcryp->CrypInCount++;
2547 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2548 hcryp->CrypInCount++;
2549 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2550 hcryp->CrypInCount++;
2551 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2556 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
2559 __HAL_CRYP_ENABLE(hcryp);
2566 hcryp->State = HAL_CRYP_STATE_READY;
2582static HAL_StatusTypeDef CRYP_AES_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
2585 uint32_t DoKeyIVConfig = 1U;
2587 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
2589 if (hcryp->KeyIVConfig == 1U)
2600 hcryp->KeyIVConfig = 1U;
2604 if (DoKeyIVConfig == 1U)
2607 if (hcryp->Init.Algorithm != CRYP_AES_CTR)
2610 if (hcryp->AutoKeyDerivation == DISABLE)
2613 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION);
2616 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2619 __HAL_CRYP_ENABLE(hcryp);
2622 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
2625 __HAL_CRYP_DISABLE(hcryp);
2628 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2629 hcryp->State = HAL_CRYP_STATE_READY;
2636 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2639 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
2644 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2647 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT);
2651 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY);
2654 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2657 __HAL_CRYP_ENABLE(hcryp);
2660 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) !=
HAL_OK)
2663 __HAL_CRYP_DISABLE(hcryp);
2666 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2667 hcryp->State = HAL_CRYP_STATE_READY;
2674 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, hcryp->Init.Algorithm);
2681 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2685 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
2689 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
2690 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2691 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2692 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2694 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
2695 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2696 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2697 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2702 hcryp->Phase = CRYP_PHASE_PROCESS;
2705 __HAL_CRYP_ENABLE(hcryp);
2708 outcount = hcryp->CrypOutCount;
2710 while ((hcryp->CrypInCount < (hcryp->Size / 4U)) && (outcount < (hcryp->Size / 4U)))
2713 CRYP_AES_ProcessData(hcryp, Timeout);
2715 outcount = hcryp->CrypOutCount;
2719 __HAL_CRYP_DISABLE(hcryp);
2722 hcryp->State = HAL_CRYP_STATE_READY;
2735 __IO uint32_t count = 0U;
2736 uint32_t DoKeyIVConfig = 1U;
2738 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
2740 if (hcryp->KeyIVConfig == 1U)
2751 hcryp->KeyIVConfig = 1U;
2755 if (DoKeyIVConfig == 1U)
2758 if (hcryp->Init.Algorithm != CRYP_AES_CTR)
2761 if (hcryp->AutoKeyDerivation == DISABLE)
2764 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION);
2767 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2770 __HAL_CRYP_ENABLE(hcryp);
2773 count = CRYP_TIMEOUT_KEYPREPARATION;
2780 __HAL_CRYP_DISABLE(hcryp);
2783 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2784 hcryp->State = HAL_CRYP_STATE_READY;
2793 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2796 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
2801 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2804 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT);
2809 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY);
2812 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2815 __HAL_CRYP_ENABLE(hcryp);
2818 count = CRYP_TIMEOUT_KEYPREPARATION;
2825 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2826 hcryp->State = HAL_CRYP_STATE_READY;
2835 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, hcryp->Init.Algorithm);
2843 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2847 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
2851 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
2852 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2853 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2854 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2856 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
2857 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
2858 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
2859 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
2865 hcryp->Phase = CRYP_PHASE_PROCESS;
2866 if (hcryp->Size != 0U)
2872 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
2875 __HAL_CRYP_ENABLE(hcryp);
2880 hcryp->CrypInCount++;
2881 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2882 hcryp->CrypInCount++;
2883 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2884 hcryp->CrypInCount++;
2885 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2886 hcryp->CrypInCount++;
2887 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U));
2892 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
2895 __HAL_CRYP_ENABLE(hcryp);
2905 hcryp->State = HAL_CRYP_STATE_READY;
2919 __IO uint32_t count = 0U;
2920 uint32_t DoKeyIVConfig = 1U;
2922 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
2924 if (hcryp->KeyIVConfig == 1U)
2935 hcryp->KeyIVConfig = 1U;
2938 if (DoKeyIVConfig == 1U)
2941 if (hcryp->Init.Algorithm != CRYP_AES_CTR)
2944 if (hcryp->AutoKeyDerivation == DISABLE)
2947 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION);
2950 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2953 __HAL_CRYP_ENABLE(hcryp);
2956 count = CRYP_TIMEOUT_KEYPREPARATION;
2963 __HAL_CRYP_DISABLE(hcryp);
2966 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2967 hcryp->State = HAL_CRYP_STATE_READY;
2976 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2979 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
2984 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2987 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT);
2991 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY);
2994 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
2997 __HAL_CRYP_ENABLE(hcryp);
3000 count = CRYP_TIMEOUT_KEYPREPARATION;
3007 __HAL_CRYP_DISABLE(hcryp);
3010 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3011 hcryp->State = HAL_CRYP_STATE_READY;
3020 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, hcryp->Init.Algorithm);
3027 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
3030 if (hcryp->Init.Algorithm != CRYP_AES_ECB)
3034 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
3035 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
3036 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
3037 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
3039 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
3040 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
3041 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
3042 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
3048 hcryp->Phase = CRYP_PHASE_PROCESS;
3050 if (hcryp->Size != 0U)
3053 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U), (uint32_t)(hcryp->pCrypOutBuffPtr));
3061 hcryp->State = HAL_CRYP_STATE_READY;
3076 CRYP_HandleTypeDef *hcryp = (CRYP_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
3081 hcryp->Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DIEN);
3084 CLEAR_BIT(hcryp->Instance->CR, AES_CR_DMAINEN);
3087 if ((hcryp->Init.Algorithm & CRYP_AES_CCM) == CRYP_AES_CCM)
3090 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3093 hcryp->State = HAL_CRYP_STATE_READY;
3101#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3103 hcryp->InCpltCallback(hcryp);
3106 HAL_CRYP_InCpltCallback(hcryp);
3117 CRYP_HandleTypeDef *hcryp = (CRYP_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
3124 hcryp->Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DOEN);
3125#if defined (CRYP_CR_ALGOMODE_AES_GCM)
3126 if ((hcryp->Init.Algorithm & CRYP_AES_GCM) != CRYP_AES_GCM)
3129 __HAL_CRYP_DISABLE(hcryp);
3134 __HAL_CRYP_DISABLE(hcryp);
3138 CLEAR_BIT(hcryp->Instance->CR, AES_CR_DMAOUTEN);
3141 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3143 if ((hcryp->Init.Algorithm & CRYP_AES_GCM_GMAC) != CRYP_AES_GCM_GMAC)
3146 __HAL_CRYP_DISABLE(hcryp);
3151 hcryp->State = HAL_CRYP_STATE_READY;
3156#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3158 hcryp->OutCpltCallback(hcryp);
3161 HAL_CRYP_OutCpltCallback(hcryp);
3172 CRYP_HandleTypeDef *hcryp = (CRYP_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
3175 hcryp->State = HAL_CRYP_STATE_READY;
3178 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA;
3183 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3188#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3190 hcryp->ErrorCallback(hcryp);
3193 HAL_CRYP_ErrorCallback(hcryp);
3206static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr)
3209 hcryp->hdmain->XferCpltCallback = CRYP_DMAInCplt;
3212 hcryp->hdmain->XferErrorCallback = CRYP_DMAError;
3215 hcryp->hdmaout->XferCpltCallback = CRYP_DMAOutCplt;
3218 hcryp->hdmaout->XferErrorCallback = CRYP_DMAError;
3223 __HAL_CRYP_ENABLE(hcryp);
3229 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA;
3232#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3234 hcryp->ErrorCallback(hcryp);
3237 HAL_CRYP_ErrorCallback(hcryp);
3244 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA;
3247#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3249 hcryp->ErrorCallback(hcryp);
3252 HAL_CRYP_ErrorCallback(hcryp);
3256 hcryp->Instance->DMACR = CRYP_DMACR_DOEN | CRYP_DMACR_DIEN;
3260 if (((hcryp->Init.Algorithm & CRYP_AES_GCM_GMAC) != CRYP_AES_GCM_GMAC)
3261 && ((hcryp->Init.Algorithm & CRYP_AES_CCM) != CRYP_AES_CCM))
3264 __HAL_CRYP_ENABLE(hcryp);
3271 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA;
3274#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3276 hcryp->ErrorCallback(hcryp);
3279 HAL_CRYP_ErrorCallback(hcryp);
3286 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA;
3289#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3291 hcryp->ErrorCallback(hcryp);
3294 HAL_CRYP_ErrorCallback(hcryp);
3299 if ((hcryp->Init.Algorithm & CRYP_AES_CCM) == CRYP_AES_CCM)
3302 SET_BIT(hcryp->Instance->CR, (AES_CR_DMAINEN));
3307 SET_BIT(hcryp->Instance->CR, (AES_CR_DMAINEN | AES_CR_DMAOUTEN));
3319static void CRYP_AES_ProcessData(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
3332 incount = hcryp->CrypInCount;
3334 if (((hcryp->Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->Size / 4U)))
3337 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3338 hcryp->CrypInCount++;
3339 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3340 hcryp->CrypInCount++;
3341 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3342 hcryp->CrypInCount++;
3343 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3344 hcryp->CrypInCount++;
3348 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) !=
HAL_OK)
3351 __HAL_CRYP_DISABLE(hcryp);
3354 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3355 hcryp->State = HAL_CRYP_STATE_READY;
3359#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3361 hcryp->ErrorCallback(hcryp);
3364 HAL_CRYP_ErrorCallback(hcryp);
3369 outcount = hcryp->CrypOutCount;
3371 if (((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->Size / 4U)))
3375 for (i = 0U; i < 4U; i++)
3377 temp[i] = hcryp->Instance->DOUT;
3380 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U))
3382 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
3383 hcryp->CrypOutCount++;
3391 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3392 hcryp->CrypInCount++;
3393 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3394 hcryp->CrypInCount++;
3395 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3396 hcryp->CrypInCount++;
3397 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3398 hcryp->CrypInCount++;
3401 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
3404 __HAL_CRYP_DISABLE(hcryp);
3407 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3408 hcryp->State = HAL_CRYP_STATE_READY;
3412#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3414 hcryp->ErrorCallback(hcryp);
3417 HAL_CRYP_ErrorCallback(hcryp);
3422 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3426 for (i = 0U; i < 4U; i++)
3428 temp[i] = hcryp->Instance->DOUTR;
3431 while ((hcryp->CrypOutCount < ((hcryp->Size + 3U) / 4U)) && (i < 4U))
3433 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
3434 hcryp->CrypOutCount++;
3448static void CRYP_AES_IT(CRYP_HandleTypeDef *hcryp)
3457 if (hcryp->State == HAL_CRYP_STATE_BUSY)
3462 incount = hcryp->CrypInCount;
3463 if (((hcryp->Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->Size / 4U)))
3466 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3467 hcryp->CrypInCount++;
3468 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3469 hcryp->CrypInCount++;
3470 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3471 hcryp->CrypInCount++;
3472 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3473 hcryp->CrypInCount++;
3474 if (hcryp->CrypInCount == ((uint16_t)(hcryp->Size) / 4U))
3477 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
3480#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3482 hcryp->InCpltCallback(hcryp);
3485 HAL_CRYP_InCpltCallback(hcryp);
3490 outcount = hcryp->CrypOutCount;
3492 if (((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->Size / 4U)))
3496 for (i = 0U; i < 4U; i++)
3498 temp[i] = hcryp->Instance->DOUT;
3501 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U))
3503 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
3504 hcryp->CrypOutCount++;
3507 if (hcryp->CrypOutCount == ((uint16_t)(hcryp->Size) / 4U))
3510 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
3513 hcryp->State = HAL_CRYP_STATE_READY;
3516 __HAL_CRYP_DISABLE(hcryp);
3522#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3524 hcryp->OutCpltCallback(hcryp);
3527 HAL_CRYP_OutCpltCallback(hcryp);
3535 for (i = 0U; i < 4U; i++)
3537 temp[i] = hcryp->Instance->DOUTR;
3540 while ((hcryp->CrypOutCount < ((hcryp->Size + 3U) / 4U)) && (i < 4U))
3542 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
3543 hcryp->CrypOutCount++;
3547 if (hcryp->CrypOutCount == (hcryp->Size / 4U))
3550 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
3553 hcryp->State = HAL_CRYP_STATE_READY;
3556 __HAL_CRYP_DISABLE(hcryp);
3562#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3564 hcryp->OutCpltCallback(hcryp);
3567 HAL_CRYP_OutCpltCallback(hcryp);
3573 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3574 hcryp->CrypInCount++;
3575 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3576 hcryp->CrypInCount++;
3577 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3578 hcryp->CrypInCount++;
3579 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
3580 hcryp->CrypInCount++;
3582 if (hcryp->CrypInCount == (hcryp->Size / 4U))
3585#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
3587 hcryp->InCpltCallback(hcryp);
3590 HAL_CRYP_InCpltCallback(hcryp);
3600 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY;
3601#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3603 hcryp->ErrorCallback(hcryp);
3606 HAL_CRYP_ErrorCallback(hcryp);
3618static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint32_t KeySize)
3624 case CRYP_KEYSIZE_256B:
3625 hcryp->Instance->K0LR = *(uint32_t *)(hcryp->Init.pKey);
3626 hcryp->Instance->K0RR = *(uint32_t *)(hcryp->Init.pKey + 1);
3627 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey + 2);
3628 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 3);
3629 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 4);
3630 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 5);
3631 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 6);
3632 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 7);
3634 case CRYP_KEYSIZE_192B:
3635 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey);
3636 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1);
3637 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2);
3638 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3);
3639 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4);
3640 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5);
3642 case CRYP_KEYSIZE_128B:
3643 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey);
3644 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 1);
3645 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 2);
3646 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 3);
3655 case CRYP_KEYSIZE_256B:
3656 hcryp->Instance->KEYR7 = *(uint32_t *)(hcryp->Init.pKey);
3657 hcryp->Instance->KEYR6 = *(uint32_t *)(hcryp->Init.pKey + 1);
3658 hcryp->Instance->KEYR5 = *(uint32_t *)(hcryp->Init.pKey + 2);
3659 hcryp->Instance->KEYR4 = *(uint32_t *)(hcryp->Init.pKey + 3);
3660 hcryp->Instance->KEYR3 = *(uint32_t *)(hcryp->Init.pKey + 4);
3661 hcryp->Instance->KEYR2 = *(uint32_t *)(hcryp->Init.pKey + 5);
3662 hcryp->Instance->KEYR1 = *(uint32_t *)(hcryp->Init.pKey + 6);
3663 hcryp->Instance->KEYR0 = *(uint32_t *)(hcryp->Init.pKey + 7);
3665 case CRYP_KEYSIZE_128B:
3666 hcryp->Instance->KEYR3 = *(uint32_t *)(hcryp->Init.pKey);
3667 hcryp->Instance->KEYR2 = *(uint32_t *)(hcryp->Init.pKey + 1);
3668 hcryp->Instance->KEYR1 = *(uint32_t *)(hcryp->Init.pKey + 2);
3669 hcryp->Instance->KEYR0 = *(uint32_t *)(hcryp->Init.pKey + 3);
3678#if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
3686static HAL_StatusTypeDef CRYP_AESGCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
3689 uint32_t wordsize = (uint32_t)(hcryp->Size) / 4U ;
3691 uint32_t DoKeyIVConfig = 1U;
3693 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
3695 if (hcryp->KeyIVConfig == 1U)
3700 hcryp->SizesSum += hcryp->Size;
3707 hcryp->KeyIVConfig = 1U;
3708 hcryp->SizesSum = hcryp->Size;
3713 hcryp->SizesSum = hcryp->Size;
3716 if (DoKeyIVConfig == 1U)
3719 hcryp->CrypHeaderCount = 0U;
3723 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
3726 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
3731 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
3732 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
3733 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
3734 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
3737 __HAL_CRYP_ENABLE(hcryp);
3743 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN)
3748 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3751 __HAL_CRYP_DISABLE(hcryp);
3754 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3755 hcryp->State = HAL_CRYP_STATE_READY;
3769 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B);
3772 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
3773 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
3774 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
3775 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
3778 __HAL_CRYP_ENABLE(hcryp);
3781 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
3784 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3785 hcryp->State = HAL_CRYP_STATE_READY;
3792 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3798 if (CRYP_GCMCCM_SetHeaderPhase(hcryp, Timeout) !=
HAL_OK)
3806 hcryp->Phase = CRYP_PHASE_PROCESS;
3811 __HAL_CRYP_DISABLE(hcryp);
3814 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
3817 __HAL_CRYP_ENABLE(hcryp);
3822 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
3827 if ((hcryp->Size % 16U) != 0U)
3830 wordsize = ((wordsize / 4U) * 4U) ;
3836 outcount = hcryp->CrypOutCount;
3839 while ((hcryp->CrypInCount < wordsize) && (outcount < wordsize))
3842 CRYP_AES_ProcessData(hcryp, Timeout);
3845 outcount = hcryp->CrypOutCount;
3850 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3853 __HAL_CRYP_DISABLE(hcryp);
3856 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3857 hcryp->State = HAL_CRYP_STATE_READY;
3866 if ((hcryp->Size % 16U) != 0U)
3871 CRYP_Workaround(hcryp, Timeout);
3886 __IO uint32_t count = 0U;
3887 uint32_t DoKeyIVConfig = 1U;
3889 uint32_t loopcounter;
3890 uint32_t lastwordsize;
3894 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
3896 if (hcryp->KeyIVConfig == 1U)
3901 hcryp->SizesSum += hcryp->Size;
3908 hcryp->KeyIVConfig = 1U;
3909 hcryp->SizesSum = hcryp->Size;
3914 hcryp->SizesSum = hcryp->Size;
3918 if (DoKeyIVConfig == 1U)
3921 hcryp->CrypHeaderCount = 0U;
3925 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
3928 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
3932 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
3933 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
3934 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
3935 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
3938 __HAL_CRYP_ENABLE(hcryp);
3941 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
3948 __HAL_CRYP_DISABLE(hcryp);
3951 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3952 hcryp->State = HAL_CRYP_STATE_READY;
3958 }
while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
3966 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B);
3969 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
3970 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
3971 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
3972 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
3975 __HAL_CRYP_ENABLE(hcryp);
3978 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
3985 __HAL_CRYP_DISABLE(hcryp);
3988 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3989 hcryp->State = HAL_CRYP_STATE_READY;
3998 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4007 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4010 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI);
4013 __HAL_CRYP_ENABLE(hcryp);
4018 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
4021 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4024 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4027 __HAL_CRYP_ENABLE(hcryp);
4029 if (hcryp->Init.HeaderSize == 0U)
4032 hcryp->Phase = CRYP_PHASE_PROCESS;
4035 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, CRYP_PHASE_PAYLOAD);
4038 if (hcryp->Size == 0U)
4041 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4044 hcryp->State = HAL_CRYP_STATE_READY;
4049 else if (hcryp->Size >= 16U)
4051 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
4052 hcryp->CrypInCount++;
4053 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
4054 hcryp->CrypInCount++;
4055 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
4056 hcryp->CrypInCount++;
4057 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
4058 hcryp->CrypInCount++;
4059 if (hcryp->CrypInCount == (hcryp->Size / 4U))
4062#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
4064 hcryp->InCpltCallback(hcryp);
4067 HAL_CRYP_InCpltCallback(hcryp);
4079 npblb = 16U - (uint32_t)(hcryp->Size);
4082 if ((npblb % 4U) == 0U)
4084 lastwordsize = (16U - npblb) / 4U;
4088 lastwordsize = ((16U - npblb) / 4U) + 1U;
4092 for (loopcounter = 0U; loopcounter < lastwordsize ; loopcounter++)
4094 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
4095 hcryp->CrypInCount++;
4097 while (loopcounter < 4U)
4100 hcryp->Instance->DINR = 0x0U;
4105 else if ((hcryp->Init.HeaderSize) < 4U)
4107 for (loopcounter = 0U; loopcounter < hcryp->Init.HeaderSize ; loopcounter++)
4109 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4110 hcryp->CrypHeaderCount++ ;
4112 while (loopcounter < 4U)
4115 hcryp->Instance->DINR = 0x0U;
4119 hcryp->Phase = CRYP_PHASE_PROCESS;
4122 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
4125#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
4127 hcryp->InCpltCallback(hcryp);
4130 HAL_CRYP_InCpltCallback(hcryp);
4133 else if ((hcryp->Init.HeaderSize) >= 4U)
4136 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4137 hcryp->CrypHeaderCount++;
4138 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4139 hcryp->CrypHeaderCount++;
4140 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4141 hcryp->CrypHeaderCount++;
4142 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4143 hcryp->CrypHeaderCount++;
4166 __IO uint32_t count = 0U;
4168 uint32_t DoKeyIVConfig = 1U;
4170 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
4172 if (hcryp->KeyIVConfig == 1U)
4177 hcryp->SizesSum += hcryp->Size;
4184 hcryp->KeyIVConfig = 1U;
4185 hcryp->SizesSum = hcryp->Size;
4190 hcryp->SizesSum = hcryp->Size;
4193 if (DoKeyIVConfig == 1U)
4196 hcryp->CrypHeaderCount = 0U;
4200 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4203 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4207 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect);
4208 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1);
4209 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2);
4210 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3);
4213 __HAL_CRYP_ENABLE(hcryp);
4216 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
4223 __HAL_CRYP_DISABLE(hcryp);
4226 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4227 hcryp->State = HAL_CRYP_STATE_READY;
4233 }
while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
4241 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B);
4244 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect);
4245 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1);
4246 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2);
4247 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3);
4250 __HAL_CRYP_ENABLE(hcryp);
4253 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
4260 __HAL_CRYP_DISABLE(hcryp);
4263 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4264 hcryp->State = HAL_CRYP_STATE_READY;
4273 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4279 if (CRYP_GCMCCM_SetHeaderPhase_DMA(hcryp) !=
HAL_OK)
4287 hcryp->Phase = CRYP_PHASE_PROCESS;
4292 __HAL_CRYP_DISABLE(hcryp);
4297 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
4301 if (hcryp->Size != 0U)
4308 if ((hcryp->Size % 16U) == 0U)
4310 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U),
4311 (uint32_t)(hcryp->pCrypOutBuffPtr));
4315 wordsize = (uint32_t)(hcryp->Size) + (16U - ((uint32_t)(hcryp->Size) % 16U)) ;
4318 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)wordsize / 4U),
4319 (uint32_t)(hcryp->pCrypOutBuffPtr));
4328 hcryp->State = HAL_CRYP_STATE_READY;
4344static HAL_StatusTypeDef CRYP_AESCCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
4347 uint32_t wordsize = (uint32_t)(hcryp->Size) / 4U;
4349 uint32_t DoKeyIVConfig = 1U;
4351 uint32_t loopcounter;
4353 uint32_t lastwordsize;
4356 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
4358 if (hcryp->KeyIVConfig == 1U)
4363 hcryp->SizesSum += hcryp->Size;
4370 hcryp->KeyIVConfig = 1U;
4371 hcryp->SizesSum = hcryp->Size;
4376 hcryp->SizesSum = hcryp->Size;
4379 if (DoKeyIVConfig == 1U)
4383 hcryp->CrypHeaderCount = 0U;
4389 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4392 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4395 hcryp->Instance->IV0LR = (hcryp->Init.B0[0]) & CRYP_CCM_CTR1_0;
4396 hcryp->Instance->IV0RR = hcryp->Init.B0[1];
4397 hcryp->Instance->IV1LR = hcryp->Init.B0[2];
4398 hcryp->Instance->IV1RR = (hcryp->Init.B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4402 __HAL_CRYP_ENABLE(hcryp);
4405 if (hcryp->Init.DataType == CRYP_DATATYPE_8B)
4407 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0));
4408 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 1));
4409 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 2));
4410 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 3));
4412 else if (hcryp->Init.DataType == CRYP_DATATYPE_16B)
4414 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0), 16);
4415 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 1), 16);
4416 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 2), 16);
4417 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 3), 16);
4419 else if (hcryp->Init.DataType == CRYP_DATATYPE_1B)
4421 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0));
4422 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 1));
4423 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 2));
4424 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 3));
4428 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0);
4429 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 1);
4430 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 2);
4431 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 3);
4437 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN)
4442 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
4445 __HAL_CRYP_DISABLE(hcryp);
4448 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4449 hcryp->State = HAL_CRYP_STATE_READY;
4460 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4463 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
4466 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4469 hcryp->Instance->IVR3 = 0U;
4470 hcryp->Instance->IVR2 = 0U;
4471 hcryp->Instance->IVR1 = 0U;
4472 hcryp->Instance->IVR0 = 0U;
4475 __HAL_CRYP_ENABLE(hcryp);
4478 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0);
4479 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 1);
4480 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 2);
4481 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 3);
4484 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
4487 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4488 hcryp->State = HAL_CRYP_STATE_READY;
4495 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4498 hcryp->Phase = CRYP_PHASE_PROCESS;
4503 if (hcryp->Init.HeaderSize != 0U)
4505 if ((hcryp->Init.HeaderSize % 4U) == 0U)
4508 for (loopcounter = 0U; (loopcounter < hcryp->Init.HeaderSize); loopcounter += 4U)
4511 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4512 hcryp->CrypHeaderCount++ ;
4513 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4514 hcryp->CrypHeaderCount++ ;
4515 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4516 hcryp->CrypHeaderCount++ ;
4517 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4518 hcryp->CrypHeaderCount++ ;
4520 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
4523 __HAL_CRYP_DISABLE(hcryp);
4526 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4527 hcryp->State = HAL_CRYP_STATE_READY;
4534 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4540 for (loopcounter = 0U; (loopcounter < ((hcryp->Init.HeaderSize) - (hcryp->Init.HeaderSize % 4U)));
4544 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4545 hcryp->CrypHeaderCount++ ;
4546 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4547 hcryp->CrypHeaderCount++ ;
4548 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4549 hcryp->CrypHeaderCount++ ;
4550 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4551 hcryp->CrypHeaderCount++ ;
4553 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
4556 __HAL_CRYP_DISABLE(hcryp);
4559 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4560 hcryp->State = HAL_CRYP_STATE_READY;
4567 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4570 for (loopcounter = 0U; (loopcounter < (hcryp->Init.HeaderSize % 4U)); loopcounter++)
4572 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
4573 hcryp->CrypHeaderCount++ ;
4575 while (loopcounter < 4U)
4578 hcryp->Instance->DINR = 0x0U;
4582 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
4585 __HAL_CRYP_DISABLE(hcryp);
4588 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4589 hcryp->State = HAL_CRYP_STATE_READY;
4596 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4602 if (hcryp->Size != 0U)
4604 if ((hcryp->Size % 16U) != 0U)
4607 wordsize = ((wordsize / 4U) * 4U) ;
4613 outcount = hcryp->CrypOutCount;
4615 while ((hcryp->CrypInCount < wordsize) && (outcount < wordsize))
4618 CRYP_AES_ProcessData(hcryp, Timeout);
4621 outcount = hcryp->CrypOutCount;
4626 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
4629 __HAL_CRYP_DISABLE(hcryp);
4632 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4633 hcryp->State = HAL_CRYP_STATE_READY;
4642 if ((hcryp->Size % 16U) != 0U)
4645 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
4648 if ((npblb % 4U) == 0U)
4650 lastwordsize = (16U - npblb) / 4U;
4654 lastwordsize = ((16U - npblb) / 4U) + 1U;
4657 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter ++)
4660 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
4661 hcryp->CrypInCount++;
4663 while (loopcounter < 4U)
4666 hcryp->Instance->DINR = 0U;
4670 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
4673 __HAL_CRYP_DISABLE(hcryp);
4676 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4677 hcryp->State = HAL_CRYP_STATE_READY;
4684 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4696 if (CRYP_GCMCCM_SetHeaderPhase(hcryp, Timeout) !=
HAL_OK)
4704 hcryp->Phase = CRYP_PHASE_PROCESS;
4707 __HAL_CRYP_DISABLE(hcryp);
4710 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
4713 __HAL_CRYP_ENABLE(hcryp);
4717 if ((hcryp->Size % 16U) != 0U)
4720 wordsize = ((wordsize / 4U) * 4U) ;
4725 outcount = hcryp->CrypOutCount;
4728 while ((hcryp->CrypInCount < wordsize) && (outcount < wordsize))
4731 CRYP_AES_ProcessData(hcryp, Timeout);
4736 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
4739 __HAL_CRYP_DISABLE(hcryp);
4742 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4743 hcryp->State = HAL_CRYP_STATE_READY;
4752 if ((hcryp->Size % 16U) != 0U)
4758 CRYP_Workaround(hcryp, Timeout);
4775 uint32_t DoKeyIVConfig = 1U;
4777 __IO uint32_t count = 0U;
4780 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
4782 if (hcryp->KeyIVConfig == 1U)
4787 hcryp->SizesSum += hcryp->Size;
4794 hcryp->KeyIVConfig = 1U;
4795 hcryp->SizesSum = hcryp->Size;
4800 hcryp->SizesSum = hcryp->Size;
4804 if (DoKeyIVConfig == 1U)
4807 hcryp->CrypHeaderCount = 0U;
4813 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4816 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4819 hcryp->Instance->IV0LR = (hcryp->Init.B0[0]) & CRYP_CCM_CTR1_0;
4820 hcryp->Instance->IV0RR = hcryp->Init.B0[1];
4821 hcryp->Instance->IV1LR = hcryp->Init.B0[2];
4822 hcryp->Instance->IV1RR = (hcryp->Init.B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4825 __HAL_CRYP_ENABLE(hcryp);
4828 if (hcryp->Init.DataType == CRYP_DATATYPE_8B)
4830 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0));
4831 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 1));
4832 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 2));
4833 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 3));
4835 else if (hcryp->Init.DataType == CRYP_DATATYPE_16B)
4837 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0), 16);
4838 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 1), 16);
4839 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 2), 16);
4840 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 3), 16);
4842 else if (hcryp->Init.DataType == CRYP_DATATYPE_1B)
4844 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0));
4845 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 1));
4846 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 2));
4847 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 3));
4851 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0);
4852 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 1);
4853 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 2);
4854 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 3);
4857 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
4864 __HAL_CRYP_DISABLE(hcryp);
4867 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4868 hcryp->State = HAL_CRYP_STATE_READY;
4874 }
while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
4877 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4882 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI);
4885 __HAL_CRYP_ENABLE(hcryp);
4891 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4894 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
4897 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4900 hcryp->Instance->IVR3 = 0U;
4901 hcryp->Instance->IVR2 = 0U;
4902 hcryp->Instance->IVR1 = 0U;
4903 hcryp->Instance->IVR0 = 0U;
4906 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4908 __HAL_CRYP_ENABLE(hcryp);
4911 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0);
4912 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 1);
4913 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 2);
4914 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 3);
4932 __IO uint32_t count = 0U;
4933 uint32_t DoKeyIVConfig = 1U;
4935 uint32_t loopcounter;
4937 uint32_t lastwordsize;
4940 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
4942 if (hcryp->KeyIVConfig == 1U)
4947 hcryp->SizesSum += hcryp->Size;
4954 hcryp->KeyIVConfig = 1U;
4955 hcryp->SizesSum = hcryp->Size;
4960 hcryp->SizesSum = hcryp->Size;
4963 if (DoKeyIVConfig == 1U)
4967 hcryp->CrypHeaderCount = 0U;
4973 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4976 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4979 hcryp->Instance->IV0LR = (hcryp->Init.B0[0]) & CRYP_CCM_CTR1_0;
4980 hcryp->Instance->IV0RR = hcryp->Init.B0[1];
4981 hcryp->Instance->IV1LR = hcryp->Init.B0[2];
4982 hcryp->Instance->IV1RR = (hcryp->Init.B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4985 __HAL_CRYP_ENABLE(hcryp);
4988 if (hcryp->Init.DataType == CRYP_DATATYPE_8B)
4990 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0));
4991 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 1));
4992 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 2));
4993 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 3));
4995 else if (hcryp->Init.DataType == CRYP_DATATYPE_16B)
4997 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0), 16);
4998 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 1), 16);
4999 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 2), 16);
5000 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 3), 16);
5002 else if (hcryp->Init.DataType == CRYP_DATATYPE_1B)
5004 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0));
5005 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 1));
5006 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 2));
5007 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 3));
5011 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0);
5012 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 1);
5013 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 2);
5014 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 3);
5018 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5025 __HAL_CRYP_DISABLE(hcryp);
5028 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5029 hcryp->State = HAL_CRYP_STATE_READY;
5035 }
while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
5041 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5044 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
5047 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
5050 hcryp->Instance->IVR3 = 0U;
5051 hcryp->Instance->IVR2 = 0U;
5052 hcryp->Instance->IVR1 = 0U;
5053 hcryp->Instance->IVR0 = 0U;
5056 __HAL_CRYP_ENABLE(hcryp);
5059 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0);
5060 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 1);
5061 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 2);
5062 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 3);
5064 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5071 __HAL_CRYP_DISABLE(hcryp);
5074 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5075 hcryp->State = HAL_CRYP_STATE_READY;
5083 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5086 hcryp->Phase = CRYP_PHASE_PROCESS;
5091 if (hcryp->Init.HeaderSize != 0U)
5093 if ((hcryp->Init.HeaderSize % 4U) == 0U)
5096 for (loopcounter = 0U; (loopcounter < hcryp->Init.HeaderSize); loopcounter += 4U)
5099 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5100 hcryp->CrypHeaderCount++ ;
5101 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5102 hcryp->CrypHeaderCount++ ;
5103 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5104 hcryp->CrypHeaderCount++ ;
5105 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5106 hcryp->CrypHeaderCount++ ;
5109 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5116 __HAL_CRYP_DISABLE(hcryp);
5119 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5120 hcryp->State = HAL_CRYP_STATE_READY;
5128 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5134 for (loopcounter = 0U; (loopcounter < ((hcryp->Init.HeaderSize) - (hcryp->Init.HeaderSize % 4U)));
5138 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5139 hcryp->CrypHeaderCount++ ;
5140 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5141 hcryp->CrypHeaderCount++ ;
5142 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5143 hcryp->CrypHeaderCount++ ;
5144 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5145 hcryp->CrypHeaderCount++ ;
5147 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5154 __HAL_CRYP_DISABLE(hcryp);
5157 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5158 hcryp->State = HAL_CRYP_STATE_READY;
5166 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5169 for (loopcounter = 0U; (loopcounter < (hcryp->Init.HeaderSize % 4U)); loopcounter++)
5171 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5172 hcryp->CrypHeaderCount++ ;
5174 while (loopcounter < 4U)
5177 hcryp->Instance->DINR = 0x0U;
5181 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5188 __HAL_CRYP_DISABLE(hcryp);
5191 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5192 hcryp->State = HAL_CRYP_STATE_READY;
5200 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5206 if (hcryp->Size != 0U)
5208 if (hcryp->Size >= 16U)
5210 if ((hcryp->Size % 16U) == 0U)
5212 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U),
5213 (uint32_t)(hcryp->pCrypOutBuffPtr));
5217 wordsize = (uint32_t)(hcryp->Size) + (16U - ((uint32_t)(hcryp->Size) % 16U)) ;
5220 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)wordsize / 4U),
5221 (uint32_t)(hcryp->pCrypOutBuffPtr));
5224 if ((hcryp->Size < 16U) != 0U)
5227 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
5230 if ((npblb % 4U) == 0U)
5232 lastwordsize = (16U - npblb) / 4U;
5236 lastwordsize = ((16U - npblb) / 4U) + 1U;
5239 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter ++)
5242 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5243 hcryp->CrypInCount++;
5245 while (loopcounter < 4U)
5248 hcryp->Instance->DINR = 0U;
5251 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5258 __HAL_CRYP_DISABLE(hcryp);
5261 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5262 hcryp->State = HAL_CRYP_STATE_READY;
5270 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5276 hcryp->State = HAL_CRYP_STATE_READY;
5285 hcryp->State = HAL_CRYP_STATE_READY;
5291 if (CRYP_GCMCCM_SetHeaderPhase_DMA(hcryp) !=
HAL_OK)
5299 hcryp->Phase = CRYP_PHASE_PROCESS;
5302 __HAL_CRYP_DISABLE(hcryp);
5305 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
5308 if (hcryp->Size != 0U)
5314 if ((hcryp->Size % 16U) == 0U)
5316 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), hcryp->Size / 4U, (uint32_t)(hcryp->pCrypOutBuffPtr));
5320 wordsize = (uint32_t)(hcryp->Size) + 16U - ((uint32_t)(hcryp->Size) % 16U) ;
5323 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (uint16_t)wordsize / 4U,
5324 (uint32_t)(hcryp->pCrypOutBuffPtr));
5333 hcryp->State = HAL_CRYP_STATE_READY;
5346static void CRYP_GCMCCM_SetPayloadPhase_IT(CRYP_HandleTypeDef *hcryp)
5348 uint32_t loopcounter;
5350 uint32_t lastwordsize;
5360 if (hcryp->Size == 0U)
5363 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
5369 hcryp->State = HAL_CRYP_STATE_READY;
5372 else if (((hcryp->Size / 4U) - (hcryp->CrypInCount)) >= 4U)
5375 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5376 hcryp->CrypInCount++;
5377 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5378 hcryp->CrypInCount++;
5379 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5380 hcryp->CrypInCount++;
5381 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5382 hcryp->CrypInCount++;
5383 if (((hcryp->Size / 4U) == hcryp->CrypInCount) && ((hcryp->Size % 16U) == 0U))
5386 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
5389#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
5391 hcryp->InCpltCallback(hcryp);
5394 HAL_CRYP_InCpltCallback(hcryp);
5397 if (hcryp->CrypOutCount < (hcryp->Size / 4U))
5401 for (i = 0U; i < 4U; i++)
5403 temp[i] = hcryp->Instance->DOUT;
5406 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U))
5408 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5409 hcryp->CrypOutCount++;
5412 if (((hcryp->Size / 4U) == hcryp->CrypOutCount) && ((hcryp->Size % 16U) == 0U))
5415 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
5418 hcryp->State = HAL_CRYP_STATE_READY;
5421 __HAL_CRYP_DISABLE(hcryp);
5427#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5429 hcryp->OutCpltCallback(hcryp);
5432 HAL_CRYP_OutCpltCallback(hcryp);
5437 else if ((hcryp->Size % 16U) != 0U)
5445 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
5448 if ((npblb % 4U) == 0U)
5450 lastwordsize = (16U - npblb) / 4U;
5454 lastwordsize = ((16U - npblb) / 4U) + 1U;
5458 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter++)
5460 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5461 hcryp->CrypInCount++;
5463 while (loopcounter < 4U)
5466 hcryp->Instance->DIN = 0x0U;
5469 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
5471 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
5473 for (i = 0U; i < 4U; i++)
5475 temp[i] = hcryp->Instance->DOUT;
5477 if (((hcryp->Size) / 4U) == 0U)
5479 for (i = 0U; i < ((uint32_t)(hcryp->Size) % 4U); i++)
5481 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5482 hcryp->CrypOutCount++;
5486 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U))
5488 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5489 hcryp->CrypOutCount++;
5493 if (hcryp->CrypOutCount >= (hcryp->Size / 4U))
5496 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI | CRYP_IT_INI);
5499 hcryp->State = HAL_CRYP_STATE_READY;
5505#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5507 hcryp->OutCpltCallback(hcryp);
5510 HAL_CRYP_OutCpltCallback(hcryp);
5522 for (i = 0U; i < 4U; i++)
5524 temp[i] = hcryp->Instance->DOUTR;
5527 while ((hcryp->CrypOutCount < ((hcryp->Size + 3U) / 4U)) && (i < 4U))
5529 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5530 hcryp->CrypOutCount++;
5534 outcount = hcryp->CrypOutCount;
5536 if ((hcryp->CrypOutCount >= (hcryp->Size / 4U)) && ((outcount * 4U) >= hcryp->Size))
5539 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
5542 hcryp->State = HAL_CRYP_STATE_READY;
5548#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5550 hcryp->OutCpltCallback(hcryp);
5553 HAL_CRYP_OutCpltCallback(hcryp);
5557 else if (((hcryp->Size / 4U) - (hcryp->CrypInCount)) >= 4U)
5560 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5561 hcryp->CrypInCount++;
5562 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5563 hcryp->CrypInCount++;
5564 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5565 hcryp->CrypInCount++;
5566 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5567 hcryp->CrypInCount++;
5568 if ((hcryp->CrypInCount == (hcryp->Size / 4U)) && ((hcryp->Size % 16U) == 0U))
5571#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5573 hcryp->InCpltCallback(hcryp);
5576 HAL_CRYP_InCpltCallback(hcryp);
5588 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
5591 if ((npblb % 4U) == 0U)
5593 lastwordsize = (16U - npblb) / 4U;
5597 lastwordsize = ((16U - npblb) / 4U) + 1U;
5601 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter++)
5603 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5604 hcryp->CrypInCount++;
5606 while (loopcounter < 4U)
5609 hcryp->Instance->DINR = 0x0U;
5625static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
5627 uint32_t loopcounter;
5628 uint32_t size_in_bytes;
5630 uint32_t mask[12] = {0x0U, 0xFF000000U, 0xFFFF0000U, 0xFFFFFF00U,
5631 0x0U, 0x0000FF00U, 0x0000FFFFU, 0xFF00FFFFU,
5632 0x0U, 0x000000FFU, 0x0000FFFFU, 0x00FFFFFFU
5637 if (hcryp->Init.HeaderWidthUnit == CRYP_HEADERWIDTHUNIT_WORD)
5639 size_in_bytes = hcryp->Init.HeaderSize * 4U;
5643 size_in_bytes = hcryp->Init.HeaderSize;
5646 if (size_in_bytes != 0U)
5652 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5655 __HAL_CRYP_ENABLE(hcryp);
5657 if ((size_in_bytes % 16U) == 0U)
5660 for (loopcounter = 0U; (loopcounter < (size_in_bytes / 4U)); loopcounter += 4U)
5662 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5663 hcryp->CrypHeaderCount++ ;
5664 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5665 hcryp->CrypHeaderCount++ ;
5666 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5667 hcryp->CrypHeaderCount++ ;
5668 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5669 hcryp->CrypHeaderCount++ ;
5672 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) !=
HAL_OK)
5675 __HAL_CRYP_DISABLE(hcryp);
5678 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5679 hcryp->State = HAL_CRYP_STATE_READY;
5690 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 16U) * 4U)); loopcounter += 4U)
5692 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5693 hcryp->CrypHeaderCount++ ;
5694 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5695 hcryp->CrypHeaderCount++ ;
5696 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5697 hcryp->CrypHeaderCount++ ;
5698 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5699 hcryp->CrypHeaderCount++ ;
5702 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) !=
HAL_OK)
5705 __HAL_CRYP_DISABLE(hcryp);
5708 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5709 hcryp->State = HAL_CRYP_STATE_READY;
5717 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 4U) % 4U)); loopcounter++)
5719 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5720 hcryp->CrypHeaderCount++ ;
5723 if ((size_in_bytes % 4U) == 0U)
5726 while (loopcounter < 4U)
5728 hcryp->Instance->DIN = 0x0U;
5735 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5736 tmp &= mask[(((hcryp->Init.DataType) >> 5) * 2U) + (size_in_bytes % 4U)];
5737 hcryp->Instance->DIN = tmp;
5740 while (loopcounter < 4U)
5742 hcryp->Instance->DIN = 0x0U;
5747 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) !=
HAL_OK)
5750 __HAL_CRYP_DISABLE(hcryp);
5753 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5754 hcryp->State = HAL_CRYP_STATE_READY;
5762 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) !=
HAL_OK)
5765 __HAL_CRYP_DISABLE(hcryp);
5768 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5769 hcryp->State = HAL_CRYP_STATE_READY;
5778 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
5781 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
5784 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5787 __HAL_CRYP_ENABLE(hcryp);
5791 if ((size_in_bytes % 16U) == 0U)
5794 for (loopcounter = 0U; (loopcounter < (size_in_bytes / 4U)); loopcounter += 4U)
5797 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5798 hcryp->CrypHeaderCount++ ;
5799 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5800 hcryp->CrypHeaderCount++ ;
5801 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5802 hcryp->CrypHeaderCount++ ;
5803 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5804 hcryp->CrypHeaderCount++ ;
5806 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
5809 __HAL_CRYP_DISABLE(hcryp);
5812 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5813 hcryp->State = HAL_CRYP_STATE_READY;
5820 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5826 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 16U) * 4U)); loopcounter += 4U)
5829 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5830 hcryp->CrypHeaderCount++ ;
5831 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5832 hcryp->CrypHeaderCount++ ;
5833 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5834 hcryp->CrypHeaderCount++ ;
5835 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5836 hcryp->CrypHeaderCount++ ;
5838 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
5841 __HAL_CRYP_DISABLE(hcryp);
5844 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5845 hcryp->State = HAL_CRYP_STATE_READY;
5852 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5855 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 4U) % 4U)); loopcounter++)
5857 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5858 hcryp->CrypHeaderCount++ ;
5861 if ((size_in_bytes % 4U) == 0U)
5864 while (loopcounter < 4U)
5866 hcryp->Instance->DINR = 0x0U;
5873 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5874 tmp &= mask[(hcryp->Init.DataType * 2U) + (size_in_bytes % 4U)];
5875 hcryp->Instance->DINR = tmp;
5878 while (loopcounter < 4U)
5880 hcryp->Instance->DINR = 0x0U;
5885 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
5888 __HAL_CRYP_DISABLE(hcryp);
5891 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5892 hcryp->State = HAL_CRYP_STATE_READY;
5899 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5906 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
5909 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
5912 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5915 __HAL_CRYP_ENABLE(hcryp);
5929static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase_DMA(CRYP_HandleTypeDef *hcryp)
5931 __IO uint32_t count = 0U;
5932 uint32_t loopcounter;
5933 uint32_t headersize_in_bytes;
5935 uint32_t mask[12] = {0x0U, 0xFF000000U, 0xFFFF0000U, 0xFFFFFF00U,
5936 0x0U, 0x0000FF00U, 0x0000FFFFU, 0xFF00FFFFU,
5937 0x0U, 0x000000FFU, 0x0000FFFFU, 0x00FFFFFFU
5941 if (hcryp->Init.HeaderWidthUnit == CRYP_HEADERWIDTHUNIT_WORD)
5943 headersize_in_bytes = hcryp->Init.HeaderSize * 4U;
5947 headersize_in_bytes = hcryp->Init.HeaderSize;
5950 if (headersize_in_bytes != 0U)
5956 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5959 __HAL_CRYP_ENABLE(hcryp);
5961 if ((headersize_in_bytes % 16U) == 0U)
5964 for (loopcounter = 0U; (loopcounter < (headersize_in_bytes / 4U)); loopcounter += 4U)
5966 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5967 hcryp->CrypHeaderCount++ ;
5968 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5969 hcryp->CrypHeaderCount++ ;
5970 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5971 hcryp->CrypHeaderCount++ ;
5972 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5973 hcryp->CrypHeaderCount++ ;
5976 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
5983 __HAL_CRYP_DISABLE(hcryp);
5986 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5987 hcryp->State = HAL_CRYP_STATE_READY;
5999 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 16U) * 4U)); loopcounter += 4U)
6001 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6002 hcryp->CrypHeaderCount++ ;
6003 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6004 hcryp->CrypHeaderCount++ ;
6005 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6006 hcryp->CrypHeaderCount++ ;
6007 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6008 hcryp->CrypHeaderCount++ ;
6011 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6018 __HAL_CRYP_DISABLE(hcryp);
6021 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6022 hcryp->State = HAL_CRYP_STATE_READY;
6031 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 4U) % 4U)); loopcounter++)
6033 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6034 hcryp->CrypHeaderCount++ ;
6037 if ((headersize_in_bytes % 4U) == 0U)
6040 while (loopcounter < 4U)
6042 hcryp->Instance->DIN = 0x0U;
6049 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6050 tmp &= mask[(((hcryp->Init.DataType) >> 5) * 2U) + (headersize_in_bytes % 4U)];
6051 hcryp->Instance->DIN = tmp;
6054 while (loopcounter < 4U)
6056 hcryp->Instance->DIN = 0x0U;
6061 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6068 __HAL_CRYP_DISABLE(hcryp);
6071 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6072 hcryp->State = HAL_CRYP_STATE_READY;
6081 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6088 __HAL_CRYP_DISABLE(hcryp);
6091 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6092 hcryp->State = HAL_CRYP_STATE_READY;
6102 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
6105 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
6108 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
6111 __HAL_CRYP_ENABLE(hcryp);
6113 if ((headersize_in_bytes % 16U) == 0U)
6116 for (loopcounter = 0U; (loopcounter < (headersize_in_bytes / 4U)); loopcounter += 4U)
6119 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6120 hcryp->CrypHeaderCount++ ;
6121 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6122 hcryp->CrypHeaderCount++ ;
6123 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6124 hcryp->CrypHeaderCount++ ;
6125 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6126 hcryp->CrypHeaderCount++ ;
6129 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6136 __HAL_CRYP_DISABLE(hcryp);
6139 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6140 hcryp->State = HAL_CRYP_STATE_READY;
6149 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6155 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 16U) * 4U)); loopcounter += 4U)
6158 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6159 hcryp->CrypHeaderCount++ ;
6160 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6161 hcryp->CrypHeaderCount++ ;
6162 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6163 hcryp->CrypHeaderCount++ ;
6164 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6165 hcryp->CrypHeaderCount++ ;
6168 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6175 __HAL_CRYP_DISABLE(hcryp);
6178 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6179 hcryp->State = HAL_CRYP_STATE_READY;
6188 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6191 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 4U) % 4U)); loopcounter++)
6193 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6194 hcryp->CrypHeaderCount++ ;
6197 if ((headersize_in_bytes % 4U) == 0U)
6200 while (loopcounter < 4U)
6202 hcryp->Instance->DINR = 0x0U;
6209 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6210 tmp &= mask[(hcryp->Init.DataType * 2U) + (headersize_in_bytes % 4U)];
6211 hcryp->Instance->DINR = tmp;
6214 while (loopcounter < 4U)
6216 hcryp->Instance->DINR = 0x0U;
6221 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6228 __HAL_CRYP_DISABLE(hcryp);
6231 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6232 hcryp->State = HAL_CRYP_STATE_READY;
6241 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6248 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
6251 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
6254 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
6257 __HAL_CRYP_ENABLE(hcryp);
6271static void CRYP_GCMCCM_SetHeaderPhase_IT(CRYP_HandleTypeDef *hcryp)
6273 uint32_t loopcounter;
6274 uint32_t headersize_in_bytes;
6276 uint32_t lastwordsize;
6280 uint32_t mask[12] = {0x0U, 0xFF000000U, 0xFFFF0000U, 0xFFFFFF00U,
6281 0x0U, 0x0000FF00U, 0x0000FFFFU, 0xFF00FFFFU,
6282 0x0U, 0x000000FFU, 0x0000FFFFU, 0x00FFFFFFU
6285 if (hcryp->Init.HeaderWidthUnit == CRYP_HEADERWIDTHUNIT_WORD)
6287 headersize_in_bytes = hcryp->Init.HeaderSize * 4U;
6291 headersize_in_bytes = hcryp->Init.HeaderSize;
6297 if (headersize_in_bytes <= ((uint32_t)(hcryp->CrypHeaderCount) * 4U))
6300 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
6303 __HAL_CRYP_DISABLE(hcryp);
6306 hcryp->Phase = CRYP_PHASE_PROCESS;
6309 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
6312 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
6315 __HAL_CRYP_ENABLE(hcryp);
6317 else if (((headersize_in_bytes / 4U) - (hcryp->CrypHeaderCount)) >= 4U)
6321 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6322 hcryp->CrypHeaderCount++ ;
6323 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6324 hcryp->CrypHeaderCount++ ;
6325 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6326 hcryp->CrypHeaderCount++ ;
6327 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6328 hcryp->CrypHeaderCount++ ;
6333 for (loopcounter = 0U; loopcounter < ((headersize_in_bytes / 4U) % 4U); loopcounter++)
6335 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6336 hcryp->CrypHeaderCount++ ;
6338 if ((headersize_in_bytes % 4U) == 0U)
6341 while (loopcounter < 4U)
6343 hcryp->Instance->DIN = 0x0U;
6345 hcryp->CrypHeaderCount++;
6351 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6352 tmp &= mask[(((hcryp->Init.DataType) >> 5) * 2U) + (headersize_in_bytes % 4U)];
6353 hcryp->Instance->DIN = tmp;
6355 hcryp->CrypHeaderCount++;
6357 while (loopcounter < 4U)
6359 hcryp->Instance->DIN = 0x0U;
6361 hcryp->CrypHeaderCount++;
6367 if (headersize_in_bytes <= ((uint32_t)(hcryp->CrypHeaderCount) * 4U))
6370 hcryp->Phase = CRYP_PHASE_PROCESS;
6373 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
6376 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, CRYP_PHASE_PAYLOAD);
6378 if (hcryp->Init.Algorithm == CRYP_AES_CCM)
6381 hcryp->CrypHeaderCount++;
6384 if (hcryp->Size == 0U)
6387 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
6390 hcryp->State = HAL_CRYP_STATE_READY;
6395 else if (hcryp->Size >= 16U)
6397 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6398 hcryp->CrypInCount++;
6399 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6400 hcryp->CrypInCount++;
6401 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6402 hcryp->CrypInCount++;
6403 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6404 hcryp->CrypInCount++;
6406 if ((hcryp->CrypInCount == (hcryp->Size / 4U)) && ((hcryp->Size % 16U) == 0U))
6409#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
6411 hcryp->InCpltCallback(hcryp);
6414 HAL_CRYP_InCpltCallback(hcryp);
6425 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
6428 if ((npblb % 4U) == 0U)
6430 lastwordsize = (16U - npblb) / 4U;
6434 lastwordsize = ((16U - npblb) / 4U) + 1U;
6438 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter++)
6440 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6441 hcryp->CrypInCount++;
6443 while (loopcounter < 4U)
6446 hcryp->Instance->DINR = 0x0U;
6451 else if (((headersize_in_bytes / 4U) - (hcryp->CrypHeaderCount)) >= 4U)
6454 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6455 hcryp->CrypHeaderCount++;
6456 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6457 hcryp->CrypHeaderCount++;
6458 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6459 hcryp->CrypHeaderCount++;
6460 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6461 hcryp->CrypHeaderCount++;
6466 for (loopcounter = 0U; loopcounter < ((headersize_in_bytes / 4U) % 4U); loopcounter++)
6468 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6469 hcryp->CrypHeaderCount++ ;
6472 if ((headersize_in_bytes % 4U) == 0U)
6475 while (loopcounter < 4U)
6477 hcryp->Instance->DINR = 0x0U;
6479 hcryp->CrypHeaderCount++;
6485 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6486 tmp &= mask[(hcryp->Init.DataType * 2U) + (headersize_in_bytes % 4U)];
6487 hcryp->Instance->DINR = tmp;
6489 hcryp->CrypHeaderCount++;
6491 while (loopcounter < 4U)
6493 hcryp->Instance->DINR = 0x0U;
6495 hcryp->CrypHeaderCount++;
6510static void CRYP_Workaround(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
6512 uint32_t lastwordsize;
6516 uint32_t temp[4] = {0};
6517 uint32_t temp2[4] = {0};
6519 uint32_t intermediate_data[4] = {0};
6523 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
6526 if ((npblb % 4U) == 0U)
6528 lastwordsize = (16U - npblb) / 4U;
6532 lastwordsize = ((16U - npblb) / 4U) + 1U;
6538 if (hcryp->Init.Algorithm == CRYP_AES_GCM)
6540 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_ENCRYPT)
6545 __HAL_CRYP_DISABLE(hcryp);
6548 hcryp->Instance->IV1RR = ((hcryp->Instance->CSGCMCCM7R) - 1U);
6549 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CTR);
6552 __HAL_CRYP_ENABLE(hcryp);
6555 for (index = 0; index < lastwordsize; index ++)
6558 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6559 hcryp->CrypInCount++;
6564 hcryp->Instance->DIN = 0U;
6568 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) !=
HAL_OK)
6571 __HAL_CRYP_DISABLE(hcryp);
6574 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6575 hcryp->State = HAL_CRYP_STATE_READY;
6579#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
6581 hcryp->ErrorCallback(hcryp);
6584 HAL_CRYP_ErrorCallback(hcryp);
6587 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6589 for (index = 0U; index < 4U; index++)
6592 intermediate_data[index] = hcryp->Instance->DOUT;
6595 *(uint32_t *)(hcryp->pCrypOutBuffPtr + (hcryp->CrypOutCount)) = intermediate_data[index];
6596 hcryp->CrypOutCount++;
6600 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_ENCRYPT)
6606 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_GCM);
6609 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_GCM_CCMPH, CRYP_PHASE_FINAL);
6611 if ((hcryp->Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_32B)
6613 if ((npblb % 4U) == 1U)
6615 intermediate_data[lastwordsize - 1U] &= 0xFFFFFF00U;
6617 if ((npblb % 4U) == 2U)
6619 intermediate_data[lastwordsize - 1U] &= 0xFFFF0000U;
6621 if ((npblb % 4U) == 3U)
6623 intermediate_data[lastwordsize - 1U] &= 0xFF000000U;
6626 else if ((hcryp->Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_8B)
6628 if ((npblb % 4U) == 1U)
6630 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFFFF00U);
6632 if ((npblb % 4U) == 2U)
6634 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFF0000U);
6636 if ((npblb % 4U) == 3U)
6638 intermediate_data[lastwordsize - 1U] &= __REV(0xFF000000U);
6641 else if ((hcryp->Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_16B)
6643 if ((npblb % 4U) == 1U)
6645 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFFFF00U), 16);
6647 if ((npblb % 4U) == 2U)
6649 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFF0000U), 16);
6651 if ((npblb % 4U) == 3U)
6653 intermediate_data[lastwordsize - 1U] &= __ROR((0xFF000000U), 16);
6658 if ((npblb % 4U) == 1U)
6660 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFFFF00U);
6662 if ((npblb % 4U) == 2U)
6664 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFF0000U);
6666 if ((npblb % 4U) == 3U)
6668 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFF000000U);
6671 for (index = 0U; index < lastwordsize; index ++)
6674 hcryp->Instance->DIN = intermediate_data[index];
6679 hcryp->Instance->DIN = 0x0U;
6683 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) !=
HAL_OK)
6686 __HAL_CRYP_DISABLE(hcryp);
6689 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6690 hcryp->State = HAL_CRYP_STATE_READY;
6694#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
6696 hcryp->ErrorCallback(hcryp);
6699 HAL_CRYP_ErrorCallback(hcryp);
6703 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6705 for (index = 0U; index < 4U; index++)
6707 intermediate_data[index] = hcryp->Instance->DOUT;
6718 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_DECRYPT)
6720 iv1temp = hcryp->Instance->CSGCMCCM7R;
6723 __HAL_CRYP_DISABLE(hcryp);
6725 temp[0] = hcryp->Instance->CSGCMCCM0R;
6726 temp[1] = hcryp->Instance->CSGCMCCM1R;
6727 temp[2] = hcryp->Instance->CSGCMCCM2R;
6728 temp[3] = hcryp->Instance->CSGCMCCM3R;
6730 hcryp->Instance->IV1RR = iv1temp;
6733 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CTR);
6736 __HAL_CRYP_ENABLE(hcryp);
6739 for (index = 0; index < lastwordsize; index ++)
6742 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6743 hcryp->CrypInCount++;
6748 hcryp->Instance->DIN = 0U;
6752 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) !=
HAL_OK)
6755 __HAL_CRYP_DISABLE(hcryp);
6758 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6759 hcryp->State = HAL_CRYP_STATE_READY;
6763#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
6765 hcryp->ErrorCallback(hcryp);
6768 HAL_CRYP_ErrorCallback(hcryp);
6772 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6774 for (index = 0U; index < 4U; index++)
6777 intermediate_data[index] = hcryp->Instance->DOUT;
6780 *(uint32_t *)(hcryp->pCrypOutBuffPtr + (hcryp->CrypOutCount)) = intermediate_data[index];
6781 hcryp->CrypOutCount++;
6785 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_DECRYPT)
6787 temp2[0] = hcryp->Instance->CSGCMCCM0R;
6788 temp2[1] = hcryp->Instance->CSGCMCCM1R;
6789 temp2[2] = hcryp->Instance->CSGCMCCM2R;
6790 temp2[3] = hcryp->Instance->CSGCMCCM3R;
6793 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CCM);
6796 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_GCM_CCMPH, CRYP_PHASE_HEADER);
6799 for (index = lastwordsize; index < 4U; index ++)
6801 intermediate_data[index] = 0U;
6803 if ((npblb % 4U) == 1U)
6805 intermediate_data[lastwordsize - 1U] &= 0xFFFFFF00U;
6807 if ((npblb % 4U) == 2U)
6809 intermediate_data[lastwordsize - 1U] &= 0xFFFF0000U;
6811 if ((npblb % 4U) == 3U)
6813 intermediate_data[lastwordsize - 1U] &= 0xFF000000U;
6815 for (index = 0U; index < 4U ; index ++)
6817 intermediate_data[index] ^= temp[index];
6818 intermediate_data[index] ^= temp2[index];
6820 for (index = 0U; index < 4U; index ++)
6823 hcryp->Instance->DIN = intermediate_data[index] ;
6827 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) !=
HAL_OK)
6830 __HAL_CRYP_DISABLE(hcryp);
6833 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6834 hcryp->State = HAL_CRYP_STATE_READY;
6838#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
6840 hcryp->ErrorCallback(hcryp);
6843 HAL_CRYP_ErrorCallback(hcryp);
6857 if ((hcryp->Instance->CR & AES_CR_MODE) == CRYP_OPERATINGMODE_ENCRYPT)
6860 MODIFY_REG(hcryp->Instance->CR, AES_CR_CHMOD, CRYP_AES_CTR);
6863 for (index = 0U; index < lastwordsize; index ++)
6866 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6867 hcryp->CrypInCount++;
6872 hcryp->Instance->DINR = 0U;
6876 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
6878 hcryp->State = HAL_CRYP_STATE_READY;
6880#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
6882 hcryp->ErrorCallback(hcryp);
6885 HAL_CRYP_ErrorCallback(hcryp);
6890 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6892 for (index = 0U; index < 4U; index++)
6895 intermediate_data[index] = hcryp->Instance->DOUTR;
6898 *(uint32_t *)(hcryp->pCrypOutBuffPtr + (hcryp->CrypOutCount)) = intermediate_data[index];
6899 hcryp->CrypOutCount++;
6902 if ((hcryp->Instance->CR & AES_CR_MODE) == CRYP_OPERATINGMODE_ENCRYPT)
6905 MODIFY_REG(hcryp->Instance->CR, AES_CR_CHMOD, CRYP_AES_GCM_GMAC);
6908 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, CRYP_PHASE_FINAL);
6910 if ((hcryp->Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_32B)
6912 if ((npblb % 4U) == 1U)
6914 intermediate_data[lastwordsize - 1U] &= 0xFFFFFF00U;
6916 if ((npblb % 4U) == 2U)
6918 intermediate_data[lastwordsize - 1U] &= 0xFFFF0000U;
6920 if ((npblb % 4U) == 3U)
6922 intermediate_data[lastwordsize - 1U] &= 0xFF000000U;
6925 else if ((hcryp->Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_8B)
6927 if ((npblb % 4U) == 1U)
6929 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFFFF00U);
6931 if ((npblb % 4U) == 2U)
6933 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFF0000U);
6935 if ((npblb % 4U) == 3U)
6937 intermediate_data[lastwordsize - 1U] &= __REV(0xFF000000U);
6940 else if ((hcryp->Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_16B)
6942 if ((npblb % 4U) == 1U)
6944 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFFFF00U), 16);
6946 if ((npblb % 4U) == 2U)
6948 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFF0000U), 16);
6950 if ((npblb % 4U) == 3U)
6952 intermediate_data[lastwordsize - 1U] &= __ROR((0xFF000000U), 16);
6957 if ((npblb % 4U) == 1U)
6959 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFFFF00U);
6961 if ((npblb % 4U) == 2U)
6963 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFF0000U);
6965 if ((npblb % 4U) == 3U)
6967 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFF000000U);
6972 for (index = 0U; index < lastwordsize; index ++)
6974 hcryp->Instance->DINR = intermediate_data[index];
6979 hcryp->Instance->DINR = 0U;
6983 if (CRYP_WaitOnCCFlag(hcryp, Timeout) !=
HAL_OK)
6986 __HAL_CRYP_DISABLE(hcryp);
6989 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6990 hcryp->State = HAL_CRYP_STATE_READY;
6994#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
6996 hcryp->ErrorCallback(hcryp);
6999 HAL_CRYP_ErrorCallback(hcryp);
7003 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
7005 for (index = 0U; index < 4U; index++)
7007 intermediate_data[index] = hcryp->Instance->DOUTR;
7014#if defined (CRYP_CR_ALGOMODE_AES_GCM)
7022static HAL_StatusTypeDef CRYP_WaitOnIFEMFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7034 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7050static HAL_StatusTypeDef CRYP_WaitOnBUSYFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7062 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7079static HAL_StatusTypeDef CRYP_WaitOnOFNEFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7091 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7109static HAL_StatusTypeDef CRYP_WaitOnCCFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7121 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
#define HAL_IS_BIT_SET(REG, BIT)
HAL_StatusTypeDef
HAL Status structures definition.
#define __HAL_UNLOCK(__HANDLE__)
#define HAL_IS_BIT_CLR(REG, BIT)
#define __HAL_LOCK(__HANDLE__)