264 #if defined (AES) || defined (CRYP)
272 #ifdef HAL_CRYP_MODULE_ENABLED
279 #define CRYP_TIMEOUT_KEYPREPARATION 82U
280 #define CRYP_TIMEOUT_GCMCCMINITPHASE 299U
281 #define CRYP_TIMEOUT_GCMCCMHEADERPHASE 290U
283 #define CRYP_PHASE_READY 0x00000001U
284 #define CRYP_PHASE_PROCESS 0x00000002U
287 #define CRYP_OPERATINGMODE_ENCRYPT 0x00000000U
288 #define CRYP_OPERATINGMODE_KEYDERIVATION AES_CR_MODE_0
289 #define CRYP_OPERATINGMODE_DECRYPT AES_CR_MODE_1
290 #define CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT AES_CR_MODE
291 #define CRYP_PHASE_INIT 0x00000000U
292 #define CRYP_PHASE_HEADER AES_CR_GCMPH_0
293 #define CRYP_PHASE_PAYLOAD AES_CR_GCMPH_1
294 #define CRYP_PHASE_FINAL AES_CR_GCMPH
296 #define CRYP_PHASE_INIT 0x00000000U
297 #define CRYP_PHASE_HEADER CRYP_CR_GCM_CCMPH_0
298 #define CRYP_PHASE_PAYLOAD CRYP_CR_GCM_CCMPH_1
299 #define CRYP_PHASE_FINAL CRYP_CR_GCM_CCMPH
300 #define CRYP_OPERATINGMODE_ENCRYPT 0x00000000U
301 #define CRYP_OPERATINGMODE_DECRYPT CRYP_CR_ALGODIR
305 #define CRYP_CCM_CTR1_0 0x07FFFFFFU
306 #define CRYP_CCM_CTR1_1 0xFFFFFF00U
307 #define CRYP_CCM_CTR1_2 0x00000001U
322 #define CRYP_SET_PHASE(__HANDLE__, __PHASE__) do{(__HANDLE__)->Instance->CR &= (uint32_t)(~CRYP_CR_GCM_CCMPH);\
323 (__HANDLE__)->Instance->CR |= (uint32_t)(__PHASE__);\
326 #define HAL_CRYP_FIFO_FLUSH(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRYP_CR_FFLUSH)
329 #define CRYP_SET_PHASE(__HANDLE__, __PHASE__) do{(__HANDLE__)->Instance->CR &= (uint32_t)(~AES_CR_GCMPH);\
330 (__HANDLE__)->Instance->CR |= (uint32_t)(__PHASE__);\
346 static void CRYP_SetDMAConfig(
CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr);
352 #if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
353 static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout);
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);
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);
373 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
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);
439 assert_param(IS_CRYP_KEYSIZE(hcryp->
Init.
KeySize));
444 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
448 hcryp->
Lock = HAL_UNLOCKED;
466 hcryp->
Lock = HAL_UNLOCKED;
476 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_DATATYPE | CRYP_CR_KEYSIZE | CRYP_CR_ALGOMODE,
481 MODIFY_REG(hcryp->
Instance->CR, AES_CR_DATATYPE | AES_CR_KEYSIZE | AES_CR_CHMOD,
493 hcryp->
Phase = CRYP_PHASE_READY;
514 hcryp->
Phase = CRYP_PHASE_READY;
522 __HAL_CRYP_DISABLE(hcryp);
524 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
561 if ((hcryp == NULL) || (pConf == NULL))
567 assert_param(IS_CRYP_KEYSIZE(pConf->
KeySize));
568 assert_param(IS_CRYP_DATATYPE(pConf->
DataType));
569 assert_param(IS_CRYP_ALGORITHM(pConf->
Algorithm));
595 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_DATATYPE | CRYP_CR_KEYSIZE | CRYP_CR_ALGOMODE,
599 MODIFY_REG(hcryp->
Instance->CR, AES_CR_DATATYPE | AES_CR_KEYSIZE | AES_CR_CHMOD,
603 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_ERR_CLEAR);
617 hcryp->
Phase = CRYP_PHASE_READY;
643 if ((hcryp == NULL) || (pConf == NULL))
720 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
738 HAL_StatusTypeDef status = HAL_OK;
740 if (pCallback == NULL)
743 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
776 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
796 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
805 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
831 HAL_StatusTypeDef status = HAL_OK;
862 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
882 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
891 hcryp->
ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
950 HAL_StatusTypeDef status;
969 hcryp->
Size = Size * 4U;
978 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT);
981 algo = hcryp->
Instance->CR & CRYP_CR_ALGOMODE;
1009 HAL_CRYP_FIFO_FLUSH(hcryp);
1012 hcryp->
Phase = CRYP_PHASE_PROCESS;
1015 status = CRYP_TDES_Process(hcryp, Timeout);
1023 status = CRYP_AES_Encrypt(hcryp, Timeout);
1025 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
1029 status = CRYP_AESGCM_Process(hcryp, Timeout);
1036 status = CRYP_AESCCM_Process(hcryp, Timeout);
1040 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1044 __HAL_UNLOCK(hcryp);
1051 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
1054 algo = hcryp->
Instance->CR & AES_CR_CHMOD;
1064 status = CRYP_AES_Encrypt(hcryp, Timeout);
1067 case CRYP_AES_GCM_GMAC:
1070 status = CRYP_AESGCM_Process(hcryp, Timeout) ;
1076 status = CRYP_AESCCM_Process(hcryp, Timeout);
1080 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1084 __HAL_UNLOCK(hcryp);
1089 if (status == HAL_OK)
1095 __HAL_UNLOCK(hcryp);
1101 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
1122 HAL_StatusTypeDef status;
1142 hcryp->
Size = Size * 4U;
1152 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT);
1155 algo = hcryp->
Instance->CR & CRYP_CR_ALGOMODE;
1183 HAL_CRYP_FIFO_FLUSH(hcryp);
1186 hcryp->
Phase = CRYP_PHASE_PROCESS;
1189 status = CRYP_TDES_Process(hcryp, Timeout);
1198 status = CRYP_AES_Decrypt(hcryp, Timeout);
1200 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
1204 status = CRYP_AESGCM_Process(hcryp, Timeout) ;
1210 status = CRYP_AESCCM_Process(hcryp, Timeout);
1214 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1218 __HAL_UNLOCK(hcryp);
1225 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
1228 algo = hcryp->
Instance->CR & AES_CR_CHMOD;
1238 status = CRYP_AES_Decrypt(hcryp, Timeout);
1241 case CRYP_AES_GCM_GMAC:
1244 status = CRYP_AESGCM_Process(hcryp, Timeout) ;
1250 status = CRYP_AESCCM_Process(hcryp, Timeout);
1254 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1258 __HAL_UNLOCK(hcryp);
1263 if (status == HAL_OK)
1269 __HAL_UNLOCK(hcryp);
1275 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
1295 HAL_StatusTypeDef status = HAL_OK;
1314 hcryp->
Size = Size * 4U;
1324 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT);
1327 algo = (hcryp->
Instance->CR & CRYP_CR_ALGOMODE);
1354 HAL_CRYP_FIFO_FLUSH(hcryp);
1357 hcryp->
Phase = CRYP_PHASE_PROCESS;
1360 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
1363 __HAL_CRYP_ENABLE(hcryp);
1370 status = CRYP_AES_Encrypt_IT(hcryp);
1372 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
1375 status = CRYP_AESGCM_Process_IT(hcryp) ;
1380 status = CRYP_AESCCM_Process_IT(hcryp);
1384 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1388 __HAL_UNLOCK(hcryp);
1396 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
1399 algo = hcryp->
Instance->CR & AES_CR_CHMOD;
1408 status = CRYP_AES_Encrypt_IT(hcryp);
1411 case CRYP_AES_GCM_GMAC:
1414 status = CRYP_AESGCM_Process_IT(hcryp) ;
1420 status = CRYP_AESCCM_Process_IT(hcryp);
1424 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1428 __HAL_UNLOCK(hcryp);
1438 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
1458 HAL_StatusTypeDef status = HAL_OK;
1477 hcryp->
Size = Size * 4U;
1487 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT);
1490 algo = hcryp->
Instance->CR & CRYP_CR_ALGOMODE;
1517 HAL_CRYP_FIFO_FLUSH(hcryp);
1520 hcryp->
Phase = CRYP_PHASE_PROCESS;
1523 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
1526 __HAL_CRYP_ENABLE(hcryp);
1535 status = CRYP_AES_Decrypt_IT(hcryp);
1537 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
1541 status = CRYP_AESGCM_Process_IT(hcryp) ;
1547 status = CRYP_AESCCM_Process_IT(hcryp);
1551 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1555 __HAL_UNLOCK(hcryp);
1563 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
1566 algo = hcryp->
Instance->CR & AES_CR_CHMOD;
1575 status = CRYP_AES_Decrypt_IT(hcryp);
1578 case CRYP_AES_GCM_GMAC:
1581 status = CRYP_AESGCM_Process_IT(hcryp) ;
1587 status = CRYP_AESCCM_Process_IT(hcryp);
1591 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1595 __HAL_UNLOCK(hcryp);
1605 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
1625 HAL_StatusTypeDef status = HAL_OK;
1626 uint32_t DoKeyIVConfig = 1U;
1645 hcryp->
Size = Size * 4U;
1655 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_ENCRYPT);
1658 algo = hcryp->
Instance->CR & CRYP_CR_ALGOMODE;
1686 HAL_CRYP_FIFO_FLUSH(hcryp);
1689 hcryp->
Phase = CRYP_PHASE_PROCESS;
1692 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->
pCrypInBuffPtr), ((uint16_t)(hcryp->
Size) / 4U),
1717 if (DoKeyIVConfig == 1U)
1733 hcryp->
Phase = CRYP_PHASE_PROCESS;
1736 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->
pCrypInBuffPtr), ((uint16_t)(hcryp->
Size) / 4U),
1739 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
1742 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1747 status = CRYP_AESCCM_Process_DMA(hcryp);
1751 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1755 __HAL_UNLOCK(hcryp);
1762 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
1765 algo = hcryp->
Instance->CR & AES_CR_CHMOD;
1791 if (DoKeyIVConfig == 1U)
1806 hcryp->
Phase = CRYP_PHASE_PROCESS;
1812 case CRYP_AES_GCM_GMAC:
1814 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1819 status = CRYP_AESCCM_Process_DMA(hcryp);
1823 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1827 __HAL_UNLOCK(hcryp);
1837 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
1857 HAL_StatusTypeDef status = HAL_OK;
1877 hcryp->
Size = Size * 4U;
1887 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGODIR, CRYP_OPERATINGMODE_DECRYPT);
1890 algo = hcryp->
Instance->CR & CRYP_CR_ALGOMODE;
1918 HAL_CRYP_FIFO_FLUSH(hcryp);
1921 hcryp->
Phase = CRYP_PHASE_PROCESS;
1924 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->
pCrypInBuffPtr), ((uint16_t)(hcryp->
Size) / 4U),
1933 status = CRYP_AES_Decrypt_DMA(hcryp);
1935 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
1938 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1943 status = CRYP_AESCCM_Process_DMA(hcryp);
1947 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1951 __HAL_UNLOCK(hcryp);
1959 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
1962 algo = hcryp->
Instance->CR & AES_CR_CHMOD;
1972 status = CRYP_AES_Decrypt_DMA(hcryp);
1975 case CRYP_AES_GCM_GMAC:
1977 status = CRYP_AESGCM_Process_DMA(hcryp) ;
1982 status = CRYP_AESCCM_Process_DMA(hcryp);
1986 hcryp->
ErrorCode |= HAL_CRYP_ERROR_NOT_SUPPORTED;
1990 __HAL_UNLOCK(hcryp);
1999 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
2040 uint32_t itstatus = hcryp->
Instance->MISR;
2042 if ((itstatus & (CRYP_IT_INI | CRYP_IT_OUTI)) != 0U)
2047 CRYP_TDES_IT(hcryp);
2054 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
2058 if ((hcryp->
Instance->CR & CRYP_PHASE_HEADER) == CRYP_PHASE_HEADER)
2060 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp);
2064 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp);
2075 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_CCF) != RESET)
2077 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_CCFIE) != RESET)
2081 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2087 if ((hcryp->
Instance->CR & CRYP_PHASE_HEADER) == CRYP_PHASE_HEADER)
2089 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp);
2093 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp);
2101 CRYP_GCMCCM_SetHeaderPhase_IT(hcryp);
2105 CRYP_GCMCCM_SetPayloadPhase_IT(hcryp);
2115 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_ERRIE) != RESET)
2118 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_WRERR) != RESET)
2120 hcryp->
ErrorCode |= HAL_CRYP_ERROR_WRITE;
2123 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_RDERR) != RESET)
2125 hcryp->
ErrorCode |= HAL_CRYP_ERROR_READ;
2150 return hcryp->
State;
2218 static HAL_StatusTypeDef CRYP_TDES_Process(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
2226 __HAL_CRYP_ENABLE(hcryp);
2236 if (((hcryp->
Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->
Size / 4U)))
2246 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
2249 __HAL_CRYP_DISABLE(hcryp);
2252 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2256 __HAL_UNLOCK(hcryp);
2257 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
2269 if (((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->
Size / 4U)))
2272 for (i = 0U; i < 2U; i++)
2288 __HAL_CRYP_DISABLE(hcryp);
2311 if (__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI) != 0x0U)
2313 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_FLAG_INRIS) != 0x0U)
2324 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
2326 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
2336 if (__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI) != 0x0U)
2338 if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_FLAG_OUTRIS) != 0x0U)
2341 for (i = 0U; i < 2U; i++)
2355 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
2358 __HAL_CRYP_DISABLE(hcryp);
2361 __HAL_UNLOCK(hcryp);
2366 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
2380 __HAL_UNLOCK(hcryp);
2382 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
2383 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
2401 static HAL_StatusTypeDef CRYP_AES_Encrypt(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
2404 uint32_t DoKeyIVConfig = 1U;
2423 if (DoKeyIVConfig == 1U)
2447 hcryp->
Phase = CRYP_PHASE_PROCESS;
2450 __HAL_CRYP_ENABLE(hcryp);
2458 CRYP_AES_ProcessData(hcryp, Timeout);
2464 __HAL_CRYP_DISABLE(hcryp);
2481 uint32_t DoKeyIVConfig = 1U;
2500 if (DoKeyIVConfig == 1U)
2524 hcryp->
Phase = CRYP_PHASE_PROCESS;
2526 if (hcryp->
Size != 0U)
2531 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
2534 __HAL_CRYP_ENABLE(hcryp);
2551 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
2554 __HAL_CRYP_ENABLE(hcryp);
2564 __HAL_UNLOCK(hcryp);
2577 static HAL_StatusTypeDef CRYP_AES_Decrypt(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
2580 uint32_t DoKeyIVConfig = 1U;
2599 if (DoKeyIVConfig == 1U)
2608 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION);
2614 __HAL_CRYP_ENABLE(hcryp);
2617 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
2620 __HAL_CRYP_DISABLE(hcryp);
2623 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2627 __HAL_UNLOCK(hcryp);
2631 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2634 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
2642 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT);
2646 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY);
2652 __HAL_CRYP_ENABLE(hcryp);
2655 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) != HAL_OK)
2658 __HAL_CRYP_DISABLE(hcryp);
2661 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2665 __HAL_UNLOCK(hcryp);
2697 hcryp->
Phase = CRYP_PHASE_PROCESS;
2700 __HAL_CRYP_ENABLE(hcryp);
2708 CRYP_AES_ProcessData(hcryp, Timeout);
2714 __HAL_CRYP_DISABLE(hcryp);
2730 __IO uint32_t count = 0U;
2731 uint32_t DoKeyIVConfig = 1U;
2750 if (DoKeyIVConfig == 1U)
2759 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION);
2765 __HAL_CRYP_ENABLE(hcryp);
2768 count = CRYP_TIMEOUT_KEYPREPARATION;
2775 __HAL_CRYP_DISABLE(hcryp);
2778 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2782 __HAL_UNLOCK(hcryp);
2786 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF));
2789 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2792 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
2800 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT);
2805 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY);
2811 __HAL_CRYP_ENABLE(hcryp);
2814 count = CRYP_TIMEOUT_KEYPREPARATION;
2821 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2825 __HAL_UNLOCK(hcryp);
2829 while (HAL_IS_BIT_SET(hcryp->
Instance->SR, CRYP_FLAG_BUSY));
2862 hcryp->
Phase = CRYP_PHASE_PROCESS;
2863 if (hcryp->
Size != 0U)
2869 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
2872 __HAL_CRYP_ENABLE(hcryp);
2889 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
2892 __HAL_CRYP_ENABLE(hcryp);
2899 __HAL_UNLOCK(hcryp);
2916 __IO uint32_t count = 0U;
2917 uint32_t DoKeyIVConfig = 1U;
2935 if (DoKeyIVConfig == 1U)
2944 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION);
2950 __HAL_CRYP_ENABLE(hcryp);
2953 count = CRYP_TIMEOUT_KEYPREPARATION;
2960 __HAL_CRYP_DISABLE(hcryp);
2963 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
2967 __HAL_UNLOCK(hcryp);
2971 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF));
2974 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2977 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_DECRYPT);
2985 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT);
2989 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGOMODE, CRYP_CR_ALGOMODE_AES_KEY);
2995 __HAL_CRYP_ENABLE(hcryp);
2998 count = CRYP_TIMEOUT_KEYPREPARATION;
3005 __HAL_CRYP_DISABLE(hcryp);
3008 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3012 __HAL_UNLOCK(hcryp);
3016 while (HAL_IS_BIT_SET(hcryp->
Instance->SR, CRYP_FLAG_BUSY));
3047 hcryp->
Phase = CRYP_PHASE_PROCESS;
3049 if (hcryp->
Size != 0U)
3057 __HAL_UNLOCK(hcryp);
3080 hcryp->
Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DIEN);
3083 CLEAR_BIT(hcryp->
Instance->CR, AES_CR_DMAINEN);
3089 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3095 __HAL_UNLOCK(hcryp);
3100 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3123 hcryp->
Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DOEN);
3124 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
3128 __HAL_CRYP_DISABLE(hcryp);
3133 __HAL_CRYP_DISABLE(hcryp);
3137 CLEAR_BIT(hcryp->
Instance->CR, AES_CR_DMAOUTEN);
3140 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3142 if ((hcryp->
Init.
Algorithm & CRYP_AES_GCM_GMAC) != CRYP_AES_GCM_GMAC)
3145 __HAL_CRYP_DISABLE(hcryp);
3153 __HAL_UNLOCK(hcryp);
3155 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3182 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3187 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3205 static void CRYP_SetDMAConfig(
CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr)
3222 __HAL_CRYP_ENABLE(hcryp);
3231 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3246 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3255 hcryp->
Instance->DMACR = CRYP_DMACR_DOEN | CRYP_DMACR_DIEN;
3259 if (((hcryp->
Init.
Algorithm & CRYP_AES_GCM_GMAC) != CRYP_AES_GCM_GMAC)
3260 && ((hcryp->
Init.
Algorithm & CRYP_AES_CCM) != CRYP_AES_CCM))
3263 __HAL_CRYP_ENABLE(hcryp);
3273 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3288 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3301 SET_BIT(hcryp->
Instance->CR, (AES_CR_DMAINEN));
3306 SET_BIT(hcryp->
Instance->CR, (AES_CR_DMAINEN | AES_CR_DMAOUTEN));
3333 if (((hcryp->
Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->
Size / 4U)))
3347 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
3350 __HAL_CRYP_DISABLE(hcryp);
3353 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3357 __HAL_UNLOCK(hcryp);
3358 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3370 if (((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->
Size / 4U)))
3373 for (i = 0U; i < 4U; i++)
3399 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
3402 __HAL_CRYP_DISABLE(hcryp);
3405 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3409 __HAL_UNLOCK(hcryp);
3410 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3420 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3423 for (i = 0U; i < 4U; i++)
3460 if (((hcryp->
Instance->SR & CRYP_FLAG_IFNF) != 0x0U) && (incount < (hcryp->
Size / 4U)))
3474 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
3477 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3489 if (((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U) && (outcount < (hcryp->
Size / 4U)))
3492 for (i = 0U; i < 4U; i++)
3506 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
3512 __HAL_CRYP_DISABLE(hcryp);
3515 __HAL_UNLOCK(hcryp);
3518 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3531 for (i = 0U; i < 4U; i++)
3546 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
3552 __HAL_CRYP_DISABLE(hcryp);
3555 __HAL_UNLOCK(hcryp);
3558 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3581 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
3596 hcryp->
ErrorCode |= HAL_CRYP_ERROR_BUSY;
3597 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
3620 case CRYP_KEYSIZE_256B:
3630 case CRYP_KEYSIZE_192B:
3638 case CRYP_KEYSIZE_128B:
3651 case CRYP_KEYSIZE_256B:
3661 case CRYP_KEYSIZE_128B:
3674 #if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
3682 static HAL_StatusTypeDef CRYP_AESGCM_Process(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
3685 uint32_t wordsize = (uint32_t)(hcryp->
Size) / 4U ;
3687 uint32_t DoKeyIVConfig = 1U;
3712 if (DoKeyIVConfig == 1U)
3719 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
3733 __HAL_CRYP_ENABLE(hcryp);
3739 while ((hcryp->
Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN)
3742 if (Timeout != HAL_MAX_DELAY)
3744 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3747 __HAL_CRYP_DISABLE(hcryp);
3750 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3754 __HAL_UNLOCK(hcryp);
3765 MODIFY_REG(hcryp->
Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B);
3774 __HAL_CRYP_ENABLE(hcryp);
3777 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
3780 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3784 __HAL_UNLOCK(hcryp);
3788 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
3794 if (CRYP_GCMCCM_SetHeaderPhase(hcryp, Timeout) != HAL_OK)
3802 hcryp->
Phase = CRYP_PHASE_PROCESS;
3807 __HAL_CRYP_DISABLE(hcryp);
3810 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
3813 __HAL_CRYP_ENABLE(hcryp);
3818 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
3823 if ((hcryp->
Size % 16U) != 0U)
3826 wordsize = ((wordsize / 4U) * 4U) ;
3835 while ((hcryp->
CrypInCount < wordsize) && (outcount < wordsize))
3838 CRYP_AES_ProcessData(hcryp, Timeout);
3844 if (Timeout != HAL_MAX_DELAY)
3846 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3849 __HAL_CRYP_DISABLE(hcryp);
3852 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3856 __HAL_UNLOCK(hcryp);
3862 if ((hcryp->
Size % 16U) != 0U)
3867 CRYP_Workaround(hcryp, Timeout);
3882 __IO uint32_t count = 0U;
3883 uint32_t DoKeyIVConfig = 1U;
3885 uint32_t loopcounter;
3886 uint32_t lastwordsize;
3914 if (DoKeyIVConfig == 1U)
3921 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
3934 __HAL_CRYP_ENABLE(hcryp);
3937 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
3944 __HAL_CRYP_DISABLE(hcryp);
3947 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3951 __HAL_UNLOCK(hcryp);
3955 while ((hcryp->
Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
3963 MODIFY_REG(hcryp->
Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B);
3972 __HAL_CRYP_ENABLE(hcryp);
3975 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
3982 __HAL_CRYP_DISABLE(hcryp);
3985 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
3989 __HAL_UNLOCK(hcryp);
3993 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF));
3996 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4005 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4008 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI);
4011 __HAL_CRYP_ENABLE(hcryp);
4019 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4022 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4025 __HAL_CRYP_ENABLE(hcryp);
4030 hcryp->
Phase = CRYP_PHASE_PROCESS;
4033 MODIFY_REG(hcryp->
Instance->CR, AES_CR_GCMPH, CRYP_PHASE_PAYLOAD);
4036 if (hcryp->
Size == 0U)
4039 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4045 __HAL_UNLOCK(hcryp);
4047 else if (hcryp->
Size >= 16U)
4060 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
4077 npblb = 16U - (uint32_t)(hcryp->
Size);
4080 if ((npblb % 4U) == 0U)
4082 lastwordsize = (16U - npblb) / 4U;
4086 lastwordsize = ((16U - npblb) / 4U) + 1U;
4090 for (loopcounter = 0U; loopcounter < lastwordsize ; loopcounter++)
4095 while (loopcounter < 4U)
4105 for (loopcounter = 0U; loopcounter < hcryp->
Init.
HeaderSize ; loopcounter++)
4110 while (loopcounter < 4U)
4117 hcryp->
Phase = CRYP_PHASE_PROCESS;
4120 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
4123 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
4164 __IO uint32_t count = 0U;
4166 uint32_t DoKeyIVConfig = 1U;
4191 if (DoKeyIVConfig == 1U)
4198 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4211 __HAL_CRYP_ENABLE(hcryp);
4214 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
4221 __HAL_CRYP_DISABLE(hcryp);
4224 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4228 __HAL_UNLOCK(hcryp);
4232 while ((hcryp->
Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN);
4240 MODIFY_REG(hcryp->
Instance->CR, AES_CR_DATATYPE, CRYP_DATATYPE_32B);
4249 __HAL_CRYP_ENABLE(hcryp);
4252 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
4259 __HAL_CRYP_DISABLE(hcryp);
4262 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4266 __HAL_UNLOCK(hcryp);
4270 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF));
4273 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4279 if (CRYP_GCMCCM_SetHeaderPhase_DMA(hcryp) != HAL_OK)
4287 hcryp->
Phase = CRYP_PHASE_PROCESS;
4292 __HAL_CRYP_DISABLE(hcryp);
4297 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
4301 if (hcryp->
Size != 0U)
4307 if ((hcryp->
Size % 16U) == 0U)
4313 wordsize = (uint32_t)(hcryp->
Size) + (16U - ((uint32_t)(hcryp->
Size) % 16U)) ;
4316 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->
pCrypInBuffPtr), ((uint16_t)wordsize / 4U),
4323 __HAL_UNLOCK(hcryp);
4342 static HAL_StatusTypeDef CRYP_AESCCM_Process(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
4345 uint32_t wordsize = (uint32_t)(hcryp->
Size) / 4U;
4347 uint32_t DoKeyIVConfig = 1U;
4349 uint32_t loopcounter;
4351 uint32_t lastwordsize;
4377 if (DoKeyIVConfig == 1U)
4387 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4396 hcryp->
Instance->IV1RR = (hcryp->
Init.
B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4400 __HAL_CRYP_ENABLE(hcryp);
4413 hcryp->
Instance->DIN = __ROR(*(uint32_t *)(hcryp->
Init.
B0 + 1), 16);
4414 hcryp->
Instance->DIN = __ROR(*(uint32_t *)(hcryp->
Init.
B0 + 2), 16);
4415 hcryp->
Instance->DIN = __ROR(*(uint32_t *)(hcryp->
Init.
B0 + 3), 16);
4420 hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(hcryp->
Init.
B0 + 1));
4421 hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(hcryp->
Init.
B0 + 2));
4422 hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(hcryp->
Init.
B0 + 3));
4435 while ((hcryp->
Instance->CR & CRYP_CR_CRYPEN) == CRYP_CR_CRYPEN)
4438 if (Timeout != HAL_MAX_DELAY)
4440 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
4443 __HAL_CRYP_DISABLE(hcryp);
4446 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4450 __HAL_UNLOCK(hcryp);
4458 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
4461 MODIFY_REG(hcryp->
Instance->CR, AES_CR_MODE, CRYP_OPERATINGMODE_ENCRYPT);
4473 __HAL_CRYP_ENABLE(hcryp);
4482 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
4485 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4489 __HAL_UNLOCK(hcryp);
4493 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4496 hcryp->
Phase = CRYP_PHASE_PROCESS;
4506 for (loopcounter = 0U; (loopcounter < hcryp->
Init.
HeaderSize); loopcounter += 4U)
4518 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
4521 __HAL_CRYP_DISABLE(hcryp);
4524 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4528 __HAL_UNLOCK(hcryp);
4532 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4550 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
4553 __HAL_CRYP_DISABLE(hcryp);
4556 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4560 __HAL_UNLOCK(hcryp);
4564 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4567 for (loopcounter = 0U; (loopcounter < (hcryp->
Init.
HeaderSize % 4U)); loopcounter++)
4572 while (loopcounter < 4U)
4579 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
4582 __HAL_CRYP_DISABLE(hcryp);
4585 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4589 __HAL_UNLOCK(hcryp);
4593 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4599 if (hcryp->
Size != 0U)
4601 if ((hcryp->
Size % 16U) != 0U)
4604 wordsize = ((wordsize / 4U) * 4U) ;
4612 while ((hcryp->
CrypInCount < wordsize) && (outcount < wordsize))
4615 CRYP_AES_ProcessData(hcryp, Timeout);
4621 if (Timeout != HAL_MAX_DELAY)
4623 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
4626 __HAL_CRYP_DISABLE(hcryp);
4629 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4633 __HAL_UNLOCK(hcryp);
4639 if ((hcryp->
Size % 16U) != 0U)
4642 npblb = ((((uint32_t)(hcryp->
Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->
Size);
4645 if ((npblb % 4U) == 0U)
4647 lastwordsize = (16U - npblb) / 4U;
4651 lastwordsize = ((16U - npblb) / 4U) + 1U;
4654 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter ++)
4660 while (loopcounter < 4U)
4667 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
4670 __HAL_CRYP_DISABLE(hcryp);
4673 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4677 __HAL_UNLOCK(hcryp);
4681 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
4693 if (CRYP_GCMCCM_SetHeaderPhase(hcryp, Timeout) != HAL_OK)
4701 hcryp->
Phase = CRYP_PHASE_PROCESS;
4704 __HAL_CRYP_DISABLE(hcryp);
4707 CRYP_SET_PHASE(hcryp, CRYP_PHASE_PAYLOAD);
4710 __HAL_CRYP_ENABLE(hcryp);
4714 if ((hcryp->
Size % 16U) != 0U)
4717 wordsize = ((wordsize / 4U) * 4U) ;
4725 while ((hcryp->
CrypInCount < wordsize) && (outcount < wordsize))
4728 CRYP_AES_ProcessData(hcryp, Timeout);
4731 if (Timeout != HAL_MAX_DELAY)
4733 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
4736 __HAL_CRYP_DISABLE(hcryp);
4739 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
4743 __HAL_UNLOCK(hcryp);
4749 if ((hcryp->
Size % 16U) != 0U)
4754 CRYP_Workaround(hcryp, Timeout);
4771 uint32_t DoKeyIVConfig = 1U;
4773 __IO uint32_t count = 0U;
4800 if (DoKeyIVConfig == 1U)
4809 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4818 hcryp->
Instance->IV1RR = (hcryp->
Init.
B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4821 __HAL_CRYP_ENABLE(hcryp);
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);
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));
4853 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
4860 __HAL_CRYP_DISABLE(hcryp);
4863 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
4903 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
4905 __HAL_CRYP_ENABLE(hcryp);
4929 __IO uint32_t count = 0U;
4930 uint32_t DoKeyIVConfig = 1U;
4932 uint32_t loopcounter;
4934 uint32_t lastwordsize;
4960 if (DoKeyIVConfig == 1U)
4970 CRYP_SET_PHASE(hcryp, CRYP_PHASE_INIT);
4979 hcryp->
Instance->IV1RR = (hcryp->
Init.
B0[3] & CRYP_CCM_CTR1_1) | CRYP_CCM_CTR1_2;
4982 __HAL_CRYP_ENABLE(hcryp);
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);
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));
5015 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5022 __HAL_CRYP_DISABLE(hcryp);
5025 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
5054 __HAL_CRYP_ENABLE(hcryp);
5062 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5069 __HAL_CRYP_DISABLE(hcryp);
5072 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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;
5095 for (loopcounter = 0U; (loopcounter < hcryp->
Init.
HeaderSize); loopcounter += 4U)
5108 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5115 __HAL_CRYP_DISABLE(hcryp);
5118 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
5146 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5153 __HAL_CRYP_DISABLE(hcryp);
5156 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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++)
5174 while (loopcounter < 4U)
5181 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5188 __HAL_CRYP_DISABLE(hcryp);
5191 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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)
5217 wordsize = (uint32_t)(hcryp->
Size) + (16U - ((uint32_t)(hcryp->
Size) % 16U)) ;
5220 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->
pCrypInBuffPtr), ((uint16_t)wordsize / 4U),
5224 if ((hcryp->
Size < 16U) != 0U)
5227 npblb = ((((uint32_t)(hcryp->
Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->
Size);
5230 if ((npblb % 4U) == 0U)
5232 lastwordsize = (16U - npblb) / 4U;
5236 lastwordsize = ((16U - npblb) / 4U) + 1U;
5239 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter ++)
5245 while (loopcounter < 4U)
5251 count = CRYP_TIMEOUT_GCMCCMINITPHASE;
5258 __HAL_CRYP_DISABLE(hcryp);
5261 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
5283 __HAL_UNLOCK(hcryp);
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)
5321 wordsize = (uint32_t)(hcryp->
Size) + 16U - ((uint32_t)(hcryp->
Size) % 16U) ;
5324 CRYP_SetDMAConfig(hcryp, (uint32_t)(hcryp->
pCrypInBuffPtr), (uint16_t)wordsize / 4U,
5331 __HAL_UNLOCK(hcryp);
5349 uint32_t loopcounter;
5351 uint32_t lastwordsize;
5361 if (hcryp->
Size == 0U)
5364 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
5367 __HAL_UNLOCK(hcryp);
5387 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
5390 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
5401 for (i = 0U; i < 4U; i++)
5415 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
5421 __HAL_CRYP_DISABLE(hcryp);
5424 __HAL_UNLOCK(hcryp);
5427 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5437 else if ((hcryp->
Size % 16U) != 0U)
5444 npblb = ((((uint32_t)(hcryp->
Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->
Size);
5447 if ((npblb % 4U) == 0U)
5449 lastwordsize = (16U - npblb) / 4U;
5453 lastwordsize = ((16U - npblb) / 4U) + 1U;
5457 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter++)
5462 while (loopcounter < 4U)
5468 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
5470 if ((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
5472 for (i = 0U; i < 4U; i++)
5476 if (((hcryp->
Size) / 4U) == 0U)
5478 for (i = 0U; i < ((uint32_t)(hcryp->
Size) % 4U); i++)
5495 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI | CRYP_IT_INI);
5501 __HAL_UNLOCK(hcryp);
5504 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5520 for (i = 0U; i < 4U; i++)
5537 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
5543 __HAL_UNLOCK(hcryp);
5546 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5569 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
5585 npblb = ((((uint32_t)(hcryp->
Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->
Size);
5588 if ((npblb % 4U) == 0U)
5590 lastwordsize = (16U - npblb) / 4U;
5594 lastwordsize = ((16U - npblb) / 4U) + 1U;
5598 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter++)
5603 while (loopcounter < 4U)
5622 static HAL_StatusTypeDef CRYP_GCMCCM_SetHeaderPhase(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
5624 uint32_t loopcounter;
5625 uint32_t size_in_bytes;
5627 uint32_t mask[12] = {0x0U, 0xFF000000U, 0xFFFF0000U, 0xFFFFFF00U,
5628 0x0U, 0x0000FF00U, 0x0000FFFFU, 0xFF00FFFFU,
5629 0x0U, 0x000000FFU, 0x0000FFFFU, 0x00FFFFFFU};
5642 if (size_in_bytes != 0U)
5648 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5651 __HAL_CRYP_ENABLE(hcryp);
5653 if ((size_in_bytes % 16U) == 0U)
5656 for (loopcounter = 0U; (loopcounter < (size_in_bytes / 4U)); loopcounter += 4U)
5668 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) != HAL_OK)
5671 __HAL_CRYP_DISABLE(hcryp);
5674 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5678 __HAL_UNLOCK(hcryp);
5686 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 16U) * 4U)); loopcounter += 4U)
5698 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) != HAL_OK)
5701 __HAL_CRYP_DISABLE(hcryp);
5704 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5708 __HAL_UNLOCK(hcryp);
5713 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 4U) % 4U)); loopcounter++)
5719 if ((size_in_bytes % 4U) == 0U)
5722 while (loopcounter < 4U)
5732 tmp &= mask[(hcryp->
Init.
DataType * 2U) + (size_in_bytes % 4U)];
5736 while (loopcounter < 4U)
5743 if (CRYP_WaitOnIFEMFlag(hcryp, Timeout) != HAL_OK)
5746 __HAL_CRYP_DISABLE(hcryp);
5749 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5753 __HAL_UNLOCK(hcryp);
5758 if (CRYP_WaitOnBUSYFlag(hcryp, Timeout) != HAL_OK)
5761 __HAL_CRYP_DISABLE(hcryp);
5764 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5768 __HAL_UNLOCK(hcryp);
5780 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5783 __HAL_CRYP_ENABLE(hcryp);
5787 if ((size_in_bytes % 16U) == 0U)
5790 for (loopcounter = 0U; (loopcounter < (size_in_bytes / 4U)); loopcounter += 4U)
5802 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
5805 __HAL_CRYP_DISABLE(hcryp);
5808 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5812 __HAL_UNLOCK(hcryp);
5816 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5822 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 16U) * 4U)); loopcounter += 4U)
5834 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
5837 __HAL_CRYP_DISABLE(hcryp);
5840 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5844 __HAL_UNLOCK(hcryp);
5848 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5851 for (loopcounter = 0U; (loopcounter < ((size_in_bytes / 4U) % 4U)); loopcounter++)
5857 if ((size_in_bytes % 4U) == 0U)
5860 while (loopcounter < 4U)
5870 tmp &= mask[(hcryp->
Init.
DataType * 2U) + (size_in_bytes % 4U)];
5874 while (loopcounter < 4U)
5881 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
5884 __HAL_CRYP_DISABLE(hcryp);
5887 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5891 __HAL_UNLOCK(hcryp);
5895 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
5908 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5911 __HAL_CRYP_ENABLE(hcryp);
5927 __IO uint32_t count = 0U;
5928 uint32_t loopcounter;
5929 uint32_t headersize_in_bytes;
5931 uint32_t mask[12] = {0x0U, 0xFF000000U, 0xFFFF0000U, 0xFFFFFF00U,
5932 0x0U, 0x0000FF00U, 0x0000FFFFU, 0xFF00FFFFU,
5933 0x0U, 0x000000FFU, 0x0000FFFFU, 0x00FFFFFFU};
5945 if (headersize_in_bytes != 0U)
5951 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
5954 __HAL_CRYP_ENABLE(hcryp);
5956 if ((headersize_in_bytes % 16U) == 0U)
5959 for (loopcounter = 0U; (loopcounter < (headersize_in_bytes / 4U)); loopcounter += 4U)
5971 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
5978 __HAL_CRYP_DISABLE(hcryp);
5981 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
5985 __HAL_UNLOCK(hcryp);
5989 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_IFEM));
5995 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 16U) * 4U)); loopcounter += 4U)
6007 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6014 __HAL_CRYP_DISABLE(hcryp);
6017 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6021 __HAL_UNLOCK(hcryp);
6025 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_IFEM));
6028 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 4U) % 4U)); loopcounter++)
6034 if ((headersize_in_bytes % 4U) == 0U)
6037 while (loopcounter < 4U)
6047 tmp &= mask[(hcryp->
Init.
DataType * 2U) + (headersize_in_bytes % 4U)];
6051 while (loopcounter < 4U)
6058 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6065 __HAL_CRYP_DISABLE(hcryp);
6068 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6072 __HAL_UNLOCK(hcryp);
6076 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_IFEM));
6079 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6086 __HAL_CRYP_DISABLE(hcryp);
6089 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6093 __HAL_UNLOCK(hcryp);
6097 while (HAL_IS_BIT_SET(hcryp->
Instance->SR, CRYP_FLAG_BUSY));
6107 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
6110 __HAL_CRYP_ENABLE(hcryp);
6112 if ((headersize_in_bytes % 16U) == 0U)
6115 for (loopcounter = 0U; (loopcounter < (headersize_in_bytes / 4U)); loopcounter += 4U)
6128 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6135 __HAL_CRYP_DISABLE(hcryp);
6138 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
6155 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 16U) * 4U)); loopcounter += 4U)
6168 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6175 __HAL_CRYP_DISABLE(hcryp);
6178 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
6192 for (loopcounter = 0U; (loopcounter < ((headersize_in_bytes / 4U) % 4U)); loopcounter++)
6198 if ((headersize_in_bytes % 4U) == 0U)
6201 while (loopcounter < 4U)
6211 tmp &= mask[(hcryp->
Init.
DataType * 2U) + (headersize_in_bytes % 4U)];
6215 while (loopcounter < 4U)
6222 count = CRYP_TIMEOUT_GCMCCMHEADERPHASE;
6229 __HAL_CRYP_DISABLE(hcryp);
6232 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
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);
6256 CRYP_SET_PHASE(hcryp, CRYP_PHASE_HEADER);
6259 __HAL_CRYP_ENABLE(hcryp);
6275 uint32_t loopcounter;
6277 uint32_t lastwordsize;
6280 uint32_t headersize_in_bytes;
6282 uint32_t mask[12] = {0x0U, 0xFF000000U, 0xFFFF0000U, 0xFFFFFF00U,
6283 0x0U, 0x0000FF00U, 0x0000FFFFU, 0xFF00FFFFU,
6284 0x0U, 0x000000FFU, 0x0000FFFFU, 0x00FFFFFFU};
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)
6334 for (loopcounter = 0U; loopcounter < ((headersize_in_bytes / 4U) % 4U); loopcounter++)
6339 if ((headersize_in_bytes % 4U) == 0U)
6342 while (loopcounter < 4U)
6353 tmp &= mask[(hcryp->
Init.
DataType * 2U) + (headersize_in_bytes % 4U)];
6358 while (loopcounter < 4U)
6371 hcryp->
Phase = CRYP_PHASE_PROCESS;
6377 MODIFY_REG(hcryp->
Instance->CR, AES_CR_GCMPH, CRYP_PHASE_PAYLOAD);
6385 if (hcryp->
Size == 0U)
6388 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE | CRYP_IT_ERRIE);
6394 __HAL_UNLOCK(hcryp);
6396 else if (hcryp->
Size >= 16U)
6410 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
6426 npblb = ((((uint32_t)(hcryp->
Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->
Size);
6429 if ((npblb % 4U) == 0U)
6431 lastwordsize = (16U - npblb) / 4U;
6435 lastwordsize = ((16U - npblb) / 4U) + 1U;
6439 for (loopcounter = 0U; loopcounter < lastwordsize; loopcounter++)
6444 while (loopcounter < 4U)
6452 else if (((headersize_in_bytes / 4U) - (hcryp->
CrypHeaderCount)) >= 4U)
6467 for (loopcounter = 0U; loopcounter < ((headersize_in_bytes / 4U) % 4U); loopcounter++)
6473 if ((headersize_in_bytes % 4U) == 0U)
6476 while (loopcounter < 4U)
6487 tmp &= mask[(hcryp->
Init.
DataType * 2U) + (headersize_in_bytes % 4U)];
6492 while (loopcounter < 4U)
6513 uint32_t lastwordsize;
6517 uint32_t temp[4] = {0};
6518 uint32_t temp2[4] = {0};
6520 uint32_t intermediate_data[4] = {0};
6524 npblb = ((((uint32_t)(hcryp->
Size) / 16U) + 1U) * 16U) - (uint32_t)(hcryp->
Size);
6527 if ((npblb % 4U) == 0U)
6529 lastwordsize = (16U - npblb) / 4U;
6533 lastwordsize = ((16U - npblb) / 4U) + 1U;
6541 if ((hcryp->
Instance->CR & CRYP_CR_ALGODIR) == CRYP_OPERATINGMODE_ENCRYPT)
6546 __HAL_CRYP_DISABLE(hcryp);
6550 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CTR);
6553 __HAL_CRYP_ENABLE(hcryp);
6556 for (index = 0; index < lastwordsize; index ++)
6569 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
6572 __HAL_CRYP_DISABLE(hcryp);
6575 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6579 __HAL_UNLOCK(hcryp);
6580 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
6588 if ((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6590 for (index = 0U; index < 4U; index++)
6593 intermediate_data[index] = hcryp->
Instance->DOUT;
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)
6614 if ((npblb % 4U) == 1U)
6616 intermediate_data[lastwordsize - 1U] &= 0xFFFFFF00U;
6618 if ((npblb % 4U) == 2U)
6620 intermediate_data[lastwordsize - 1U] &= 0xFFFF0000U;
6622 if ((npblb % 4U) == 3U)
6624 intermediate_data[lastwordsize - 1U] &= 0xFF000000U;
6627 else if ((hcryp->
Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_8B)
6629 if ((npblb % 4U) == 1U)
6631 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFFFF00U);
6633 if ((npblb % 4U) == 2U)
6635 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFF0000U);
6637 if ((npblb % 4U) == 3U)
6639 intermediate_data[lastwordsize - 1U] &= __REV(0xFF000000U);
6642 else if ((hcryp->
Instance->CR & CRYP_CR_DATATYPE) == CRYP_DATATYPE_16B)
6644 if ((npblb % 4U) == 1U)
6646 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFFFF00U), 16);
6648 if ((npblb % 4U) == 2U)
6650 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFF0000U), 16);
6652 if ((npblb % 4U) == 3U)
6654 intermediate_data[lastwordsize - 1U] &= __ROR((0xFF000000U), 16);
6659 if ((npblb % 4U) == 1U)
6661 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFFFF00U);
6663 if ((npblb % 4U) == 2U)
6665 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFF0000U);
6667 if ((npblb % 4U) == 3U)
6669 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFF000000U);
6672 for (index = 0U; index < lastwordsize; index ++)
6675 hcryp->
Instance->DIN = intermediate_data[index];
6684 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
6687 __HAL_CRYP_DISABLE(hcryp);
6690 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6694 __HAL_UNLOCK(hcryp);
6695 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
6704 if ((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6706 for (index = 0U; index < 4U; index++)
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;
6734 MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_ALGOMODE, CRYP_AES_CTR);
6737 __HAL_CRYP_ENABLE(hcryp);
6740 for (index = 0; index < lastwordsize; index ++)
6753 if (CRYP_WaitOnOFNEFlag(hcryp, Timeout) != HAL_OK)
6756 __HAL_CRYP_DISABLE(hcryp);
6759 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6763 __HAL_UNLOCK(hcryp);
6764 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
6773 if ((hcryp->
Instance->SR & CRYP_FLAG_OFNE) != 0x0U)
6775 for (index = 0U; index < 4U; index++)
6778 intermediate_data[index] = hcryp->
Instance->DOUT;
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);
6800 for (index = lastwordsize; index < 4U; index ++)
6802 intermediate_data[index] = 0U;
6804 if ((npblb % 4U) == 1U)
6806 intermediate_data[lastwordsize - 1U] &= 0xFFFFFF00U;
6808 if ((npblb % 4U) == 2U)
6810 intermediate_data[lastwordsize - 1U] &= 0xFFFF0000U;
6812 if ((npblb % 4U) == 3U)
6814 intermediate_data[lastwordsize - 1U] &= 0xFF000000U;
6816 for (index = 0U; index < 4U ; index ++)
6818 intermediate_data[index] ^= temp[index];
6819 intermediate_data[index] ^= temp2[index];
6821 for (index = 0U; index < 4U; index ++)
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;
6838 __HAL_UNLOCK(hcryp);
6839 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
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);
6864 for (index = 0U; index < lastwordsize; index ++)
6877 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
6880 __HAL_UNLOCK(hcryp);
6881 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
6891 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
6893 for (index = 0U; index < 4U; index++)
6896 intermediate_data[index] = hcryp->
Instance->DOUTR;
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)
6913 if ((npblb % 4U) == 1U)
6915 intermediate_data[lastwordsize - 1U] &= 0xFFFFFF00U;
6917 if ((npblb % 4U) == 2U)
6919 intermediate_data[lastwordsize - 1U] &= 0xFFFF0000U;
6921 if ((npblb % 4U) == 3U)
6923 intermediate_data[lastwordsize - 1U] &= 0xFF000000U;
6926 else if ((hcryp->
Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_8B)
6928 if ((npblb % 4U) == 1U)
6930 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFFFF00U);
6932 if ((npblb % 4U) == 2U)
6934 intermediate_data[lastwordsize - 1U] &= __REV(0xFFFF0000U);
6936 if ((npblb % 4U) == 3U)
6938 intermediate_data[lastwordsize - 1U] &= __REV(0xFF000000U);
6941 else if ((hcryp->
Instance->CR & AES_CR_DATATYPE) == CRYP_DATATYPE_16B)
6943 if ((npblb % 4U) == 1U)
6945 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFFFF00U), 16);
6947 if ((npblb % 4U) == 2U)
6949 intermediate_data[lastwordsize - 1U] &= __ROR((0xFFFF0000U), 16);
6951 if ((npblb % 4U) == 3U)
6953 intermediate_data[lastwordsize - 1U] &= __ROR((0xFF000000U), 16);
6958 if ((npblb % 4U) == 1U)
6960 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFFFF00U);
6962 if ((npblb % 4U) == 2U)
6964 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFFFF0000U);
6966 if ((npblb % 4U) == 3U)
6968 intermediate_data[lastwordsize - 1U] &= __RBIT(0xFF000000U);
6973 for (index = 0U; index < lastwordsize; index ++)
6975 hcryp->
Instance->DINR = intermediate_data[index];
6984 if (CRYP_WaitOnCCFlag(hcryp, Timeout) != HAL_OK)
6987 __HAL_CRYP_DISABLE(hcryp);
6990 hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
6994 __HAL_UNLOCK(hcryp);
6995 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
7004 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
7006 for (index = 0U; index < 4U; index++)
7008 intermediate_data[index] = hcryp->
Instance->DOUTR;
7015 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
7023 static HAL_StatusTypeDef CRYP_WaitOnIFEMFlag(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7030 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_IFEM))
7033 if (Timeout != HAL_MAX_DELAY)
7035 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7051 static HAL_StatusTypeDef CRYP_WaitOnBUSYFlag(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7058 while (HAL_IS_BIT_SET(hcryp->
Instance->SR, CRYP_FLAG_BUSY))
7061 if (Timeout != HAL_MAX_DELAY)
7063 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7080 static HAL_StatusTypeDef CRYP_WaitOnOFNEFlag(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7087 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_OFNE))
7090 if (Timeout != HAL_MAX_DELAY)
7092 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7110 static HAL_StatusTypeDef CRYP_WaitOnCCFlag(
CRYP_HandleTypeDef *hcryp, uint32_t Timeout)
7117 while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF))
7120 if (Timeout != HAL_MAX_DELAY)
7122 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
DeInitializes CRYP MSP.
void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
Initializes the CRYP MSP.
HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf)
Get CRYP Configuration parameters in associated handle.
HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID, pCRYP_CallbackTypeDef pCallback)
Register a User CRYP Callback To be used instead of the weak predefined callback.
HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
De-Initializes the CRYP peripheral.
HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf)
Configure the CRYP according to the specified parameters in the CRYP_ConfigTypeDef.
HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
Initializes the CRYP according to the specified parameters in the CRYP_ConfigTypeDef and creates the ...
HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID)
Unregister an CRYP Callback CRYP callback is redirected to the weak predefined callback.
HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Encryption in interrupt mode.
HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Decryption in itnterrupt mode.
HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Decryption in DMA mode.
HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout)
Encryption mode.
HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout)
Decryption mode.
HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Encryption in DMA mode.
uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp)
Return the CRYP error code.
void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
Input FIFO transfer completed callback.
void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
This function handles cryptographic interrupt request.
void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
CRYP error callback.
HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
Returns the CRYP state.
void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
Output FIFO transfer completed callback.
__IO HAL_CRYP_STATETypeDef State
void(* ErrorCallback)(struct __CRYP_HandleTypeDef *hcryp)
void(* InCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
void(* OutCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
FunctionalState AutoKeyDerivation
__IO uint16_t CrypHeaderCount
DMA_HandleTypeDef * hdmaout
uint32_t * pCrypOutBuffPtr
__IO uint16_t CrypOutCount
uint32_t * pCrypInBuffPtr
void(* MspInitCallback)(struct __CRYP_HandleTypeDef *hcryp)
__IO uint16_t CrypInCount
DMA_HandleTypeDef * hdmain
void(* MspDeInitCallback)(struct __CRYP_HandleTypeDef *hcryp)
HAL_CRYP_STATETypeDef
CRYP State Structure definition.
CRYP Init Structure definition.
CRYP handle Structure definition.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
HAL_CRYP_CallbackIDTypeDef
@ HAL_CRYP_MSPDEINIT_CB_ID
@ HAL_CRYP_INPUT_COMPLETE_CB_ID
@ HAL_CRYP_OUTPUT_COMPLETE_CB_ID
void(* pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef *hcryp)
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
This file contains all the functions prototypes for the HAL module driver.
DMA handle Structure definition.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)