Handle CRYP block input/output data handling under interruption for GCM, GMAC, CCM or CMAC chaining modes.
2238 uint32_t inputaddr ;
2239 uint32_t outputaddr ;
2241 uint32_t addhoc_process = 0;
2242 uint32_t difflength = 0;
2243 uint32_t difflengthmod4 = 0;
2244 uint32_t mask[4][3] ;
2245 uint32_t mask_index = hcryp->
Init.DataType >> AES_CR_DATATYPE_Pos;
2246 uint32_t intermediate_data[4] = {0};
2248 mask[0][0] = 0xFF000000U; mask[0][1] = 0xFFFF0000U; mask[0][2] = 0xFFFFFF00U;
2249 mask[1][0] = 0x0000FF00U; mask[1][1] = 0x0000FFFFU; mask[1][2] = 0xFF00FFFFU;
2250 mask[2][0] = 0x000000FFU; mask[2][1] = 0x0000FFFFU; mask[2][2] = 0x00FFFFFFU;
2251 mask[3][0] = 0x000000FFU; mask[3][1] = 0x0000FFFFU; mask[3][2] = 0x00FFFFFFU;
2258 if (hcryp->
Init.GCMCMACPhase == CRYP_INIT_PHASE)
2261 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2263 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2273 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1) 2283 else if (hcryp->
Init.GCMCMACPhase == CRYP_HEADER_PHASE)
2289 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2291 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2301 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1) 2313 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2318 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2332 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2342 difflengthmod4 = difflength%4U;
2350 #if defined(AES_CR_NPBLB) 2351 if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CCM)
2353 if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)
2366 if (addhoc_process == 0U)
2368 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2370 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2372 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2374 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2380 for(index=0U ; index < (difflength/4U); index ++)
2383 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2388 if (difflengthmod4 != 0U)
2390 hcryp->
Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1U]);
2393 for(index=0U; index < (4U - ((difflength+3U)/4U)); index ++)
2405 else if (hcryp->
Init.GCMCMACPhase == CRYP_PAYLOAD_PHASE)
2413 #
if defined(AES_CR_NPBLB)
2417 if ((hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC) && \
2423 difflengthmod4 = difflength%4U;
2426 for(index=0U ; index < 4U; index ++)
2428 intermediate_data[index] = hcryp->
Instance->DOUTR;
2432 for(index=0U ; index < (difflength/4U); index ++)
2434 *(uint32_t*)(outputaddr) = intermediate_data[index];
2441 if (difflengthmod4 != 0U)
2443 intermediate_data[difflength/4U] &= mask[mask_index][difflengthmod4-1U];
2444 *(uint32_t*)(outputaddr) = intermediate_data[difflength/4U];
2447 #if !defined(AES_CR_NPBLB) 2448 if (hcryp->
Init.OperatingMode == CRYP_ALGOMODE_ENCRYPT)
2451 __HAL_CRYP_SET_CHAININGMODE(hcryp, CRYP_CHAINMODE_AES_GCM_GMAC);
2458 for(index=0U ; index < (4U - ((difflength+3U)/4U)); index ++)
2460 intermediate_data[((difflength+3U)/4U)+index] = 0;
2465 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2466 for(index=0U ; index < 4U; index ++)
2468 hcryp->
Instance->DINR = intermediate_data[index];
2476 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2478 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2488 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1) 2503 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2505 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2507 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2509 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2515 #if !defined(AES_CR_NPBLB) 2519 for(index=0U ; index < 4U; index ++)
2521 intermediate_data[index] = hcryp->
Instance->DOUTR;
2531 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2533 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2543 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1) 2555 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2560 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2575 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2583 difflengthmod4 = difflength%4U;
2586 #if defined(AES_CR_NPBLB) 2590 uint32_t cr_temp = hcryp->
Instance->CR;
2592 if (((cr_temp & (AES_CR_CHMOD|AES_CR_MODE)) == (CRYP_CHAINMODE_AES_GCM_GMAC|CRYP_ALGOMODE_ENCRYPT))
2593 || ((cr_temp & (AES_CR_CHMOD|AES_CR_MODE)) == (CRYP_CHAINMODE_AES_CCM|CRYP_ALGOMODE_DECRYPT)))
2597 MODIFY_REG(hcryp->
Instance->CR, AES_CR_NPBLB, (16U - difflength) << AES_POSITION_CR_NPBLB);
2602 if (hcryp->
Init.OperatingMode == CRYP_ALGOMODE_ENCRYPT)
2605 __HAL_CRYP_SET_CHAININGMODE(hcryp, CRYP_CHAINMODE_AES_CTR);
2611 for(index=0U ; index < (difflength/4U); index ++)
2614 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2618 if (difflengthmod4 != 0U)
2620 hcryp->
Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1U]);
2623 for(index=0U ; index < (4U - ((difflength+3U)/4U)); index ++)
2635 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2637 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2639 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2641 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
2651 else if (hcryp->
Init.GCMCMACPhase == CRYP_FINAL_PHASE)
2654 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
2661 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2663 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2665 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2667 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
2670 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
2677 __HAL_CRYP_DISABLE(hcryp);
2682 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1) 2693 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
__IO HAL_CRYP_STATETypeDef State
if(lpuartdiv >=LPUART_BRR_MIN_VALUE)
HAL_SuspendTypeDef SuspendRequest
void(* CompCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
__weak void HAL_CRYPEx_ComputationCpltCallback(CRYP_HandleTypeDef *hcryp)
Computation completed callbacks.
ADC handle Structure definition.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
uint8_t * pCrypOutBuffPtr