Lines Matching refs:hcryp
346 static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_…
350 static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint32_t KeySize);
351 static void CRYP_AES_IT(CRYP_HandleTypeDef *hcryp);
353 static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
354 static void CRYP_GCMCCM_SetPayloadPhase_IT(CRYP_HandleTypeDef *hcryp);
355 static void CRYP_GCMCCM_SetHeaderPhase_IT(CRYP_HandleTypeDef *hcryp);
356 static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase_DMA(CRYP_HandleTypeDef *hcryp);
357 static void CRYP_Workaround(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
358 static HAL_StatusTypeDef CRYP_AESGCM_Process_DMA(CRYP_HandleTypeDef *hcryp);
359 static HAL_StatusTypeDef CRYP_AESGCM_Process_IT(CRYP_HandleTypeDef *hcryp);
360 static HAL_StatusTypeDef CRYP_AESGCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
361 static HAL_StatusTypeDef CRYP_AESCCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
362 static HAL_StatusTypeDef CRYP_AESCCM_Process_IT(CRYP_HandleTypeDef *hcryp);
363 static HAL_StatusTypeDef CRYP_AESCCM_Process_DMA(CRYP_HandleTypeDef *hcryp);
366 static HAL_StatusTypeDef CRYP_AES_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
367 static HAL_StatusTypeDef CRYP_AES_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
368 static HAL_StatusTypeDef CRYP_AES_Decrypt_IT(CRYP_HandleTypeDef *hcryp);
369 static HAL_StatusTypeDef CRYP_AES_Encrypt_IT(CRYP_HandleTypeDef *hcryp);
370 static HAL_StatusTypeDef CRYP_AES_Decrypt_DMA(CRYP_HandleTypeDef *hcryp);
372 static void CRYP_TDES_IT(CRYP_HandleTypeDef *hcryp);
374 static HAL_StatusTypeDef CRYP_WaitOnIFEMFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
376 static HAL_StatusTypeDef CRYP_WaitOnBUSYFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
377 static HAL_StatusTypeDef CRYP_WaitOnOFNEFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
378 static HAL_StatusTypeDef CRYP_TDES_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
380 static HAL_StatusTypeDef CRYP_WaitOnCCFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
430 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_Init() argument
433 if (hcryp == NULL) in HAL_CRYP_Init()
439 assert_param(IS_CRYP_KEYSIZE(hcryp->Init.KeySize)); in HAL_CRYP_Init()
440 assert_param(IS_CRYP_DATATYPE(hcryp->Init.DataType)); in HAL_CRYP_Init()
441 assert_param(IS_CRYP_ALGORITHM(hcryp->Init.Algorithm)); in HAL_CRYP_Init()
442 assert_param(IS_CRYP_INIT(hcryp->Init.KeyIVConfigSkip)); in HAL_CRYP_Init()
445 if (hcryp->State == HAL_CRYP_STATE_RESET) in HAL_CRYP_Init()
448 hcryp->Lock = HAL_UNLOCKED; in HAL_CRYP_Init()
450 hcryp->InCpltCallback = HAL_CRYP_InCpltCallback; /* Legacy weak InCpltCallback */ in HAL_CRYP_Init()
451 hcryp->OutCpltCallback = HAL_CRYP_OutCpltCallback; /* Legacy weak OutCpltCallback */ in HAL_CRYP_Init()
452 hcryp->ErrorCallback = HAL_CRYP_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_CRYP_Init()
454 if (hcryp->MspInitCallback == NULL) in HAL_CRYP_Init()
456 hcryp->MspInitCallback = HAL_CRYP_MspInit; /* Legacy weak MspInit */ in HAL_CRYP_Init()
460 hcryp->MspInitCallback(hcryp); in HAL_CRYP_Init()
463 if (hcryp->State == HAL_CRYP_STATE_RESET) in HAL_CRYP_Init()
466 hcryp->Lock = HAL_UNLOCKED; in HAL_CRYP_Init()
469 HAL_CRYP_MspInit(hcryp); in HAL_CRYP_Init()
476 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_DATATYPE | CRYP_CR_KEYSIZE | CRYP_CR_ALGOMODE, in HAL_CRYP_Init()
477 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm); in HAL_CRYP_Init()
481 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE | AES_CR_KEYSIZE | AES_CR_CHMOD, in HAL_CRYP_Init()
482 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm); in HAL_CRYP_Init()
487 hcryp->ErrorCode = HAL_CRYP_ERROR_NONE; in HAL_CRYP_Init()
490 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Init()
493 hcryp->Phase = CRYP_PHASE_READY; in HAL_CRYP_Init()
505 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_DeInit() argument
508 if (hcryp == NULL) in HAL_CRYP_DeInit()
514 hcryp->Phase = CRYP_PHASE_READY; in HAL_CRYP_DeInit()
517 hcryp->CrypInCount = 0; in HAL_CRYP_DeInit()
518 hcryp->CrypOutCount = 0; in HAL_CRYP_DeInit()
519 hcryp->CrypHeaderCount = 0; in HAL_CRYP_DeInit()
522 __HAL_CRYP_DISABLE(hcryp); in HAL_CRYP_DeInit()
526 if (hcryp->MspDeInitCallback == NULL) in HAL_CRYP_DeInit()
528 hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit; /* Legacy weak MspDeInit */ in HAL_CRYP_DeInit()
531 hcryp->MspDeInitCallback(hcryp); in HAL_CRYP_DeInit()
536 HAL_CRYP_MspDeInit(hcryp); in HAL_CRYP_DeInit()
541 hcryp->State = HAL_CRYP_STATE_RESET; in HAL_CRYP_DeInit()
544 __HAL_UNLOCK(hcryp); in HAL_CRYP_DeInit()
558 HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf) in HAL_CRYP_SetConfig() argument
561 if ((hcryp == NULL) || (pConf == NULL)) in HAL_CRYP_SetConfig()
571 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_SetConfig()
574 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_SetConfig()
577 __HAL_LOCK(hcryp); in HAL_CRYP_SetConfig()
580 hcryp->Init.DataType = pConf->DataType; in HAL_CRYP_SetConfig()
581 hcryp->Init.pKey = pConf->pKey; in HAL_CRYP_SetConfig()
582 hcryp->Init.Algorithm = pConf->Algorithm; in HAL_CRYP_SetConfig()
583 hcryp->Init.KeySize = pConf->KeySize; in HAL_CRYP_SetConfig()
584 hcryp->Init.pInitVect = pConf->pInitVect; in HAL_CRYP_SetConfig()
585 hcryp->Init.Header = pConf->Header; in HAL_CRYP_SetConfig()
586 hcryp->Init.HeaderSize = pConf->HeaderSize; in HAL_CRYP_SetConfig()
587 hcryp->Init.B0 = pConf->B0; in HAL_CRYP_SetConfig()
588 hcryp->Init.DataWidthUnit = pConf->DataWidthUnit; in HAL_CRYP_SetConfig()
589 hcryp->Init.KeyIVConfigSkip = pConf->KeyIVConfigSkip; in HAL_CRYP_SetConfig()
590 hcryp->Init.HeaderWidthUnit = pConf->HeaderWidthUnit; in HAL_CRYP_SetConfig()
595 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_DATATYPE | CRYP_CR_KEYSIZE | CRYP_CR_ALGOMODE, in HAL_CRYP_SetConfig()
596 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm); in HAL_CRYP_SetConfig()
599 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE | AES_CR_KEYSIZE | AES_CR_CHMOD, in HAL_CRYP_SetConfig()
600 hcryp->Init.DataType | hcryp->Init.KeySize | hcryp->Init.Algorithm); in HAL_CRYP_SetConfig()
603 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_ERR_CLEAR); in HAL_CRYP_SetConfig()
608 __HAL_UNLOCK(hcryp); in HAL_CRYP_SetConfig()
611 hcryp->ErrorCode = HAL_CRYP_ERROR_NONE; in HAL_CRYP_SetConfig()
614 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_SetConfig()
617 hcryp->Phase = CRYP_PHASE_READY; in HAL_CRYP_SetConfig()
625 __HAL_UNLOCK(hcryp); in HAL_CRYP_SetConfig()
628 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_SetConfig()
640 HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf) in HAL_CRYP_GetConfig() argument
643 if ((hcryp == NULL) || (pConf == NULL)) in HAL_CRYP_GetConfig()
648 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_GetConfig()
651 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_GetConfig()
654 __HAL_LOCK(hcryp); in HAL_CRYP_GetConfig()
657 pConf->DataType = hcryp->Init.DataType; in HAL_CRYP_GetConfig()
658 pConf->pKey = hcryp->Init.pKey; in HAL_CRYP_GetConfig()
659 pConf->Algorithm = hcryp->Init.Algorithm; in HAL_CRYP_GetConfig()
660 pConf->KeySize = hcryp->Init.KeySize ; in HAL_CRYP_GetConfig()
661 pConf->pInitVect = hcryp->Init.pInitVect; in HAL_CRYP_GetConfig()
662 pConf->Header = hcryp->Init.Header ; in HAL_CRYP_GetConfig()
663 pConf->HeaderSize = hcryp->Init.HeaderSize; in HAL_CRYP_GetConfig()
664 pConf->B0 = hcryp->Init.B0; in HAL_CRYP_GetConfig()
665 pConf->DataWidthUnit = hcryp->Init.DataWidthUnit; in HAL_CRYP_GetConfig()
666 pConf->KeyIVConfigSkip = hcryp->Init.KeyIVConfigSkip; in HAL_CRYP_GetConfig()
667 pConf->HeaderWidthUnit = hcryp->Init.HeaderWidthUnit; in HAL_CRYP_GetConfig()
670 __HAL_UNLOCK(hcryp); in HAL_CRYP_GetConfig()
673 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_GetConfig()
681 __HAL_UNLOCK(hcryp); in HAL_CRYP_GetConfig()
684 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_GetConfig()
694 __weak void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_MspInit() argument
697 UNUSED(hcryp); in HAL_CRYP_MspInit()
710 __weak void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_MspDeInit() argument
713 UNUSED(hcryp); in HAL_CRYP_MspDeInit()
735 HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef C… in HAL_CRYP_RegisterCallback() argument
743 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_RegisterCallback()
748 __HAL_LOCK(hcryp); in HAL_CRYP_RegisterCallback()
750 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_RegisterCallback()
755 hcryp->InCpltCallback = pCallback; in HAL_CRYP_RegisterCallback()
759 hcryp->OutCpltCallback = pCallback; in HAL_CRYP_RegisterCallback()
763 hcryp->ErrorCallback = pCallback; in HAL_CRYP_RegisterCallback()
767 hcryp->MspInitCallback = pCallback; in HAL_CRYP_RegisterCallback()
771 hcryp->MspDeInitCallback = pCallback; in HAL_CRYP_RegisterCallback()
776 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_RegisterCallback()
782 else if (hcryp->State == HAL_CRYP_STATE_RESET) in HAL_CRYP_RegisterCallback()
787 hcryp->MspInitCallback = pCallback; in HAL_CRYP_RegisterCallback()
791 hcryp->MspDeInitCallback = pCallback; in HAL_CRYP_RegisterCallback()
796 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_RegisterCallback()
805 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_RegisterCallback()
811 __HAL_UNLOCK(hcryp); in HAL_CRYP_RegisterCallback()
829 HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef… in HAL_CRYP_UnRegisterCallback() argument
834 __HAL_LOCK(hcryp); in HAL_CRYP_UnRegisterCallback()
836 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_UnRegisterCallback()
841 hcryp->InCpltCallback = HAL_CRYP_InCpltCallback; /* Legacy weak InCpltCallback */ in HAL_CRYP_UnRegisterCallback()
845 … hcryp->OutCpltCallback = HAL_CRYP_OutCpltCallback; /* Legacy weak OutCpltCallback */ in HAL_CRYP_UnRegisterCallback()
849 … hcryp->ErrorCallback = HAL_CRYP_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_CRYP_UnRegisterCallback()
853 hcryp->MspInitCallback = HAL_CRYP_MspInit; in HAL_CRYP_UnRegisterCallback()
857 hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit; in HAL_CRYP_UnRegisterCallback()
862 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_UnRegisterCallback()
868 else if (hcryp->State == HAL_CRYP_STATE_RESET) in HAL_CRYP_UnRegisterCallback()
873 hcryp->MspInitCallback = HAL_CRYP_MspInit; in HAL_CRYP_UnRegisterCallback()
877 hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit; in HAL_CRYP_UnRegisterCallback()
882 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_UnRegisterCallback()
891 hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK; in HAL_CRYP_UnRegisterCallback()
897 __HAL_UNLOCK(hcryp); in HAL_CRYP_UnRegisterCallback()
946 HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint3… in HAL_CRYP_Encrypt() argument
952 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_Encrypt()
955 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_Encrypt()
958 __HAL_LOCK(hcryp); in HAL_CRYP_Encrypt()
961 hcryp->CrypInCount = 0U; in HAL_CRYP_Encrypt()
962 hcryp->CrypOutCount = 0U; in HAL_CRYP_Encrypt()
963 hcryp->pCrypInBuffPtr = Input; in HAL_CRYP_Encrypt()
964 hcryp->pCrypOutBuffPtr = Output; in HAL_CRYP_Encrypt()
967 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD) in HAL_CRYP_Encrypt()
969 hcryp->Size = Size * 4U; in HAL_CRYP_Encrypt()
973 hcryp->Size = Size; in HAL_CRYP_Encrypt()
978 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT); in HAL_CRYP_Encrypt()
981 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE; in HAL_CRYP_Encrypt()
991 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in HAL_CRYP_Encrypt()
992 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in HAL_CRYP_Encrypt()
993 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Encrypt()
995 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in HAL_CRYP_Encrypt()
996 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in HAL_CRYP_Encrypt()
997 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in HAL_CRYP_Encrypt()
998 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in HAL_CRYP_Encrypt()
1002 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Encrypt()
1004 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Encrypt()
1005 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Encrypt()
1009 HAL_CRYP_FIFO_FLUSH(hcryp); in HAL_CRYP_Encrypt()
1012 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Encrypt()
1015 status = CRYP_TDES_Process(hcryp, Timeout); in HAL_CRYP_Encrypt()
1023 status = CRYP_AES_Encrypt(hcryp, Timeout); in HAL_CRYP_Encrypt()
1029 status = CRYP_AESGCM_Process(hcryp, Timeout); in HAL_CRYP_Encrypt()
1036 status = CRYP_AESCCM_Process(hcryp, Timeout); in HAL_CRYP_Encrypt()
1040 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Encrypt()
1042 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt()
1044 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt()
1051 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT); in HAL_CRYP_Encrypt()
1054 algo = hcryp->Instance->CR & AES_CR_CHMOD; in HAL_CRYP_Encrypt()
1064 status = CRYP_AES_Encrypt(hcryp, Timeout); in HAL_CRYP_Encrypt()
1070 status = CRYP_AESGCM_Process(hcryp, Timeout) ; in HAL_CRYP_Encrypt()
1076 status = CRYP_AESCCM_Process(hcryp, Timeout); in HAL_CRYP_Encrypt()
1080 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Encrypt()
1082 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt()
1084 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt()
1092 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt()
1095 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt()
1101 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_Encrypt()
1119 HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint3… in HAL_CRYP_Decrypt() argument
1125 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_Decrypt()
1128 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_Decrypt()
1131 __HAL_LOCK(hcryp); in HAL_CRYP_Decrypt()
1134 hcryp->CrypInCount = 0U; in HAL_CRYP_Decrypt()
1135 hcryp->CrypOutCount = 0U; in HAL_CRYP_Decrypt()
1136 hcryp->pCrypInBuffPtr = Input; in HAL_CRYP_Decrypt()
1137 hcryp->pCrypOutBuffPtr = Output; in HAL_CRYP_Decrypt()
1140 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD) in HAL_CRYP_Decrypt()
1142 hcryp->Size = Size * 4U; in HAL_CRYP_Decrypt()
1146 hcryp->Size = Size; in HAL_CRYP_Decrypt()
1152 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT); in HAL_CRYP_Decrypt()
1155 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE; in HAL_CRYP_Decrypt()
1165 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in HAL_CRYP_Decrypt()
1166 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in HAL_CRYP_Decrypt()
1167 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Decrypt()
1169 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in HAL_CRYP_Decrypt()
1170 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in HAL_CRYP_Decrypt()
1171 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in HAL_CRYP_Decrypt()
1172 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in HAL_CRYP_Decrypt()
1176 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Decrypt()
1178 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Decrypt()
1179 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Decrypt()
1183 HAL_CRYP_FIFO_FLUSH(hcryp); in HAL_CRYP_Decrypt()
1186 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Decrypt()
1189 status = CRYP_TDES_Process(hcryp, Timeout); in HAL_CRYP_Decrypt()
1198 status = CRYP_AES_Decrypt(hcryp, Timeout); in HAL_CRYP_Decrypt()
1204 status = CRYP_AESGCM_Process(hcryp, Timeout) ; in HAL_CRYP_Decrypt()
1210 status = CRYP_AESCCM_Process(hcryp, Timeout); in HAL_CRYP_Decrypt()
1214 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Decrypt()
1216 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt()
1218 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt()
1225 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT); in HAL_CRYP_Decrypt()
1228 algo = hcryp->Instance->CR & AES_CR_CHMOD; in HAL_CRYP_Decrypt()
1238 status = CRYP_AES_Decrypt(hcryp, Timeout); in HAL_CRYP_Decrypt()
1244 status = CRYP_AESGCM_Process(hcryp, Timeout) ; in HAL_CRYP_Decrypt()
1250 status = CRYP_AESCCM_Process(hcryp, Timeout); in HAL_CRYP_Decrypt()
1254 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Decrypt()
1256 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt()
1258 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt()
1266 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt()
1269 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt()
1275 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_Decrypt()
1292 HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, ui… in HAL_CRYP_Encrypt_IT() argument
1297 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_Encrypt_IT()
1300 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_Encrypt_IT()
1303 __HAL_LOCK(hcryp); in HAL_CRYP_Encrypt_IT()
1306 hcryp->CrypInCount = 0U; in HAL_CRYP_Encrypt_IT()
1307 hcryp->CrypOutCount = 0U; in HAL_CRYP_Encrypt_IT()
1308 hcryp->pCrypInBuffPtr = Input; in HAL_CRYP_Encrypt_IT()
1309 hcryp->pCrypOutBuffPtr = Output; in HAL_CRYP_Encrypt_IT()
1312 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD) in HAL_CRYP_Encrypt_IT()
1314 hcryp->Size = Size * 4U; in HAL_CRYP_Encrypt_IT()
1318 hcryp->Size = Size; in HAL_CRYP_Encrypt_IT()
1324 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT); in HAL_CRYP_Encrypt_IT()
1327 algo = (hcryp->Instance->CR & CRYP_CR_ALGOMODE); in HAL_CRYP_Encrypt_IT()
1337 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in HAL_CRYP_Encrypt_IT()
1338 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in HAL_CRYP_Encrypt_IT()
1339 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Encrypt_IT()
1341 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in HAL_CRYP_Encrypt_IT()
1342 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in HAL_CRYP_Encrypt_IT()
1343 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in HAL_CRYP_Encrypt_IT()
1344 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in HAL_CRYP_Encrypt_IT()
1347 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Encrypt_IT()
1349 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Encrypt_IT()
1350 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Encrypt_IT()
1354 HAL_CRYP_FIFO_FLUSH(hcryp); in HAL_CRYP_Encrypt_IT()
1357 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Encrypt_IT()
1360 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI); in HAL_CRYP_Encrypt_IT()
1363 __HAL_CRYP_ENABLE(hcryp); in HAL_CRYP_Encrypt_IT()
1370 status = CRYP_AES_Encrypt_IT(hcryp); in HAL_CRYP_Encrypt_IT()
1375 status = CRYP_AESGCM_Process_IT(hcryp) ; in HAL_CRYP_Encrypt_IT()
1380 status = CRYP_AESCCM_Process_IT(hcryp); in HAL_CRYP_Encrypt_IT()
1384 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Encrypt_IT()
1386 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt_IT()
1388 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt_IT()
1396 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT); in HAL_CRYP_Encrypt_IT()
1399 algo = hcryp->Instance->CR & AES_CR_CHMOD; in HAL_CRYP_Encrypt_IT()
1408 status = CRYP_AES_Encrypt_IT(hcryp); in HAL_CRYP_Encrypt_IT()
1414 status = CRYP_AESGCM_Process_IT(hcryp) ; in HAL_CRYP_Encrypt_IT()
1420 status = CRYP_AESCCM_Process_IT(hcryp); in HAL_CRYP_Encrypt_IT()
1424 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Encrypt_IT()
1426 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt_IT()
1428 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt_IT()
1438 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_Encrypt_IT()
1455 HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, ui… in HAL_CRYP_Decrypt_IT() argument
1460 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_Decrypt_IT()
1463 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_Decrypt_IT()
1466 __HAL_LOCK(hcryp); in HAL_CRYP_Decrypt_IT()
1469 hcryp->CrypInCount = 0U; in HAL_CRYP_Decrypt_IT()
1470 hcryp->CrypOutCount = 0U; in HAL_CRYP_Decrypt_IT()
1471 hcryp->pCrypInBuffPtr = Input; in HAL_CRYP_Decrypt_IT()
1472 hcryp->pCrypOutBuffPtr = Output; in HAL_CRYP_Decrypt_IT()
1475 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD) in HAL_CRYP_Decrypt_IT()
1477 hcryp->Size = Size * 4U; in HAL_CRYP_Decrypt_IT()
1481 hcryp->Size = Size; in HAL_CRYP_Decrypt_IT()
1487 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT); in HAL_CRYP_Decrypt_IT()
1490 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE; in HAL_CRYP_Decrypt_IT()
1500 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in HAL_CRYP_Decrypt_IT()
1501 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in HAL_CRYP_Decrypt_IT()
1502 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Decrypt_IT()
1504 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in HAL_CRYP_Decrypt_IT()
1505 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in HAL_CRYP_Decrypt_IT()
1506 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in HAL_CRYP_Decrypt_IT()
1507 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in HAL_CRYP_Decrypt_IT()
1511 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Decrypt_IT()
1513 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Decrypt_IT()
1514 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Decrypt_IT()
1517 HAL_CRYP_FIFO_FLUSH(hcryp); in HAL_CRYP_Decrypt_IT()
1520 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Decrypt_IT()
1523 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI); in HAL_CRYP_Decrypt_IT()
1526 __HAL_CRYP_ENABLE(hcryp); in HAL_CRYP_Decrypt_IT()
1535 status = CRYP_AES_Decrypt_IT(hcryp); in HAL_CRYP_Decrypt_IT()
1541 status = CRYP_AESGCM_Process_IT(hcryp) ; in HAL_CRYP_Decrypt_IT()
1547 status = CRYP_AESCCM_Process_IT(hcryp); in HAL_CRYP_Decrypt_IT()
1551 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Decrypt_IT()
1553 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt_IT()
1555 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt_IT()
1563 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT); in HAL_CRYP_Decrypt_IT()
1566 algo = hcryp->Instance->CR & AES_CR_CHMOD; in HAL_CRYP_Decrypt_IT()
1575 status = CRYP_AES_Decrypt_IT(hcryp); in HAL_CRYP_Decrypt_IT()
1581 status = CRYP_AESGCM_Process_IT(hcryp) ; in HAL_CRYP_Decrypt_IT()
1587 status = CRYP_AESCCM_Process_IT(hcryp); in HAL_CRYP_Decrypt_IT()
1591 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Decrypt_IT()
1593 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt_IT()
1595 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt_IT()
1605 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_Decrypt_IT()
1622 HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, u… in HAL_CRYP_Encrypt_DMA() argument
1628 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_Encrypt_DMA()
1631 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_Encrypt_DMA()
1634 __HAL_LOCK(hcryp); in HAL_CRYP_Encrypt_DMA()
1637 hcryp->CrypInCount = 0U; in HAL_CRYP_Encrypt_DMA()
1638 hcryp->CrypOutCount = 0U; in HAL_CRYP_Encrypt_DMA()
1639 hcryp->pCrypInBuffPtr = Input; in HAL_CRYP_Encrypt_DMA()
1640 hcryp->pCrypOutBuffPtr = Output; in HAL_CRYP_Encrypt_DMA()
1643 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD) in HAL_CRYP_Encrypt_DMA()
1645 hcryp->Size = Size * 4U; in HAL_CRYP_Encrypt_DMA()
1649 hcryp->Size = Size; in HAL_CRYP_Encrypt_DMA()
1655 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT); in HAL_CRYP_Encrypt_DMA()
1658 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE; in HAL_CRYP_Encrypt_DMA()
1668 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in HAL_CRYP_Encrypt_DMA()
1669 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in HAL_CRYP_Encrypt_DMA()
1670 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Encrypt_DMA()
1672 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in HAL_CRYP_Encrypt_DMA()
1673 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in HAL_CRYP_Encrypt_DMA()
1674 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in HAL_CRYP_Encrypt_DMA()
1675 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in HAL_CRYP_Encrypt_DMA()
1679 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Encrypt_DMA()
1681 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Encrypt_DMA()
1682 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Encrypt_DMA()
1686 HAL_CRYP_FIFO_FLUSH(hcryp); in HAL_CRYP_Encrypt_DMA()
1689 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Encrypt_DMA()
1692 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)(hcryp->Size) / 4U), in HAL_CRYP_Encrypt_DMA()
1693 (uint32_t)(hcryp->pCrypOutBuffPtr)); in HAL_CRYP_Encrypt_DMA()
1700 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in HAL_CRYP_Encrypt_DMA()
1702 if (hcryp->KeyIVConfig == 1U) in HAL_CRYP_Encrypt_DMA()
1713 hcryp->KeyIVConfig = 1U; in HAL_CRYP_Encrypt_DMA()
1720 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in HAL_CRYP_Encrypt_DMA()
1723 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in HAL_CRYP_Encrypt_DMA()
1725 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Encrypt_DMA()
1726 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1U); in HAL_CRYP_Encrypt_DMA()
1727 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2U); in HAL_CRYP_Encrypt_DMA()
1728 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3U); in HAL_CRYP_Encrypt_DMA()
1733 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Encrypt_DMA()
1736 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)(hcryp->Size) / 4U), in HAL_CRYP_Encrypt_DMA()
1737 (uint32_t)(hcryp->pCrypOutBuffPtr)); in HAL_CRYP_Encrypt_DMA()
1742 status = CRYP_AESGCM_Process_DMA(hcryp) ; in HAL_CRYP_Encrypt_DMA()
1747 status = CRYP_AESCCM_Process_DMA(hcryp); in HAL_CRYP_Encrypt_DMA()
1751 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Encrypt_DMA()
1753 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt_DMA()
1755 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt_DMA()
1762 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT); in HAL_CRYP_Encrypt_DMA()
1765 algo = hcryp->Instance->CR & AES_CR_CHMOD; in HAL_CRYP_Encrypt_DMA()
1774 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in HAL_CRYP_Encrypt_DMA()
1776 if (hcryp->KeyIVConfig == 1U) in HAL_CRYP_Encrypt_DMA()
1787 hcryp->KeyIVConfig = 1U; in HAL_CRYP_Encrypt_DMA()
1794 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in HAL_CRYP_Encrypt_DMA()
1797 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in HAL_CRYP_Encrypt_DMA()
1799 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Encrypt_DMA()
1800 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Encrypt_DMA()
1801 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in HAL_CRYP_Encrypt_DMA()
1802 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in HAL_CRYP_Encrypt_DMA()
1806 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Encrypt_DMA()
1809 …CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U), (uint32_t)(hcryp->… in HAL_CRYP_Encrypt_DMA()
1814 status = CRYP_AESGCM_Process_DMA(hcryp) ; in HAL_CRYP_Encrypt_DMA()
1819 status = CRYP_AESCCM_Process_DMA(hcryp); in HAL_CRYP_Encrypt_DMA()
1823 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Encrypt_DMA()
1825 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Encrypt_DMA()
1827 __HAL_UNLOCK(hcryp); in HAL_CRYP_Encrypt_DMA()
1837 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_Encrypt_DMA()
1854 HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, u… in HAL_CRYP_Decrypt_DMA() argument
1859 if (hcryp->State == HAL_CRYP_STATE_READY) in HAL_CRYP_Decrypt_DMA()
1863 hcryp->State = HAL_CRYP_STATE_BUSY; in HAL_CRYP_Decrypt_DMA()
1866 __HAL_LOCK(hcryp); in HAL_CRYP_Decrypt_DMA()
1869 hcryp->CrypInCount = 0U; in HAL_CRYP_Decrypt_DMA()
1870 hcryp->CrypOutCount = 0U; in HAL_CRYP_Decrypt_DMA()
1871 hcryp->pCrypInBuffPtr = Input; in HAL_CRYP_Decrypt_DMA()
1872 hcryp->pCrypOutBuffPtr = Output; in HAL_CRYP_Decrypt_DMA()
1875 if (hcryp->Init.DataWidthUnit == CRYP_DATAWIDTHUNIT_WORD) in HAL_CRYP_Decrypt_DMA()
1877 hcryp->Size = Size * 4U; in HAL_CRYP_Decrypt_DMA()
1881 hcryp->Size = Size; in HAL_CRYP_Decrypt_DMA()
1887 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT); in HAL_CRYP_Decrypt_DMA()
1890 algo = hcryp->Instance->CR & CRYP_CR_ALGOMODE; in HAL_CRYP_Decrypt_DMA()
1900 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in HAL_CRYP_Decrypt_DMA()
1901 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in HAL_CRYP_Decrypt_DMA()
1902 if ((hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Decrypt_DMA()
1904 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in HAL_CRYP_Decrypt_DMA()
1905 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in HAL_CRYP_Decrypt_DMA()
1906 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in HAL_CRYP_Decrypt_DMA()
1907 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in HAL_CRYP_Decrypt_DMA()
1911 if ((hcryp->Init.Algorithm == CRYP_DES_CBC) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_Decrypt_DMA()
1913 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in HAL_CRYP_Decrypt_DMA()
1914 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in HAL_CRYP_Decrypt_DMA()
1918 HAL_CRYP_FIFO_FLUSH(hcryp); in HAL_CRYP_Decrypt_DMA()
1921 hcryp->Phase = CRYP_PHASE_PROCESS; in HAL_CRYP_Decrypt_DMA()
1924 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)(hcryp->Size) / 4U), in HAL_CRYP_Decrypt_DMA()
1925 (uint32_t)(hcryp->pCrypOutBuffPtr)); in HAL_CRYP_Decrypt_DMA()
1933 status = CRYP_AES_Decrypt_DMA(hcryp); in HAL_CRYP_Decrypt_DMA()
1938 status = CRYP_AESGCM_Process_DMA(hcryp) ; in HAL_CRYP_Decrypt_DMA()
1943 status = CRYP_AESCCM_Process_DMA(hcryp); in HAL_CRYP_Decrypt_DMA()
1947 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Decrypt_DMA()
1949 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt_DMA()
1951 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt_DMA()
1959 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT); in HAL_CRYP_Decrypt_DMA()
1962 algo = hcryp->Instance->CR & AES_CR_CHMOD; in HAL_CRYP_Decrypt_DMA()
1972 status = CRYP_AES_Decrypt_DMA(hcryp); in HAL_CRYP_Decrypt_DMA()
1977 status = CRYP_AESGCM_Process_DMA(hcryp) ; in HAL_CRYP_Decrypt_DMA()
1982 status = CRYP_AESCCM_Process_DMA(hcryp); in HAL_CRYP_Decrypt_DMA()
1986 hcryp->ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED; in HAL_CRYP_Decrypt_DMA()
1988 hcryp->State = HAL_CRYP_STATE_READY; in HAL_CRYP_Decrypt_DMA()
1990 __HAL_UNLOCK(hcryp); in HAL_CRYP_Decrypt_DMA()
1999 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in HAL_CRYP_Decrypt_DMA()
2035 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_IRQHandler() argument
2040 uint32_t itstatus = hcryp->Instance->MISR; in HAL_CRYP_IRQHandler()
2044 if ((hcryp->Init.Algorithm == CRYP_DES_ECB) || (hcryp->Init.Algorithm == CRYP_DES_CBC) in HAL_CRYP_IRQHandler()
2045 || (hcryp->Init.Algorithm == CRYP_TDES_ECB) || (hcryp->Init.Algorithm == CRYP_TDES_CBC)) in HAL_CRYP_IRQHandler()
2047 CRYP_TDES_IT(hcryp); /* DES or TDES*/ in HAL_CRYP_IRQHandler()
2049 else if ((hcryp->Init.Algorithm == CRYP_AES_ECB) || (hcryp->Init.Algorithm == CRYP_AES_CBC) in HAL_CRYP_IRQHandler()
2050 || (hcryp->Init.Algorithm == CRYP_AES_CTR)) in HAL_CRYP_IRQHandler()
2052 CRYP_AES_IT(hcryp); /*AES*/ in HAL_CRYP_IRQHandler()
2055 …else if ((hcryp->Init.Algorithm == CRYP_AES_GCM) || (hcryp->Init.Algorithm == CRYP_CR_ALGOMODE_AES… in HAL_CRYP_IRQHandler()
2058 if ((hcryp->Instance->CR & CRYP_PHASE_HEADER) == CRYP_PHASE_HEADER) in HAL_CRYP_IRQHandler()
2060 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp); in HAL_CRYP_IRQHandler()
2064 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp); in HAL_CRYP_IRQHandler()
2075 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_CCF) != RESET) in HAL_CRYP_IRQHandler()
2077 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_CCFIE) != RESET) in HAL_CRYP_IRQHandler()
2081 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in HAL_CRYP_IRQHandler()
2083 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC) in HAL_CRYP_IRQHandler()
2087 if ((hcryp->Instance->CR & CRYP_PHASE_HEADER) == CRYP_PHASE_HEADER) in HAL_CRYP_IRQHandler()
2089 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp); in HAL_CRYP_IRQHandler()
2093 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp); in HAL_CRYP_IRQHandler()
2096 else if (hcryp->Init.Algorithm == CRYP_AES_CCM) in HAL_CRYP_IRQHandler()
2099 if (hcryp->Init.HeaderSize >= hcryp->CrypHeaderCount) in HAL_CRYP_IRQHandler()
2101 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp); in HAL_CRYP_IRQHandler()
2105 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp); in HAL_CRYP_IRQHandler()
2110 CRYP_AES_IT(hcryp); in HAL_CRYP_IRQHandler()
2115 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_ERRIE) != RESET) in HAL_CRYP_IRQHandler()
2118 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_WRERR) != RESET) in HAL_CRYP_IRQHandler()
2120 hcryp->ErrorCode |= HAL_CRYP_ERROR_WRITE; in HAL_CRYP_IRQHandler()
2123 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_RDERR) != RESET) in HAL_CRYP_IRQHandler()
2125 hcryp->ErrorCode |= HAL_CRYP_ERROR_READ; in HAL_CRYP_IRQHandler()
2137 uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_GetError() argument
2139 return hcryp->ErrorCode; in HAL_CRYP_GetError()
2148 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_GetState() argument
2150 return hcryp->State; in HAL_CRYP_GetState()
2159 __weak void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_InCpltCallback() argument
2162 UNUSED(hcryp); in HAL_CRYP_InCpltCallback()
2175 __weak void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_OutCpltCallback() argument
2178 UNUSED(hcryp); in HAL_CRYP_OutCpltCallback()
2191 __weak void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp) in HAL_CRYP_ErrorCallback() argument
2194 UNUSED(hcryp); in HAL_CRYP_ErrorCallback()
2218 static HAL_StatusTypeDef CRYP_TDES_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout) in CRYP_TDES_Process() argument
2226 __HAL_CRYP_ENABLE(hcryp); in CRYP_TDES_Process()
2228 outcount = hcryp->CrypOutCount; in CRYP_TDES_Process()
2231 while ((hcryp->CrypInCount < (hcryp->Size / 4U)) && (outcount < (hcryp->Size / 4U))) in CRYP_TDES_Process()
2234 incount = hcryp->CrypInCount; in CRYP_TDES_Process()
2236 if (((hcryp->Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->Size / 4U))) in CRYP_TDES_Process()
2239 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_TDES_Process()
2240 hcryp->CrypInCount++; in CRYP_TDES_Process()
2241 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_TDES_Process()
2242 hcryp->CrypInCount++; in CRYP_TDES_Process()
2246 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK) in CRYP_TDES_Process()
2249 __HAL_CRYP_DISABLE(hcryp); in CRYP_TDES_Process()
2252 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_TDES_Process()
2253 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_TDES_Process()
2256 __HAL_UNLOCK(hcryp); in CRYP_TDES_Process()
2259 hcryp->ErrorCallback(hcryp); in CRYP_TDES_Process()
2262 HAL_CRYP_ErrorCallback(hcryp); in CRYP_TDES_Process()
2267 outcount = hcryp->CrypOutCount; in CRYP_TDES_Process()
2269 if (((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->Size / 4U))) in CRYP_TDES_Process()
2274 temp[i] = hcryp->Instance->DOUT; in CRYP_TDES_Process()
2277 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 2U)) in CRYP_TDES_Process()
2279 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i]; in CRYP_TDES_Process()
2280 hcryp->CrypOutCount++; in CRYP_TDES_Process()
2285 outcount = hcryp->CrypOutCount; in CRYP_TDES_Process()
2288 __HAL_CRYP_DISABLE(hcryp); in CRYP_TDES_Process()
2290 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_TDES_Process()
2304 static void CRYP_TDES_IT(CRYP_HandleTypeDef *hcryp) in CRYP_TDES_IT() argument
2309 if (hcryp->State == HAL_CRYP_STATE_BUSY) in CRYP_TDES_IT()
2311 if (__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI) != 0x0U) in CRYP_TDES_IT()
2313 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_FLAG_INRIS) != 0x0U) in CRYP_TDES_IT()
2316 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_TDES_IT()
2317 hcryp->CrypInCount++; in CRYP_TDES_IT()
2318 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_TDES_IT()
2319 hcryp->CrypInCount++; in CRYP_TDES_IT()
2321 if (hcryp->CrypInCount == ((uint16_t)(hcryp->Size) / 4U)) in CRYP_TDES_IT()
2324 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI); in CRYP_TDES_IT()
2328 hcryp->InCpltCallback(hcryp); in CRYP_TDES_IT()
2331 HAL_CRYP_InCpltCallback(hcryp); in CRYP_TDES_IT()
2336 if (__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI) != 0x0U) in CRYP_TDES_IT()
2338 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_FLAG_OUTRIS) != 0x0U) in CRYP_TDES_IT()
2343 temp[i] = hcryp->Instance->DOUT; in CRYP_TDES_IT()
2346 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 2U)) in CRYP_TDES_IT()
2348 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i]; in CRYP_TDES_IT()
2349 hcryp->CrypOutCount++; in CRYP_TDES_IT()
2352 if (hcryp->CrypOutCount == ((uint16_t)(hcryp->Size) / 4U)) in CRYP_TDES_IT()
2355 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI); in CRYP_TDES_IT()
2358 __HAL_CRYP_DISABLE(hcryp); in CRYP_TDES_IT()
2361 __HAL_UNLOCK(hcryp); in CRYP_TDES_IT()
2364 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_TDES_IT()
2368 hcryp->OutCpltCallback(hcryp); in CRYP_TDES_IT()
2371 HAL_CRYP_OutCpltCallback(hcryp); in CRYP_TDES_IT()
2380 __HAL_UNLOCK(hcryp); in CRYP_TDES_IT()
2382 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in CRYP_TDES_IT()
2385 hcryp->ErrorCallback(hcryp); in CRYP_TDES_IT()
2388 HAL_CRYP_ErrorCallback(hcryp); in CRYP_TDES_IT()
2401 static HAL_StatusTypeDef CRYP_AES_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout) in CRYP_AES_Encrypt() argument
2406 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AES_Encrypt()
2408 if (hcryp->KeyIVConfig == 1U) in CRYP_AES_Encrypt()
2419 hcryp->KeyIVConfig = 1U; in CRYP_AES_Encrypt()
2427 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Encrypt()
2429 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in CRYP_AES_Encrypt()
2433 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Encrypt()
2434 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Encrypt()
2435 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Encrypt()
2436 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Encrypt()
2438 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Encrypt()
2439 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Encrypt()
2440 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Encrypt()
2441 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Encrypt()
2447 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AES_Encrypt()
2450 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Encrypt()
2453 outcount = hcryp->CrypOutCount; in CRYP_AES_Encrypt()
2455 while ((hcryp->CrypInCount < (hcryp->Size / 4U)) && (outcount < (hcryp->Size / 4U))) in CRYP_AES_Encrypt()
2458 CRYP_AES_ProcessData(hcryp, Timeout); in CRYP_AES_Encrypt()
2460 outcount = hcryp->CrypOutCount; in CRYP_AES_Encrypt()
2464 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Encrypt()
2467 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Encrypt()
2479 static HAL_StatusTypeDef CRYP_AES_Encrypt_IT(CRYP_HandleTypeDef *hcryp) in CRYP_AES_Encrypt_IT() argument
2483 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AES_Encrypt_IT()
2485 if (hcryp->KeyIVConfig == 1U) in CRYP_AES_Encrypt_IT()
2496 hcryp->KeyIVConfig = 1U; in CRYP_AES_Encrypt_IT()
2503 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Encrypt_IT()
2505 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in CRYP_AES_Encrypt_IT()
2509 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Encrypt_IT()
2510 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Encrypt_IT()
2511 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Encrypt_IT()
2512 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Encrypt_IT()
2515 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Encrypt_IT()
2516 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Encrypt_IT()
2517 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Encrypt_IT()
2518 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Encrypt_IT()
2524 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AES_Encrypt_IT()
2526 if (hcryp->Size != 0U) in CRYP_AES_Encrypt_IT()
2531 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE); in CRYP_AES_Encrypt_IT()
2534 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Encrypt_IT()
2539 hcryp->CrypInCount++; in CRYP_AES_Encrypt_IT()
2540 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Encrypt_IT()
2541 hcryp->CrypInCount++; in CRYP_AES_Encrypt_IT()
2542 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Encrypt_IT()
2543 hcryp->CrypInCount++; in CRYP_AES_Encrypt_IT()
2544 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Encrypt_IT()
2545 hcryp->CrypInCount++; in CRYP_AES_Encrypt_IT()
2546 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Encrypt_IT()
2551 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI); in CRYP_AES_Encrypt_IT()
2554 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Encrypt_IT()
2561 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Encrypt_IT()
2564 __HAL_UNLOCK(hcryp); in CRYP_AES_Encrypt_IT()
2577 static HAL_StatusTypeDef CRYP_AES_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t Timeout) in CRYP_AES_Decrypt() argument
2582 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AES_Decrypt()
2584 if (hcryp->KeyIVConfig == 1U) in CRYP_AES_Decrypt()
2595 hcryp->KeyIVConfig = 1U; in CRYP_AES_Decrypt()
2602 if (hcryp->Init.Algorithm != CRYP_AES_CTR) in CRYP_AES_Decrypt()
2605 if (hcryp->AutoKeyDerivation == DISABLE)/*Mode 2 Key preparation*/ in CRYP_AES_Decrypt()
2608 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION); in CRYP_AES_Decrypt()
2611 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt()
2614 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt()
2617 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AES_Decrypt()
2620 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Decrypt()
2623 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_Decrypt()
2624 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt()
2627 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt()
2631 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AES_Decrypt()
2634 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT); in CRYP_AES_Decrypt()
2639 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt()
2642 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT); in CRYP_AES_Decrypt()
2646 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY); in CRYP_AES_Decrypt()
2649 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt()
2652 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt()
2655 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) != HAL_OK) in CRYP_AES_Decrypt()
2658 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Decrypt()
2661 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_Decrypt()
2662 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt()
2665 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt()
2669 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, hcryp->Init.Algorithm); in CRYP_AES_Decrypt()
2676 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt()
2680 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in CRYP_AES_Decrypt()
2684 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Decrypt()
2685 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Decrypt()
2686 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Decrypt()
2687 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Decrypt()
2689 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Decrypt()
2690 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Decrypt()
2691 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Decrypt()
2692 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Decrypt()
2697 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AES_Decrypt()
2700 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt()
2703 outcount = hcryp->CrypOutCount; in CRYP_AES_Decrypt()
2705 while ((hcryp->CrypInCount < (hcryp->Size / 4U)) && (outcount < (hcryp->Size / 4U))) in CRYP_AES_Decrypt()
2708 CRYP_AES_ProcessData(hcryp, Timeout); in CRYP_AES_Decrypt()
2710 outcount = hcryp->CrypOutCount; in CRYP_AES_Decrypt()
2714 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Decrypt()
2717 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt()
2728 static HAL_StatusTypeDef CRYP_AES_Decrypt_IT(CRYP_HandleTypeDef *hcryp) in CRYP_AES_Decrypt_IT() argument
2733 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AES_Decrypt_IT()
2735 if (hcryp->KeyIVConfig == 1U) in CRYP_AES_Decrypt_IT()
2746 hcryp->KeyIVConfig = 1U; in CRYP_AES_Decrypt_IT()
2753 if (hcryp->Init.Algorithm != CRYP_AES_CTR) in CRYP_AES_Decrypt_IT()
2756 if (hcryp->AutoKeyDerivation == DISABLE)/*Mode 2 Key preparation*/ in CRYP_AES_Decrypt_IT()
2759 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION); in CRYP_AES_Decrypt_IT()
2762 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_IT()
2765 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt_IT()
2775 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Decrypt_IT()
2778 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_Decrypt_IT()
2779 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt_IT()
2782 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt_IT()
2786 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF)); in CRYP_AES_Decrypt_IT()
2789 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AES_Decrypt_IT()
2792 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT); in CRYP_AES_Decrypt_IT()
2797 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_IT()
2800 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT); in CRYP_AES_Decrypt_IT()
2805 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY); in CRYP_AES_Decrypt_IT()
2808 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_IT()
2811 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt_IT()
2821 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_Decrypt_IT()
2822 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt_IT()
2825 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt_IT()
2829 while (HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY)); in CRYP_AES_Decrypt_IT()
2832 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, hcryp->Init.Algorithm); in CRYP_AES_Decrypt_IT()
2840 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_IT()
2844 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in CRYP_AES_Decrypt_IT()
2848 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Decrypt_IT()
2849 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Decrypt_IT()
2850 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Decrypt_IT()
2851 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Decrypt_IT()
2853 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Decrypt_IT()
2854 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Decrypt_IT()
2855 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Decrypt_IT()
2856 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Decrypt_IT()
2862 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AES_Decrypt_IT()
2863 if (hcryp->Size != 0U) in CRYP_AES_Decrypt_IT()
2869 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE); in CRYP_AES_Decrypt_IT()
2872 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt_IT()
2877 hcryp->CrypInCount++; in CRYP_AES_Decrypt_IT()
2878 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Decrypt_IT()
2879 hcryp->CrypInCount++; in CRYP_AES_Decrypt_IT()
2880 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Decrypt_IT()
2881 hcryp->CrypInCount++; in CRYP_AES_Decrypt_IT()
2882 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Decrypt_IT()
2883 hcryp->CrypInCount++; in CRYP_AES_Decrypt_IT()
2884 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + (hcryp->CrypInCount - 1U)); in CRYP_AES_Decrypt_IT()
2889 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI); in CRYP_AES_Decrypt_IT()
2892 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt_IT()
2899 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt_IT()
2902 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt_IT()
2914 static HAL_StatusTypeDef CRYP_AES_Decrypt_DMA(CRYP_HandleTypeDef *hcryp) in CRYP_AES_Decrypt_DMA() argument
2919 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AES_Decrypt_DMA()
2921 if (hcryp->KeyIVConfig == 1U) in CRYP_AES_Decrypt_DMA()
2932 hcryp->KeyIVConfig = 1U; in CRYP_AES_Decrypt_DMA()
2938 if (hcryp->Init.Algorithm != CRYP_AES_CTR) in CRYP_AES_Decrypt_DMA()
2941 if (hcryp->AutoKeyDerivation == DISABLE)/*Mode 2 key preparation*/ in CRYP_AES_Decrypt_DMA()
2944 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION); in CRYP_AES_Decrypt_DMA()
2947 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_DMA()
2950 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt_DMA()
2960 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Decrypt_DMA()
2963 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_Decrypt_DMA()
2964 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt_DMA()
2967 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt_DMA()
2971 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF)); in CRYP_AES_Decrypt_DMA()
2974 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AES_Decrypt_DMA()
2977 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT); in CRYP_AES_Decrypt_DMA()
2982 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_DMA()
2985 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT); in CRYP_AES_Decrypt_DMA()
2989 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY); in CRYP_AES_Decrypt_DMA()
2992 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_DMA()
2995 __HAL_CRYP_ENABLE(hcryp); in CRYP_AES_Decrypt_DMA()
3005 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_Decrypt_DMA()
3008 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_Decrypt_DMA()
3009 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt_DMA()
3012 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt_DMA()
3016 while (HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY)); in CRYP_AES_Decrypt_DMA()
3019 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, hcryp->Init.Algorithm); in CRYP_AES_Decrypt_DMA()
3026 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AES_Decrypt_DMA()
3029 if (hcryp->Init.Algorithm != CRYP_AES_ECB) in CRYP_AES_Decrypt_DMA()
3033 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Decrypt_DMA()
3034 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Decrypt_DMA()
3035 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Decrypt_DMA()
3036 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Decrypt_DMA()
3038 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AES_Decrypt_DMA()
3039 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AES_Decrypt_DMA()
3040 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AES_Decrypt_DMA()
3041 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AES_Decrypt_DMA()
3047 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AES_Decrypt_DMA()
3049 if (hcryp->Size != 0U) in CRYP_AES_Decrypt_DMA()
3052 …CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U), (uint32_t)(hcryp->… in CRYP_AES_Decrypt_DMA()
3057 __HAL_UNLOCK(hcryp); in CRYP_AES_Decrypt_DMA()
3060 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_Decrypt_DMA()
3075 CRYP_HandleTypeDef *hcryp = (CRYP_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in CRYP_DMAInCplt() local
3080 hcryp->Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DIEN); in CRYP_DMAInCplt()
3083 CLEAR_BIT(hcryp->Instance->CR, AES_CR_DMAINEN); in CRYP_DMAInCplt()
3086 if ((hcryp->Init.Algorithm & CRYP_AES_CCM) == CRYP_AES_CCM) in CRYP_DMAInCplt()
3089 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_DMAInCplt()
3092 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_DMAInCplt()
3095 __HAL_UNLOCK(hcryp); in CRYP_DMAInCplt()
3102 hcryp->InCpltCallback(hcryp); in CRYP_DMAInCplt()
3105 HAL_CRYP_InCpltCallback(hcryp); in CRYP_DMAInCplt()
3116 CRYP_HandleTypeDef *hcryp = (CRYP_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in CRYP_DMAOutCplt() local
3123 hcryp->Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DOEN); in CRYP_DMAOutCplt()
3125 if ((hcryp->Init.Algorithm & CRYP_AES_GCM) != CRYP_AES_GCM) in CRYP_DMAOutCplt()
3128 __HAL_CRYP_DISABLE(hcryp); in CRYP_DMAOutCplt()
3133 __HAL_CRYP_DISABLE(hcryp); in CRYP_DMAOutCplt()
3137 CLEAR_BIT(hcryp->Instance->CR, AES_CR_DMAOUTEN); in CRYP_DMAOutCplt()
3140 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_DMAOutCplt()
3142 if ((hcryp->Init.Algorithm & CRYP_AES_GCM_GMAC) != CRYP_AES_GCM_GMAC) in CRYP_DMAOutCplt()
3145 __HAL_CRYP_DISABLE(hcryp); in CRYP_DMAOutCplt()
3150 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_DMAOutCplt()
3153 __HAL_UNLOCK(hcryp); in CRYP_DMAOutCplt()
3157 hcryp->OutCpltCallback(hcryp); in CRYP_DMAOutCplt()
3160 HAL_CRYP_OutCpltCallback(hcryp); in CRYP_DMAOutCplt()
3171 CRYP_HandleTypeDef *hcryp = (CRYP_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in CRYP_DMAError() local
3174 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_DMAError()
3177 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA; in CRYP_DMAError()
3182 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_DMAError()
3189 hcryp->ErrorCallback(hcryp); in CRYP_DMAError()
3192 HAL_CRYP_ErrorCallback(hcryp); in CRYP_DMAError()
3205 static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_… in CRYP_SetDMAConfig() argument
3208 hcryp->hdmain->XferCpltCallback = CRYP_DMAInCplt; in CRYP_SetDMAConfig()
3211 hcryp->hdmain->XferErrorCallback = CRYP_DMAError; in CRYP_SetDMAConfig()
3214 hcryp->hdmaout->XferCpltCallback = CRYP_DMAOutCplt; in CRYP_SetDMAConfig()
3217 hcryp->hdmaout->XferErrorCallback = CRYP_DMAError; in CRYP_SetDMAConfig()
3222 __HAL_CRYP_ENABLE(hcryp); in CRYP_SetDMAConfig()
3225 if (HAL_DMA_Start_IT(hcryp->hdmain, inputaddr, (uint32_t)&hcryp->Instance->DIN, Size) != HAL_OK) in CRYP_SetDMAConfig()
3228 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA; in CRYP_SetDMAConfig()
3233 hcryp->ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3236 HAL_CRYP_ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3240 …if (HAL_DMA_Start_IT(hcryp->hdmaout, (uint32_t)&hcryp->Instance->DOUT, outputaddr, Size) != HAL_OK) in CRYP_SetDMAConfig()
3243 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA; in CRYP_SetDMAConfig()
3248 hcryp->ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3251 HAL_CRYP_ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3255 hcryp->Instance->DMACR = CRYP_DMACR_DOEN | CRYP_DMACR_DIEN; in CRYP_SetDMAConfig()
3259 if (((hcryp->Init.Algorithm & CRYP_AES_GCM_GMAC) != CRYP_AES_GCM_GMAC) in CRYP_SetDMAConfig()
3260 && ((hcryp->Init.Algorithm & CRYP_AES_CCM) != CRYP_AES_CCM)) in CRYP_SetDMAConfig()
3263 __HAL_CRYP_ENABLE(hcryp); in CRYP_SetDMAConfig()
3267 if (HAL_DMA_Start_IT(hcryp->hdmain, inputaddr, (uint32_t)&hcryp->Instance->DINR, Size) != HAL_OK) in CRYP_SetDMAConfig()
3270 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA; in CRYP_SetDMAConfig()
3275 hcryp->ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3278 HAL_CRYP_ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3282 …if (HAL_DMA_Start_IT(hcryp->hdmaout, (uint32_t)&hcryp->Instance->DOUTR, outputaddr, Size) != HAL_O… in CRYP_SetDMAConfig()
3285 hcryp->ErrorCode |= HAL_CRYP_ERROR_DMA; in CRYP_SetDMAConfig()
3290 hcryp->ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3293 HAL_CRYP_ErrorCallback(hcryp); in CRYP_SetDMAConfig()
3298 if ((hcryp->Init.Algorithm & CRYP_AES_CCM) == CRYP_AES_CCM) in CRYP_SetDMAConfig()
3301 SET_BIT(hcryp->Instance->CR, (AES_CR_DMAINEN)); in CRYP_SetDMAConfig()
3306 SET_BIT(hcryp->Instance->CR, (AES_CR_DMAINEN | AES_CR_DMAOUTEN)); in CRYP_SetDMAConfig()
3318 static void CRYP_AES_ProcessData(CRYP_HandleTypeDef *hcryp, uint32_t Timeout) in CRYP_AES_ProcessData() argument
3331 incount = hcryp->CrypInCount; in CRYP_AES_ProcessData()
3333 if (((hcryp->Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->Size / 4U))) in CRYP_AES_ProcessData()
3336 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3337 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3338 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3339 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3340 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3341 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3342 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3343 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3347 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK) in CRYP_AES_ProcessData()
3350 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_ProcessData()
3353 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_ProcessData()
3354 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_ProcessData()
3357 __HAL_UNLOCK(hcryp); in CRYP_AES_ProcessData()
3360 hcryp->ErrorCallback(hcryp); in CRYP_AES_ProcessData()
3363 HAL_CRYP_ErrorCallback(hcryp); in CRYP_AES_ProcessData()
3368 outcount = hcryp->CrypOutCount; in CRYP_AES_ProcessData()
3370 if (((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->Size / 4U))) in CRYP_AES_ProcessData()
3375 temp[i] = hcryp->Instance->DOUT; in CRYP_AES_ProcessData()
3378 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U)) in CRYP_AES_ProcessData()
3380 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i]; in CRYP_AES_ProcessData()
3381 hcryp->CrypOutCount++; in CRYP_AES_ProcessData()
3389 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3390 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3391 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3392 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3393 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3394 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3395 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_ProcessData()
3396 hcryp->CrypInCount++; in CRYP_AES_ProcessData()
3399 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AES_ProcessData()
3402 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_ProcessData()
3405 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AES_ProcessData()
3406 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_ProcessData()
3409 __HAL_UNLOCK(hcryp); in CRYP_AES_ProcessData()
3412 hcryp->ErrorCallback(hcryp); in CRYP_AES_ProcessData()
3415 HAL_CRYP_ErrorCallback(hcryp); in CRYP_AES_ProcessData()
3420 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AES_ProcessData()
3425 temp[i] = hcryp->Instance->DOUTR; in CRYP_AES_ProcessData()
3428 while ((hcryp->CrypOutCount < ((hcryp->Size + 3U) / 4U)) && (i < 4U)) in CRYP_AES_ProcessData()
3430 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i]; in CRYP_AES_ProcessData()
3431 hcryp->CrypOutCount++; in CRYP_AES_ProcessData()
3445 static void CRYP_AES_IT(CRYP_HandleTypeDef *hcryp) in CRYP_AES_IT() argument
3454 if (hcryp->State == HAL_CRYP_STATE_BUSY) in CRYP_AES_IT()
3459 incount = hcryp->CrypInCount; in CRYP_AES_IT()
3460 if (((hcryp->Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->Size / 4U))) in CRYP_AES_IT()
3463 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3464 hcryp->CrypInCount++; in CRYP_AES_IT()
3465 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3466 hcryp->CrypInCount++; in CRYP_AES_IT()
3467 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3468 hcryp->CrypInCount++; in CRYP_AES_IT()
3469 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3470 hcryp->CrypInCount++; in CRYP_AES_IT()
3471 if (hcryp->CrypInCount == ((uint16_t)(hcryp->Size) / 4U)) in CRYP_AES_IT()
3474 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI); in CRYP_AES_IT()
3479 hcryp->InCpltCallback(hcryp); in CRYP_AES_IT()
3482 HAL_CRYP_InCpltCallback(hcryp); in CRYP_AES_IT()
3487 outcount = hcryp->CrypOutCount; in CRYP_AES_IT()
3489 if (((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->Size / 4U))) in CRYP_AES_IT()
3494 temp[i] = hcryp->Instance->DOUT; in CRYP_AES_IT()
3497 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U)) in CRYP_AES_IT()
3499 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i]; in CRYP_AES_IT()
3500 hcryp->CrypOutCount++; in CRYP_AES_IT()
3503 if (hcryp->CrypOutCount == ((uint16_t)(hcryp->Size) / 4U)) in CRYP_AES_IT()
3506 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI); in CRYP_AES_IT()
3509 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_IT()
3512 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_IT()
3515 __HAL_UNLOCK(hcryp); in CRYP_AES_IT()
3520 hcryp->OutCpltCallback(hcryp); in CRYP_AES_IT()
3523 HAL_CRYP_OutCpltCallback(hcryp); in CRYP_AES_IT()
3533 temp[i] = hcryp->Instance->DOUTR; in CRYP_AES_IT()
3536 while ((hcryp->CrypOutCount < ((hcryp->Size + 3U) / 4U)) && (i < 4U)) in CRYP_AES_IT()
3538 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i]; in CRYP_AES_IT()
3539 hcryp->CrypOutCount++; in CRYP_AES_IT()
3543 if (hcryp->CrypOutCount == (hcryp->Size / 4U)) in CRYP_AES_IT()
3546 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE); in CRYP_AES_IT()
3549 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AES_IT()
3552 __HAL_CRYP_DISABLE(hcryp); in CRYP_AES_IT()
3555 __HAL_UNLOCK(hcryp); in CRYP_AES_IT()
3560 hcryp->OutCpltCallback(hcryp); in CRYP_AES_IT()
3563 HAL_CRYP_OutCpltCallback(hcryp); in CRYP_AES_IT()
3569 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3570 hcryp->CrypInCount++; in CRYP_AES_IT()
3571 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3572 hcryp->CrypInCount++; in CRYP_AES_IT()
3573 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3574 hcryp->CrypInCount++; in CRYP_AES_IT()
3575 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AES_IT()
3576 hcryp->CrypInCount++; in CRYP_AES_IT()
3578 if (hcryp->CrypInCount == (hcryp->Size / 4U)) in CRYP_AES_IT()
3583 hcryp->InCpltCallback(hcryp); in CRYP_AES_IT()
3586 HAL_CRYP_InCpltCallback(hcryp); in CRYP_AES_IT()
3596 hcryp->ErrorCode |= HAL_CRYP_ERROR_BUSY; in CRYP_AES_IT()
3599 hcryp->ErrorCallback(hcryp); in CRYP_AES_IT()
3602 HAL_CRYP_ErrorCallback(hcryp); in CRYP_AES_IT()
3614 static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint32_t KeySize) in CRYP_SetKey() argument
3621 hcryp->Instance->K0LR = *(uint32_t *)(hcryp->Init.pKey); in CRYP_SetKey()
3622 hcryp->Instance->K0RR = *(uint32_t *)(hcryp->Init.pKey + 1); in CRYP_SetKey()
3623 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey + 2); in CRYP_SetKey()
3624 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 3); in CRYP_SetKey()
3625 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 4); in CRYP_SetKey()
3626 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 5); in CRYP_SetKey()
3627 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 6); in CRYP_SetKey()
3628 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 7); in CRYP_SetKey()
3631 hcryp->Instance->K1LR = *(uint32_t *)(hcryp->Init.pKey); in CRYP_SetKey()
3632 hcryp->Instance->K1RR = *(uint32_t *)(hcryp->Init.pKey + 1); in CRYP_SetKey()
3633 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey + 2); in CRYP_SetKey()
3634 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 3); in CRYP_SetKey()
3635 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 4); in CRYP_SetKey()
3636 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 5); in CRYP_SetKey()
3639 hcryp->Instance->K2LR = *(uint32_t *)(hcryp->Init.pKey); in CRYP_SetKey()
3640 hcryp->Instance->K2RR = *(uint32_t *)(hcryp->Init.pKey + 1); in CRYP_SetKey()
3641 hcryp->Instance->K3LR = *(uint32_t *)(hcryp->Init.pKey + 2); in CRYP_SetKey()
3642 hcryp->Instance->K3RR = *(uint32_t *)(hcryp->Init.pKey + 3); in CRYP_SetKey()
3652 hcryp->Instance->KEYR7 = *(uint32_t *)(hcryp->Init.pKey); in CRYP_SetKey()
3653 hcryp->Instance->KEYR6 = *(uint32_t *)(hcryp->Init.pKey + 1); in CRYP_SetKey()
3654 hcryp->Instance->KEYR5 = *(uint32_t *)(hcryp->Init.pKey + 2); in CRYP_SetKey()
3655 hcryp->Instance->KEYR4 = *(uint32_t *)(hcryp->Init.pKey + 3); in CRYP_SetKey()
3656 hcryp->Instance->KEYR3 = *(uint32_t *)(hcryp->Init.pKey + 4); in CRYP_SetKey()
3657 hcryp->Instance->KEYR2 = *(uint32_t *)(hcryp->Init.pKey + 5); in CRYP_SetKey()
3658 hcryp->Instance->KEYR1 = *(uint32_t *)(hcryp->Init.pKey + 6); in CRYP_SetKey()
3659 hcryp->Instance->KEYR0 = *(uint32_t *)(hcryp->Init.pKey + 7); in CRYP_SetKey()
3662 hcryp->Instance->KEYR3 = *(uint32_t *)(hcryp->Init.pKey); in CRYP_SetKey()
3663 hcryp->Instance->KEYR2 = *(uint32_t *)(hcryp->Init.pKey + 1); in CRYP_SetKey()
3664 hcryp->Instance->KEYR1 = *(uint32_t *)(hcryp->Init.pKey + 2); in CRYP_SetKey()
3665 hcryp->Instance->KEYR0 = *(uint32_t *)(hcryp->Init.pKey + 3); in CRYP_SetKey()
3682 static HAL_StatusTypeDef CRYP_AESGCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout) in CRYP_AESGCM_Process() argument
3685 uint32_t wordsize = (uint32_t)(hcryp->Size) / 4U ; in CRYP_AESGCM_Process()
3689 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AESGCM_Process()
3691 if (hcryp->KeyIVConfig == 1U) in CRYP_AESGCM_Process()
3696 hcryp->SizesSum += hcryp->Size; /* Compute message total payload length */ in CRYP_AESGCM_Process()
3703 hcryp->KeyIVConfig = 1U; in CRYP_AESGCM_Process()
3704 hcryp->SizesSum = hcryp->Size; /* Merely store payload length */ in CRYP_AESGCM_Process()
3709 hcryp->SizesSum = hcryp->Size; in CRYP_AESGCM_Process()
3715 hcryp->CrypHeaderCount = 0U; in CRYP_AESGCM_Process()
3719 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT); in CRYP_AESGCM_Process()
3722 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AESGCM_Process()
3727 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AESGCM_Process()
3728 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AESGCM_Process()
3729 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AESGCM_Process()
3730 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AESGCM_Process()
3733 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process()
3739 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN) in CRYP_AESGCM_Process()
3747 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process()
3750 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process()
3751 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process()
3754 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process()
3765 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B); in CRYP_AESGCM_Process()
3768 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AESGCM_Process()
3769 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AESGCM_Process()
3770 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AESGCM_Process()
3771 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AESGCM_Process()
3774 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process()
3777 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AESGCM_Process()
3780 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process()
3781 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process()
3784 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process()
3788 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESGCM_Process()
3794 if (CRYP_GCMCCM_SetHeaderPhase(hcryp, Timeout) != HAL_OK) in CRYP_AESGCM_Process()
3802 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AESGCM_Process()
3807 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process()
3810 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD); in CRYP_AESGCM_Process()
3813 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process()
3818 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD); in CRYP_AESGCM_Process()
3823 if ((hcryp->Size % 16U) != 0U) in CRYP_AESGCM_Process()
3832 outcount = hcryp->CrypOutCount; in CRYP_AESGCM_Process()
3835 while ((hcryp->CrypInCount < wordsize) && (outcount < wordsize)) in CRYP_AESGCM_Process()
3838 CRYP_AES_ProcessData(hcryp, Timeout); in CRYP_AESGCM_Process()
3841 outcount = hcryp->CrypOutCount; in CRYP_AESGCM_Process()
3849 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process()
3852 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process()
3853 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process()
3856 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process()
3862 if ((hcryp->Size % 16U) != 0U) in CRYP_AESGCM_Process()
3867 CRYP_Workaround(hcryp, Timeout); in CRYP_AESGCM_Process()
3880 static HAL_StatusTypeDef CRYP_AESGCM_Process_IT(CRYP_HandleTypeDef *hcryp) in CRYP_AESGCM_Process_IT() argument
3890 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AESGCM_Process_IT()
3892 if (hcryp->KeyIVConfig == 1U) in CRYP_AESGCM_Process_IT()
3897 hcryp->SizesSum += hcryp->Size; /* Compute message total payload length */ in CRYP_AESGCM_Process_IT()
3904 hcryp->KeyIVConfig = 1U; in CRYP_AESGCM_Process_IT()
3905 hcryp->SizesSum = hcryp->Size; /* Merely store payload length */ in CRYP_AESGCM_Process_IT()
3910 hcryp->SizesSum = hcryp->Size; in CRYP_AESGCM_Process_IT()
3917 hcryp->CrypHeaderCount = 0U; in CRYP_AESGCM_Process_IT()
3921 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT); in CRYP_AESGCM_Process_IT()
3924 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AESGCM_Process_IT()
3928 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AESGCM_Process_IT()
3929 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AESGCM_Process_IT()
3930 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AESGCM_Process_IT()
3931 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AESGCM_Process_IT()
3934 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process_IT()
3944 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process_IT()
3947 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process_IT()
3948 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process_IT()
3951 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process_IT()
3955 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN); in CRYP_AESGCM_Process_IT()
3963 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B); in CRYP_AESGCM_Process_IT()
3966 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AESGCM_Process_IT()
3967 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AESGCM_Process_IT()
3968 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AESGCM_Process_IT()
3969 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AESGCM_Process_IT()
3972 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process_IT()
3982 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process_IT()
3985 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process_IT()
3986 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process_IT()
3989 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process_IT()
3993 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF)); in CRYP_AESGCM_Process_IT()
3996 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESGCM_Process_IT()
4005 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER); in CRYP_AESGCM_Process_IT()
4008 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI); in CRYP_AESGCM_Process_IT()
4011 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process_IT()
4016 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType); in CRYP_AESGCM_Process_IT()
4019 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER); in CRYP_AESGCM_Process_IT()
4022 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE); in CRYP_AESGCM_Process_IT()
4025 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process_IT()
4027 if (hcryp->Init.HeaderSize == 0U) /*header phase is skipped*/ in CRYP_AESGCM_Process_IT()
4030 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AESGCM_Process_IT()
4033 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, CRYP_PHASE_PAYLOAD); in CRYP_AESGCM_Process_IT()
4036 if (hcryp->Size == 0U) in CRYP_AESGCM_Process_IT()
4039 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE); in CRYP_AESGCM_Process_IT()
4042 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process_IT()
4045 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process_IT()
4047 else if (hcryp->Size >= 16U) in CRYP_AESGCM_Process_IT()
4049 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AESGCM_Process_IT()
4050 hcryp->CrypInCount++; in CRYP_AESGCM_Process_IT()
4051 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AESGCM_Process_IT()
4052 hcryp->CrypInCount++; in CRYP_AESGCM_Process_IT()
4053 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AESGCM_Process_IT()
4054 hcryp->CrypInCount++; in CRYP_AESGCM_Process_IT()
4055 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AESGCM_Process_IT()
4056 hcryp->CrypInCount++; in CRYP_AESGCM_Process_IT()
4057 if (hcryp->CrypInCount == (hcryp->Size / 4U)) in CRYP_AESGCM_Process_IT()
4062 hcryp->InCpltCallback(hcryp); in CRYP_AESGCM_Process_IT()
4065 HAL_CRYP_InCpltCallback(hcryp); in CRYP_AESGCM_Process_IT()
4077 npblb = 16U - (uint32_t)(hcryp->Size); in CRYP_AESGCM_Process_IT()
4092 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AESGCM_Process_IT()
4093 hcryp->CrypInCount++; in CRYP_AESGCM_Process_IT()
4098 hcryp->Instance->DINR = 0x0U; in CRYP_AESGCM_Process_IT()
4103 else if ((hcryp->Init.HeaderSize) < 4U) in CRYP_AESGCM_Process_IT()
4105 for (loopcounter = 0U; loopcounter < hcryp->Init.HeaderSize ; loopcounter++) in CRYP_AESGCM_Process_IT()
4107 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESGCM_Process_IT()
4108 hcryp->CrypHeaderCount++ ; in CRYP_AESGCM_Process_IT()
4113 hcryp->Instance->DINR = 0x0U; in CRYP_AESGCM_Process_IT()
4117 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AESGCM_Process_IT()
4120 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD); in CRYP_AESGCM_Process_IT()
4125 hcryp->InCpltCallback(hcryp); in CRYP_AESGCM_Process_IT()
4128 HAL_CRYP_InCpltCallback(hcryp); in CRYP_AESGCM_Process_IT()
4131 else if ((hcryp->Init.HeaderSize) >= 4U) in CRYP_AESGCM_Process_IT()
4134 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESGCM_Process_IT()
4135 hcryp->CrypHeaderCount++; in CRYP_AESGCM_Process_IT()
4136 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESGCM_Process_IT()
4137 hcryp->CrypHeaderCount++; in CRYP_AESGCM_Process_IT()
4138 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESGCM_Process_IT()
4139 hcryp->CrypHeaderCount++; in CRYP_AESGCM_Process_IT()
4140 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESGCM_Process_IT()
4141 hcryp->CrypHeaderCount++; in CRYP_AESGCM_Process_IT()
4162 static HAL_StatusTypeDef CRYP_AESGCM_Process_DMA(CRYP_HandleTypeDef *hcryp) in CRYP_AESGCM_Process_DMA() argument
4168 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AESGCM_Process_DMA()
4170 if (hcryp->KeyIVConfig == 1U) in CRYP_AESGCM_Process_DMA()
4175 hcryp->SizesSum += hcryp->Size; /* Compute message total payload length */ in CRYP_AESGCM_Process_DMA()
4182 hcryp->KeyIVConfig = 1U; in CRYP_AESGCM_Process_DMA()
4183 hcryp->SizesSum = hcryp->Size; /* Merely store payload length */ in CRYP_AESGCM_Process_DMA()
4188 hcryp->SizesSum = hcryp->Size; in CRYP_AESGCM_Process_DMA()
4194 hcryp->CrypHeaderCount = 0U; in CRYP_AESGCM_Process_DMA()
4198 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT); in CRYP_AESGCM_Process_DMA()
4201 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AESGCM_Process_DMA()
4205 hcryp->Instance->IV0LR = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AESGCM_Process_DMA()
4206 hcryp->Instance->IV0RR = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AESGCM_Process_DMA()
4207 hcryp->Instance->IV1LR = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AESGCM_Process_DMA()
4208 hcryp->Instance->IV1RR = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AESGCM_Process_DMA()
4211 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process_DMA()
4221 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process_DMA()
4224 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process_DMA()
4225 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process_DMA()
4228 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process_DMA()
4232 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN); in CRYP_AESGCM_Process_DMA()
4240 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B); in CRYP_AESGCM_Process_DMA()
4243 hcryp->Instance->IVR3 = *(uint32_t *)(hcryp->Init.pInitVect); in CRYP_AESGCM_Process_DMA()
4244 hcryp->Instance->IVR2 = *(uint32_t *)(hcryp->Init.pInitVect + 1); in CRYP_AESGCM_Process_DMA()
4245 hcryp->Instance->IVR1 = *(uint32_t *)(hcryp->Init.pInitVect + 2); in CRYP_AESGCM_Process_DMA()
4246 hcryp->Instance->IVR0 = *(uint32_t *)(hcryp->Init.pInitVect + 3); in CRYP_AESGCM_Process_DMA()
4249 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESGCM_Process_DMA()
4259 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process_DMA()
4262 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESGCM_Process_DMA()
4263 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process_DMA()
4266 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process_DMA()
4270 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF)); in CRYP_AESGCM_Process_DMA()
4273 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESGCM_Process_DMA()
4279 if (CRYP_GCMCCM_SetHeaderPhase_DMA(hcryp) != HAL_OK) in CRYP_AESGCM_Process_DMA()
4287 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AESGCM_Process_DMA()
4292 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESGCM_Process_DMA()
4297 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD); in CRYP_AESGCM_Process_DMA()
4301 if (hcryp->Size != 0U) in CRYP_AESGCM_Process_DMA()
4307 if ((hcryp->Size % 16U) == 0U) in CRYP_AESGCM_Process_DMA()
4309 …CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U), (uint32_t)(hcryp->… in CRYP_AESGCM_Process_DMA()
4313 wordsize = (uint32_t)(hcryp->Size) + (16U - ((uint32_t)(hcryp->Size) % 16U)) ; in CRYP_AESGCM_Process_DMA()
4316 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), ((uint16_t)wordsize / 4U), in CRYP_AESGCM_Process_DMA()
4317 (uint32_t)(hcryp->pCrypOutBuffPtr)); in CRYP_AESGCM_Process_DMA()
4323 __HAL_UNLOCK(hcryp); in CRYP_AESGCM_Process_DMA()
4326 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESGCM_Process_DMA()
4342 static HAL_StatusTypeDef CRYP_AESCCM_Process(CRYP_HandleTypeDef *hcryp, uint32_t Timeout) in CRYP_AESCCM_Process() argument
4345 uint32_t wordsize = (uint32_t)(hcryp->Size) / 4U; in CRYP_AESCCM_Process()
4354 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE) in CRYP_AESCCM_Process()
4356 if (hcryp->KeyIVConfig == 1U) in CRYP_AESCCM_Process()
4361 hcryp->SizesSum += hcryp->Size; /* Compute message total payload length */ in CRYP_AESCCM_Process()
4368 hcryp->KeyIVConfig = 1U; in CRYP_AESCCM_Process()
4369 hcryp->SizesSum = hcryp->Size; /* Merely store payload length */ in CRYP_AESCCM_Process()
4374 hcryp->SizesSum = hcryp->Size; in CRYP_AESCCM_Process()
4381 hcryp->CrypHeaderCount = 0U; in CRYP_AESCCM_Process()
4387 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT); in CRYP_AESCCM_Process()
4390 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AESCCM_Process()
4393 hcryp->Instance->IV0LR = (hcryp->Init.B0[0]) & CRYP_CCM_CTR1_0; in CRYP_AESCCM_Process()
4394 hcryp->Instance->IV0RR = hcryp->Init.B0[1]; in CRYP_AESCCM_Process()
4395 hcryp->Instance->IV1LR = hcryp->Init.B0[2]; in CRYP_AESCCM_Process()
4396 hcryp->Instance->IV1RR = (hcryp->Init.B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2; in CRYP_AESCCM_Process()
4400 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESCCM_Process()
4403 if (hcryp->Init.DataType == CRYP_DATATYPE_8B) in CRYP_AESCCM_Process()
4405 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0)); in CRYP_AESCCM_Process()
4406 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 1)); in CRYP_AESCCM_Process()
4407 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 2)); in CRYP_AESCCM_Process()
4408 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 3)); in CRYP_AESCCM_Process()
4410 else if (hcryp->Init.DataType == CRYP_DATATYPE_16B) in CRYP_AESCCM_Process()
4412 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0), 16); in CRYP_AESCCM_Process()
4413 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 1), 16); in CRYP_AESCCM_Process()
4414 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 2), 16); in CRYP_AESCCM_Process()
4415 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 3), 16); in CRYP_AESCCM_Process()
4417 else if (hcryp->Init.DataType == CRYP_DATATYPE_1B) in CRYP_AESCCM_Process()
4419 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0)); in CRYP_AESCCM_Process()
4420 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 1)); in CRYP_AESCCM_Process()
4421 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 2)); in CRYP_AESCCM_Process()
4422 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 3)); in CRYP_AESCCM_Process()
4426 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0); in CRYP_AESCCM_Process()
4427 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 1); in CRYP_AESCCM_Process()
4428 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 2); in CRYP_AESCCM_Process()
4429 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 3); in CRYP_AESCCM_Process()
4435 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN) in CRYP_AESCCM_Process()
4443 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4446 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4447 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4450 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4458 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER); in CRYP_AESCCM_Process()
4461 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT); in CRYP_AESCCM_Process()
4464 CRYP_SetKey(hcryp, hcryp->Init.KeySize); in CRYP_AESCCM_Process()
4467 hcryp->Instance->IVR3 = 0U; in CRYP_AESCCM_Process()
4468 hcryp->Instance->IVR2 = 0U; in CRYP_AESCCM_Process()
4469 hcryp->Instance->IVR1 = 0U; in CRYP_AESCCM_Process()
4470 hcryp->Instance->IVR0 = 0U; in CRYP_AESCCM_Process()
4473 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESCCM_Process()
4476 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0); in CRYP_AESCCM_Process()
4477 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 1); in CRYP_AESCCM_Process()
4478 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 2); in CRYP_AESCCM_Process()
4479 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 3); in CRYP_AESCCM_Process()
4482 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AESCCM_Process()
4485 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4486 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4489 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4493 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESCCM_Process()
4496 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AESCCM_Process()
4501 if (hcryp->Init.HeaderSize != 0U) in CRYP_AESCCM_Process()
4503 if ((hcryp->Init.HeaderSize % 4U) == 0U) in CRYP_AESCCM_Process()
4506 for (loopcounter = 0U; (loopcounter < hcryp->Init.HeaderSize); loopcounter += 4U) in CRYP_AESCCM_Process()
4509 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4510 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4511 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4512 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4513 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4514 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4515 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4516 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4518 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AESCCM_Process()
4521 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4524 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4525 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4528 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4532 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESCCM_Process()
4538 …for (loopcounter = 0U; (loopcounter < ((hcryp->Init.HeaderSize) - (hcryp->Init.HeaderSize % 4U)));… in CRYP_AESCCM_Process()
4541 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4542 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4543 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4544 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4545 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4546 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4547 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4548 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4550 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AESCCM_Process()
4553 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4556 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4557 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4560 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4564 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESCCM_Process()
4567 for (loopcounter = 0U; (loopcounter < (hcryp->Init.HeaderSize % 4U)); loopcounter++) in CRYP_AESCCM_Process()
4569 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount); in CRYP_AESCCM_Process()
4570 hcryp->CrypHeaderCount++ ; in CRYP_AESCCM_Process()
4575 hcryp->Instance->DINR = 0x0U; in CRYP_AESCCM_Process()
4579 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AESCCM_Process()
4582 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4585 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4586 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4589 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4593 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESCCM_Process()
4599 if (hcryp->Size != 0U) in CRYP_AESCCM_Process()
4601 if ((hcryp->Size % 16U) != 0U) in CRYP_AESCCM_Process()
4610 outcount = hcryp->CrypOutCount; in CRYP_AESCCM_Process()
4612 while ((hcryp->CrypInCount < wordsize) && (outcount < wordsize)) in CRYP_AESCCM_Process()
4615 CRYP_AES_ProcessData(hcryp, Timeout); in CRYP_AESCCM_Process()
4618 outcount = hcryp->CrypOutCount; in CRYP_AESCCM_Process()
4626 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4629 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4630 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4633 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4639 if ((hcryp->Size % 16U) != 0U) in CRYP_AESCCM_Process()
4642 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size); in CRYP_AESCCM_Process()
4657 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount); in CRYP_AESCCM_Process()
4658 hcryp->CrypInCount++; in CRYP_AESCCM_Process()
4663 hcryp->Instance->DINR = 0U; in CRYP_AESCCM_Process()
4667 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK) in CRYP_AESCCM_Process()
4670 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4673 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT; in CRYP_AESCCM_Process()
4674 hcryp->State = HAL_CRYP_STATE_READY; in CRYP_AESCCM_Process()
4677 __HAL_UNLOCK(hcryp); in CRYP_AESCCM_Process()
4681 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR); in CRYP_AESCCM_Process()
4693 if (CRYP_GCMCCM_SetHeaderPhase(hcryp, Timeout) != HAL_OK) in CRYP_AESCCM_Process()
4701 hcryp->Phase = CRYP_PHASE_PROCESS; in CRYP_AESCCM_Process()
4704 __HAL_CRYP_DISABLE(hcryp); in CRYP_AESCCM_Process()
4707 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD); in CRYP_AESCCM_Process()
4710 __HAL_CRYP_ENABLE(hcryp); in CRYP_AESCCM_Process()
4714 if ((hcryp->Size % 16U) != 0U)
4722 outcount = hcryp->CrypOutCount;
4725 while ((hcryp->CrypInCount < wordsize) && (outcount < wordsize))
4728 CRYP_AES_ProcessData(hcryp, Timeout);
4736 __HAL_CRYP_DISABLE(hcryp);
4739 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4740 hcryp->State = HAL_CRYP_STATE_READY;
4743 __HAL_UNLOCK(hcryp);
4749 if ((hcryp->Size % 16U) != 0U)
4754 CRYP_Workaround(hcryp, Timeout);
4769 static HAL_StatusTypeDef CRYP_AESCCM_Process_IT(CRYP_HandleTypeDef *hcryp)
4776 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
4778 if (hcryp->KeyIVConfig == 1U)
4783 hcryp->SizesSum += hcryp->Size; /* Compute message total payload length */
4790 hcryp->KeyIVConfig = 1U;
4791 hcryp->SizesSum = hcryp->Size; /* Merely store payload length */
4796 hcryp->SizesSum = hcryp->Size;
4803 hcryp->CrypHeaderCount = 0U;
4809 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4812 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4815 hcryp->Instance->IV0LR = (hcryp->Init.B0[0]) & CRYP_CCM_CTR1_0;
4816 hcryp->Instance->IV0RR = hcryp->Init.B0[1];
4817 hcryp->Instance->IV1LR = hcryp->Init.B0[2];
4818 hcryp->Instance->IV1RR = (hcryp->Init.B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4821 __HAL_CRYP_ENABLE(hcryp);
4824 if (hcryp->Init.DataType == CRYP_DATATYPE_8B)
4826 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0));
4827 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 1));
4828 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 2));
4829 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 3));
4831 else if (hcryp->Init.DataType == CRYP_DATATYPE_16B)
4833 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0), 16);
4834 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 1), 16);
4835 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 2), 16);
4836 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 3), 16);
4838 else if (hcryp->Init.DataType == CRYP_DATATYPE_1B)
4840 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0));
4841 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 1));
4842 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 2));
4843 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 3));
4847 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0);
4848 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 1);
4849 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 2);
4850 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 3);
4860 __HAL_CRYP_DISABLE(hcryp);
4863 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4864 hcryp->State = HAL_CRYP_STATE_READY;
4867 __HAL_UNLOCK(hcryp);
4871 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
4874 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4879 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI);
4882 __HAL_CRYP_ENABLE(hcryp);
4888 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4891 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
4894 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4897 hcryp->Instance->IVR3 = 0U;
4898 hcryp->Instance->IVR2 = 0U;
4899 hcryp->Instance->IVR1 = 0U;
4900 hcryp->Instance->IVR0 = 0U;
4903 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4905 __HAL_CRYP_ENABLE(hcryp);
4908 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0);
4909 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 1);
4910 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 2);
4911 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 3);
4926 static HAL_StatusTypeDef CRYP_AESCCM_Process_DMA(CRYP_HandleTypeDef *hcryp)
4937 if (hcryp->Init.KeyIVConfigSkip == CRYP_KEYIVCONFIG_ONCE)
4939 if (hcryp->KeyIVConfig == 1U)
4944 hcryp->SizesSum += hcryp->Size; /* Compute message total payload length */
4951 hcryp->KeyIVConfig = 1U;
4952 hcryp->SizesSum = hcryp->Size; /* Merely store payload length */
4957 hcryp->SizesSum = hcryp->Size;
4964 hcryp->CrypHeaderCount = 0U;
4970 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4973 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
4976 hcryp->Instance->IV0LR = (hcryp->Init.B0[0]) & CRYP_CCM_CTR1_0;
4977 hcryp->Instance->IV0RR = hcryp->Init.B0[1];
4978 hcryp->Instance->IV1LR = hcryp->Init.B0[2];
4979 hcryp->Instance->IV1RR = (hcryp->Init.B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4982 __HAL_CRYP_ENABLE(hcryp);
4985 if (hcryp->Init.DataType == CRYP_DATATYPE_8B)
4987 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0));
4988 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 1));
4989 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 2));
4990 hcryp->Instance->DIN = __REV(*(uint32_t *)(hcryp->Init.B0 + 3));
4992 else if (hcryp->Init.DataType == CRYP_DATATYPE_16B)
4994 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0), 16);
4995 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 1), 16);
4996 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 2), 16);
4997 hcryp->Instance->DIN = __ROR(*(uint32_t *)(hcryp->Init.B0 + 3), 16);
4999 else if (hcryp->Init.DataType == CRYP_DATATYPE_1B)
5001 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0));
5002 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 1));
5003 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 2));
5004 hcryp->Instance->DIN = __RBIT(*(uint32_t *)(hcryp->Init.B0 + 3));
5008 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0);
5009 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 1);
5010 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 2);
5011 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.B0 + 3);
5022 __HAL_CRYP_DISABLE(hcryp);
5025 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5026 hcryp->State = HAL_CRYP_STATE_READY;
5029 __HAL_UNLOCK(hcryp);
5033 while ((hcryp->Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
5039 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5042 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
5045 CRYP_SetKey(hcryp, hcryp->Init.KeySize);
5048 hcryp->Instance->IVR3 = 0U;
5049 hcryp->Instance->IVR2 = 0U;
5050 hcryp->Instance->IVR1 = 0U;
5051 hcryp->Instance->IVR0 = 0U;
5054 __HAL_CRYP_ENABLE(hcryp);
5057 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0);
5058 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 1);
5059 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 2);
5060 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.B0 + 3);
5069 __HAL_CRYP_DISABLE(hcryp);
5072 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5073 hcryp->State = HAL_CRYP_STATE_READY;
5076 __HAL_UNLOCK(hcryp);
5080 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
5082 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5085 hcryp->Phase = CRYP_PHASE_PROCESS;
5090 if (hcryp->Init.HeaderSize != 0U)
5092 if ((hcryp->Init.HeaderSize % 4U) == 0U)
5095 for (loopcounter = 0U; (loopcounter < hcryp->Init.HeaderSize); loopcounter += 4U)
5098 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5099 hcryp->CrypHeaderCount++ ;
5100 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5101 hcryp->CrypHeaderCount++ ;
5102 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5103 hcryp->CrypHeaderCount++ ;
5104 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5105 hcryp->CrypHeaderCount++ ;
5115 __HAL_CRYP_DISABLE(hcryp);
5118 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5119 hcryp->State = HAL_CRYP_STATE_READY;
5122 __HAL_UNLOCK(hcryp);
5126 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
5128 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5134 …for (loopcounter = 0U; (loopcounter < ((hcryp->Init.HeaderSize) - (hcryp->Init.HeaderSize % 4U)));…
5137 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5138 hcryp->CrypHeaderCount++ ;
5139 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5140 hcryp->CrypHeaderCount++ ;
5141 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5142 hcryp->CrypHeaderCount++ ;
5143 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5144 hcryp->CrypHeaderCount++ ;
5153 __HAL_CRYP_DISABLE(hcryp);
5156 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5157 hcryp->State = HAL_CRYP_STATE_READY;
5160 __HAL_UNLOCK(hcryp);
5164 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
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++ ;
5177 hcryp->Instance->DINR = 0x0U;
5188 __HAL_CRYP_DISABLE(hcryp);
5191 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5192 hcryp->State = HAL_CRYP_STATE_READY;
5195 __HAL_UNLOCK(hcryp);
5199 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
5201 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5207 if (hcryp->Size != 0U)
5209 if (hcryp->Size >= 16U)
5211 if ((hcryp->Size % 16U) == 0U)
5213 …CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (hcryp->Size / 4U), (uint32_t)(hcryp->…
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);
5242 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5243 hcryp->CrypInCount++;
5248 hcryp->Instance->DINR = 0U;
5258 __HAL_CRYP_DISABLE(hcryp);
5261 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5262 hcryp->State = HAL_CRYP_STATE_READY;
5265 __HAL_UNLOCK(hcryp);
5269 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
5271 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5274 __HAL_UNLOCK(hcryp);
5277 hcryp->State = HAL_CRYP_STATE_READY;
5283 __HAL_UNLOCK(hcryp);
5286 hcryp->State = HAL_CRYP_STATE_READY;
5292 if (CRYP_GCMCCM_SetHeaderPhase_DMA(hcryp) != HAL_OK)
5300 hcryp->Phase = CRYP_PHASE_PROCESS;
5303 __HAL_CRYP_DISABLE(hcryp);
5306 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
5309 if (hcryp->Size != 0U)
5315 if ((hcryp->Size % 16U) == 0U)
5317 …CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), hcryp->Size / 4U, (uint32_t)(hcryp->pC…
5321 wordsize = (uint32_t)(hcryp->Size) + 16U - ((uint32_t)(hcryp->Size) % 16U) ;
5324 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->pCrypInBuffPtr), (uint16_t)wordsize / 4U,
5325 (uint32_t)(hcryp->pCrypOutBuffPtr));
5331 __HAL_UNLOCK(hcryp);
5334 hcryp->State = HAL_CRYP_STATE_READY;
5347 static void CRYP_GCMCCM_SetPayloadPhase_IT(CRYP_HandleTypeDef *hcryp)
5361 if (hcryp->Size == 0U)
5364 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
5367 __HAL_UNLOCK(hcryp);
5370 hcryp->State = HAL_CRYP_STATE_READY;
5373 else if (((hcryp->Size / 4U) - (hcryp->CrypInCount)) >= 4U)
5376 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5377 hcryp->CrypInCount++;
5378 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5379 hcryp->CrypInCount++;
5380 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5381 hcryp->CrypInCount++;
5382 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5383 hcryp->CrypInCount++;
5384 if (((hcryp->Size / 4U) == hcryp->CrypInCount) && ((hcryp->Size % 16U) == 0U))
5387 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
5392 hcryp->InCpltCallback(hcryp);
5395 HAL_CRYP_InCpltCallback(hcryp);
5398 if (hcryp->CrypOutCount < (hcryp->Size / 4U))
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);
5424 __HAL_UNLOCK(hcryp);
5429 hcryp->OutCpltCallback(hcryp);
5432 HAL_CRYP_OutCpltCallback(hcryp);
5437 else if ((hcryp->Size % 16U) != 0U)
5444 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
5459 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5460 hcryp->CrypInCount++;
5465 hcryp->Instance->DIN = 0x0U;
5468 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
5470 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
5474 temp[i] = hcryp->Instance->DOUT;
5476 if (((hcryp->Size) / 4U) == 0U)
5478 for (i = 0U; i < ((uint32_t)(hcryp->Size) % 4U); i++)
5480 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5481 hcryp->CrypOutCount++;
5485 while (((hcryp->CrypOutCount < ((hcryp->Size) / 4U))) && (i < 4U))
5487 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5488 hcryp->CrypOutCount++;
5492 if (hcryp->CrypOutCount >= (hcryp->Size / 4U))
5495 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI | CRYP_IT_INI);
5498 hcryp->State = HAL_CRYP_STATE_READY;
5501 __HAL_UNLOCK(hcryp);
5506 hcryp->OutCpltCallback(hcryp);
5509 HAL_CRYP_OutCpltCallback(hcryp);
5522 temp[i] = hcryp->Instance->DOUTR;
5525 while ((hcryp->CrypOutCount < ((hcryp->Size + 3U) / 4U)) && (i < 4U))
5527 *(uint32_t *)(hcryp->pCrypOutBuffPtr + hcryp->CrypOutCount) = temp[i];
5528 hcryp->CrypOutCount++;
5532 outcount = hcryp->CrypOutCount;
5534 if ((hcryp->CrypOutCount >= (hcryp->Size / 4U)) && ((outcount * 4U) >= hcryp->Size))
5537 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
5540 hcryp->State = HAL_CRYP_STATE_READY;
5543 __HAL_UNLOCK(hcryp);
5548 hcryp->OutCpltCallback(hcryp);
5551 HAL_CRYP_OutCpltCallback(hcryp);
5555 else if (((hcryp->Size / 4U) - (hcryp->CrypInCount)) >= 4U)
5558 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5559 hcryp->CrypInCount++;
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 if ((hcryp->CrypInCount == (hcryp->Size / 4U)) && ((hcryp->Size % 16U) == 0U))
5571 hcryp->InCpltCallback(hcryp);
5574 HAL_CRYP_InCpltCallback(hcryp);
5585 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
5600 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
5601 hcryp->CrypInCount++;
5606 hcryp->Instance->DINR = 0x0U;
5622 static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
5633 if (hcryp->Init.HeaderWidthUnit == CRYP_HEADERWIDTHUNIT_WORD)
5635 size_in_bytes = hcryp->Init.HeaderSize * 4U;
5639 size_in_bytes = hcryp->Init.HeaderSize;
5648 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5651 __HAL_CRYP_ENABLE(hcryp);
5658 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5659 hcryp->CrypHeaderCount++ ;
5660 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5661 hcryp->CrypHeaderCount++ ;
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++ ;
5668 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) != HAL_OK)
5671 __HAL_CRYP_DISABLE(hcryp);
5674 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5675 hcryp->State = HAL_CRYP_STATE_READY;
5678 __HAL_UNLOCK(hcryp);
5688 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5689 hcryp->CrypHeaderCount++ ;
5690 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5691 hcryp->CrypHeaderCount++ ;
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++ ;
5698 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) != HAL_OK)
5701 __HAL_CRYP_DISABLE(hcryp);
5704 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5705 hcryp->State = HAL_CRYP_STATE_READY;
5708 __HAL_UNLOCK(hcryp);
5715 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5716 hcryp->CrypHeaderCount++ ;
5724 hcryp->Instance->DIN = 0x0U;
5731 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5732 tmp &= mask[(hcryp->Init.DataType * 2U) + (size_in_bytes % 4U)];
5733 hcryp->Instance->DIN = tmp;
5738 hcryp->Instance->DIN = 0x0U;
5743 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) != HAL_OK)
5746 __HAL_CRYP_DISABLE(hcryp);
5749 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5750 hcryp->State = HAL_CRYP_STATE_READY;
5753 __HAL_UNLOCK(hcryp);
5758 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) != HAL_OK)
5761 __HAL_CRYP_DISABLE(hcryp);
5764 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5765 hcryp->State = HAL_CRYP_STATE_READY;
5768 __HAL_UNLOCK(hcryp);
5774 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
5777 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
5780 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5783 __HAL_CRYP_ENABLE(hcryp);
5793 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5794 hcryp->CrypHeaderCount++ ;
5795 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5796 hcryp->CrypHeaderCount++ ;
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++ ;
5802 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
5805 __HAL_CRYP_DISABLE(hcryp);
5808 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5809 hcryp->State = HAL_CRYP_STATE_READY;
5812 __HAL_UNLOCK(hcryp);
5816 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5825 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5826 hcryp->CrypHeaderCount++ ;
5827 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5828 hcryp->CrypHeaderCount++ ;
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++ ;
5834 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
5837 __HAL_CRYP_DISABLE(hcryp);
5840 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5841 hcryp->State = HAL_CRYP_STATE_READY;
5844 __HAL_UNLOCK(hcryp);
5848 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5853 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5854 hcryp->CrypHeaderCount++ ;
5862 hcryp->Instance->DINR = 0x0U;
5869 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5870 tmp &= mask[(hcryp->Init.DataType * 2U) + (size_in_bytes % 4U)];
5871 hcryp->Instance->DINR = tmp;
5876 hcryp->Instance->DINR = 0x0U;
5881 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
5884 __HAL_CRYP_DISABLE(hcryp);
5887 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5888 hcryp->State = HAL_CRYP_STATE_READY;
5891 __HAL_UNLOCK(hcryp);
5895 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5902 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
5905 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
5908 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5911 __HAL_CRYP_ENABLE(hcryp);
5925 static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase_DMA(CRYP_HandleTypeDef *hcryp)
5936 if (hcryp->Init.HeaderWidthUnit == CRYP_HEADERWIDTHUNIT_WORD)
5938 headersize_in_bytes = hcryp->Init.HeaderSize * 4U;
5942 headersize_in_bytes = hcryp->Init.HeaderSize;
5951 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5954 __HAL_CRYP_ENABLE(hcryp);
5961 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5962 hcryp->CrypHeaderCount++ ;
5963 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5964 hcryp->CrypHeaderCount++ ;
5965 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5966 hcryp->CrypHeaderCount++ ;
5967 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5968 hcryp->CrypHeaderCount++ ;
5978 __HAL_CRYP_DISABLE(hcryp);
5981 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5982 hcryp->State = HAL_CRYP_STATE_READY;
5985 __HAL_UNLOCK(hcryp);
5989 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_IFEM));
5997 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
5998 hcryp->CrypHeaderCount++ ;
5999 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6000 hcryp->CrypHeaderCount++ ;
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++ ;
6014 __HAL_CRYP_DISABLE(hcryp);
6017 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6018 hcryp->State = HAL_CRYP_STATE_READY;
6021 __HAL_UNLOCK(hcryp);
6025 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_IFEM));
6030 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6031 hcryp->CrypHeaderCount++ ;
6039 hcryp->Instance->DIN = 0x0U;
6046 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6047 tmp &= mask[(hcryp->Init.DataType * 2U) + (headersize_in_bytes % 4U)];
6048 hcryp->Instance->DIN = tmp;
6053 hcryp->Instance->DIN = 0x0U;
6065 __HAL_CRYP_DISABLE(hcryp);
6068 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6069 hcryp->State = HAL_CRYP_STATE_READY;
6072 __HAL_UNLOCK(hcryp);
6076 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_IFEM));
6086 __HAL_CRYP_DISABLE(hcryp);
6089 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6090 hcryp->State = HAL_CRYP_STATE_READY;
6093 __HAL_UNLOCK(hcryp);
6097 while (HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY));
6101 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
6104 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
6107 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
6110 __HAL_CRYP_ENABLE(hcryp);
6118 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6119 hcryp->CrypHeaderCount++ ;
6120 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6121 hcryp->CrypHeaderCount++ ;
6122 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6123 hcryp->CrypHeaderCount++ ;
6124 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6125 hcryp->CrypHeaderCount++ ;
6135 __HAL_CRYP_DISABLE(hcryp);
6138 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6139 hcryp->State = HAL_CRYP_STATE_READY;
6142 __HAL_UNLOCK(hcryp);
6146 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
6149 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
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++ ;
6175 __HAL_CRYP_DISABLE(hcryp);
6178 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6179 hcryp->State = HAL_CRYP_STATE_READY;
6182 __HAL_UNLOCK(hcryp);
6186 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
6189 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6194 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6195 hcryp->CrypHeaderCount++ ;
6203 hcryp->Instance->DINR = 0x0U;
6210 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6211 tmp &= mask[(hcryp->Init.DataType * 2U) + (headersize_in_bytes % 4U)];
6212 hcryp->Instance->DINR = tmp;
6217 hcryp->Instance->DINR = 0x0U;
6229 __HAL_CRYP_DISABLE(hcryp);
6232 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6233 hcryp->State = HAL_CRYP_STATE_READY;
6236 __HAL_UNLOCK(hcryp);
6240 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF));
6243 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6250 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
6253 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
6256 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
6259 __HAL_CRYP_ENABLE(hcryp);
6273 static void CRYP_GCMCCM_SetHeaderPhase_IT(CRYP_HandleTypeDef *hcryp)
6286 if (hcryp->Init.HeaderWidthUnit == CRYP_HEADERWIDTHUNIT_WORD)
6288 headersize_in_bytes = hcryp->Init.HeaderSize * 4U;
6292 headersize_in_bytes = hcryp->Init.HeaderSize;
6298 if (headersize_in_bytes <= ((uint32_t)(hcryp->CrypHeaderCount) * 4U))
6301 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
6304 __HAL_CRYP_DISABLE(hcryp);
6307 hcryp->Phase = CRYP_PHASE_PROCESS;
6310 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
6313 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
6316 __HAL_CRYP_ENABLE(hcryp);
6318 else if (((headersize_in_bytes / 4U) - (hcryp->CrypHeaderCount)) >= 4U)
6322 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6323 hcryp->CrypHeaderCount++ ;
6324 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6325 hcryp->CrypHeaderCount++ ;
6326 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6327 hcryp->CrypHeaderCount++ ;
6328 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6329 hcryp->CrypHeaderCount++ ;
6336 hcryp->Instance->DIN = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6337 hcryp->CrypHeaderCount++ ;
6344 hcryp->Instance->DIN = 0x0U;
6346 hcryp->CrypHeaderCount++;
6352 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6353 tmp &= mask[(hcryp->Init.DataType * 2U) + (headersize_in_bytes % 4U)];
6354 hcryp->Instance->DIN = tmp;
6356 hcryp->CrypHeaderCount++;
6360 hcryp->Instance->DIN = 0x0U;
6362 hcryp->CrypHeaderCount++;
6368 if (headersize_in_bytes <= ((uint32_t)(hcryp->CrypHeaderCount) * 4U))
6371 hcryp->Phase = CRYP_PHASE_PROCESS;
6374 if (hcryp->Init.Algorithm == CRYP_AES_GCM_GMAC)
6377 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, CRYP_PHASE_PAYLOAD);
6379 if (hcryp->Init.Algorithm == CRYP_AES_CCM)
6382 hcryp->CrypHeaderCount++;
6385 if (hcryp->Size == 0U)
6388 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
6391 hcryp->State = HAL_CRYP_STATE_READY;
6394 __HAL_UNLOCK(hcryp);
6396 else if (hcryp->Size >= 16U)
6398 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6399 hcryp->CrypInCount++;
6400 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6401 hcryp->CrypInCount++;
6402 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6403 hcryp->CrypInCount++;
6404 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6405 hcryp->CrypInCount++;
6407 if ((hcryp->CrypInCount == (hcryp->Size / 4U)) && ((hcryp->Size % 16U) == 0U))
6412 hcryp->InCpltCallback(hcryp);
6415 HAL_CRYP_InCpltCallback(hcryp);
6426 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
6441 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6442 hcryp->CrypInCount++;
6447 hcryp->Instance->DINR = 0x0U;
6452 else if (((headersize_in_bytes / 4U) - (hcryp->CrypHeaderCount)) >= 4U)
6455 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6456 hcryp->CrypHeaderCount++;
6457 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6458 hcryp->CrypHeaderCount++;
6459 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6460 hcryp->CrypHeaderCount++;
6461 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6462 hcryp->CrypHeaderCount++;
6469 hcryp->Instance->DINR = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6470 hcryp->CrypHeaderCount++ ;
6478 hcryp->Instance->DINR = 0x0U;
6480 hcryp->CrypHeaderCount++;
6486 tmp = *(uint32_t *)(hcryp->Init.Header + hcryp->CrypHeaderCount);
6487 tmp &= mask[(hcryp->Init.DataType * 2U) + (headersize_in_bytes % 4U)];
6488 hcryp->Instance->DINR = tmp;
6490 hcryp->CrypHeaderCount++;
6494 hcryp->Instance->DINR = 0x0U;
6496 hcryp->CrypHeaderCount++;
6511 static void CRYP_Workaround(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
6524 npblb = ((((uint32_t)(hcryp->Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->Size);
6539 if (hcryp->Init.Algorithm == CRYP_AES_GCM)
6541 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_ENCRYPT)
6546 __HAL_CRYP_DISABLE(hcryp);
6549 hcryp->Instance->IV1RR = ((hcryp->Instance->CSGCMCCM7R) - 1U);
6550 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CTR);
6553 __HAL_CRYP_ENABLE(hcryp);
6559 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6560 hcryp->CrypInCount++;
6565 hcryp->Instance->DIN = 0U;
6569 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
6572 __HAL_CRYP_DISABLE(hcryp);
6575 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6576 hcryp->State = HAL_CRYP_STATE_READY;
6579 __HAL_UNLOCK(hcryp);
6582 hcryp->ErrorCallback(hcryp);
6585 HAL_CRYP_ErrorCallback(hcryp);
6588 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6593 intermediate_data[index] = hcryp->Instance->DOUT;
6596 *(uint32_t *)(hcryp->pCrypOutBuffPtr + (hcryp->CrypOutCount)) = intermediate_data[index];
6597 hcryp->CrypOutCount++;
6601 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_ENCRYPT)
6607 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_GCM);
6610 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_GCM_CCMPH, CRYP_PHASE_FINAL);
6612 if ((hcryp->Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_32B)
6627 else if ((hcryp->Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_8B)
6642 else if ((hcryp->Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_16B)
6675 hcryp->Instance->DIN = intermediate_data[index];
6680 hcryp->Instance->DIN = 0x0U;
6684 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
6687 __HAL_CRYP_DISABLE(hcryp);
6690 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6691 hcryp->State = HAL_CRYP_STATE_READY;
6694 __HAL_UNLOCK(hcryp);
6697 hcryp->ErrorCallback(hcryp);
6700 HAL_CRYP_ErrorCallback(hcryp);
6704 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6708 intermediate_data[index] = hcryp->Instance->DOUT;
6719 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_DECRYPT)
6721 iv1temp = hcryp->Instance->CSGCMCCM7R;
6724 __HAL_CRYP_DISABLE(hcryp);
6726 temp[0] = hcryp->Instance->CSGCMCCM0R;
6727 temp[1] = hcryp->Instance->CSGCMCCM1R;
6728 temp[2] = hcryp->Instance->CSGCMCCM2R;
6729 temp[3] = hcryp->Instance->CSGCMCCM3R;
6731 hcryp->Instance->IV1RR = iv1temp;
6734 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CTR);
6737 __HAL_CRYP_ENABLE(hcryp);
6743 hcryp->Instance->DIN = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6744 hcryp->CrypInCount++;
6749 hcryp->Instance->DIN = 0U;
6753 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
6756 __HAL_CRYP_DISABLE(hcryp);
6759 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6760 hcryp->State = HAL_CRYP_STATE_READY;
6763 __HAL_UNLOCK(hcryp);
6766 hcryp->ErrorCallback(hcryp);
6769 HAL_CRYP_ErrorCallback(hcryp);
6773 if ((hcryp->Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6778 intermediate_data[index] = hcryp->Instance->DOUT;
6781 *(uint32_t *)(hcryp->pCrypOutBuffPtr + (hcryp->CrypOutCount)) = intermediate_data[index];
6782 hcryp->CrypOutCount++;
6786 if ((hcryp->Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_DECRYPT)
6788 temp2[0] = hcryp->Instance->CSGCMCCM0R;
6789 temp2[1] = hcryp->Instance->CSGCMCCM1R;
6790 temp2[2] = hcryp->Instance->CSGCMCCM2R;
6791 temp2[3] = hcryp->Instance->CSGCMCCM3R;
6794 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CCM);
6797 MODIFY_REG(hcryp->Instance->CR, CRYP_CR_GCM_CCMPH, CRYP_PHASE_HEADER);
6824 hcryp->Instance->DIN = intermediate_data[index] ;
6828 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) != HAL_OK)
6831 __HAL_CRYP_DISABLE(hcryp);
6834 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6835 hcryp->State = HAL_CRYP_STATE_READY;
6838 __HAL_UNLOCK(hcryp);
6841 hcryp->ErrorCallback(hcryp);
6844 HAL_CRYP_ErrorCallback(hcryp);
6851 __HAL_UNLOCK(hcryp);
6858 if ((hcryp->Instance->CR & AES_CR_MODE) == CRYP_OPERATINGMODE_ENCRYPT)
6861 MODIFY_REG(hcryp->Instance->CR, AES_CR_CHMOD, CRYP_AES_CTR);
6867 hcryp->Instance->DINR = *(uint32_t *)(hcryp->pCrypInBuffPtr + hcryp->CrypInCount);
6868 hcryp->CrypInCount++;
6873 hcryp->Instance->DINR = 0U;
6877 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
6879 hcryp->State = HAL_CRYP_STATE_READY;
6880 __HAL_UNLOCK(hcryp);
6883 hcryp->ErrorCallback(hcryp);
6886 HAL_CRYP_ErrorCallback(hcryp);
6891 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6896 intermediate_data[index] = hcryp->Instance->DOUTR;
6899 *(uint32_t *)(hcryp->pCrypOutBuffPtr + (hcryp->CrypOutCount)) = intermediate_data[index];
6900 hcryp->CrypOutCount++;
6903 if ((hcryp->Instance->CR & AES_CR_MODE) == CRYP_OPERATINGMODE_ENCRYPT)
6906 MODIFY_REG(hcryp->Instance->CR, AES_CR_CHMOD, CRYP_AES_GCM_GMAC);
6909 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, CRYP_PHASE_FINAL);
6911 if ((hcryp->Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_32B)
6926 else if ((hcryp->Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_8B)
6941 else if ((hcryp->Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_16B)
6975 hcryp->Instance->DINR = intermediate_data[index];
6980 hcryp->Instance->DINR = 0U;
6984 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
6987 __HAL_CRYP_DISABLE(hcryp);
6990 hcryp->ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6991 hcryp->State = HAL_CRYP_STATE_READY;
6994 __HAL_UNLOCK(hcryp);
6997 hcryp->ErrorCallback(hcryp);
7000 HAL_CRYP_ErrorCallback(hcryp);
7004 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
7008 intermediate_data[index] = hcryp->Instance->DOUTR;
7023 static HAL_StatusTypeDef CRYP_WaitOnIFEMFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7030 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_IFEM))
7051 static HAL_StatusTypeDef CRYP_WaitOnBUSYFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7058 while (HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
7080 static HAL_StatusTypeDef CRYP_WaitOnOFNEFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7087 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_OFNE))
7110 static HAL_StatusTypeDef CRYP_WaitOnCCFlag(CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7117 while (HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF))