Carry out in polling mode the authentication tag generation as well as the ciphering or deciphering operation according to hcryp->Init structure fields.
436 uint32_t outputaddr ;
438 uint64_t headerlength ;
439 uint64_t inputlength ;
440 uint64_t payloadlength ;
441 uint32_t difflength = 0;
442 uint32_t addhoc_process = 0;
447 if (hcryp->
Init.GCMCMACPhase == CRYP_INIT_PHASE)
451 else if (hcryp->
Init.GCMCMACPhase == CRYP_HEADER_PHASE)
453 if (((hcryp->
Init.Header != NULL) && (hcryp->
Init.HeaderSize == 0U)) ||
454 ((hcryp->
Init.Header == NULL) && (hcryp->
Init.HeaderSize != 0U)))
458 #if defined(AES_CR_NPBLB) 459 if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CCM)
461 if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)
465 if (((pInputData != NULL) && (Size == 0U)) || ((pInputData == NULL) && (Size != 0U)))
471 else if (hcryp->
Init.GCMCMACPhase == CRYP_PAYLOAD_PHASE)
473 if (((pInputData == NULL) && (Size != 0U)) || \
474 ((pInputData != NULL) && (Size == 0U)) || \
475 ((pInputData != NULL) && (Size != 0U) && (pOutputData == NULL)))
480 else if (hcryp->
Init.GCMCMACPhase == CRYP_FINAL_PHASE)
482 if (pOutputData == NULL)
486 #if !defined(AES_CR_NPBLB) 487 if ((hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC) && (pInputData == NULL))
512 if (hcryp->
Init.GCMCMACPhase == CRYP_INIT_PHASE)
523 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
530 else if (hcryp->
Init.GCMCMACPhase == CRYP_HEADER_PHASE)
532 #if !defined(AES_CR_NPBLB) 534 if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
545 __HAL_CRYP_ENABLE(hcryp);
547 #if !defined(AES_CR_NPBLB) 551 if ((hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC) && (Size != 0U))
554 inputaddr = (uint32_t)pInputData;
556 for(index=0U ; (index < Size); index += 16U)
559 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
561 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
563 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
565 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
575 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
579 index_test = (uint64_t)index + 16U;
593 hcryp->
CrypInCount = (uint32_t) (hcryp->
Init.HeaderSize + Size - index_test);
605 inputaddr = (uint32_t)hcryp->
Init.Header;
608 headerlength = (((hcryp->
Init.HeaderSize)/16U)*16U) ;
609 if ((hcryp->
Init.HeaderSize % 16U) != 0U)
611 difflength = (uint32_t) (hcryp->
Init.HeaderSize - headerlength);
613 for(index=0U ; index < headerlength; index += 16U)
617 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
619 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
621 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
623 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
633 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
637 index_temp = (uint64_t)index + 16U;
660 if (difflength != 0U)
672 else if (hcryp->
Init.GCMCMACPhase == CRYP_PAYLOAD_PHASE)
680 __HAL_CRYP_ENABLE(hcryp);
683 inputaddr = (uint32_t)pInputData;
684 outputaddr = (uint32_t)pOutputData;
688 if ((Size % 16U) != 0U)
690 payloadlength = (Size/16U) * 16U;
691 difflength = (uint32_t) (Size - payloadlength);
696 payloadlength = Size;
700 for(index=0U ; index < payloadlength; index += 16U)
704 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
706 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
708 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
710 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
721 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
725 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
727 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
729 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
731 *(uint32_t*)(outputaddr) = hcryp->
Instance->DOUTR;
736 index_temp = (uint64_t)index + 16U;
740 if (hcryp->
Init.OperatingMode == CRYP_ALGOMODE_ENCRYPT)
761 hcryp->
CrypInCount = (uint32_t) (Size - index_temp);
773 if (addhoc_process == 1U)
790 tagaddr = (uint32_t)pOutputData;
792 #if defined(AES_CR_NPBLB) 802 __HAL_CRYP_ENABLE(hcryp);
805 if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
807 headerlength = hcryp->
Init.HeaderSize * 8U;
808 inputlength = Size * 8U;
810 #if !defined(AES_CR_NPBLB) 811 if(hcryp->
Init.DataType == CRYP_DATATYPE_1B)
813 hcryp->
Instance->DINR = __RBIT((uint32_t)(headerlength>>32));
814 hcryp->
Instance->DINR = __RBIT((uint32_t)headerlength);
815 hcryp->
Instance->DINR = __RBIT((uint32_t)(inputlength>>32));
816 hcryp->
Instance->DINR = __RBIT((uint32_t)inputlength);
818 else if(hcryp->
Init.DataType == CRYP_DATATYPE_8B)
820 hcryp->
Instance->DINR = __REV((uint32_t)(headerlength>>32));
821 hcryp->
Instance->DINR = __REV((uint32_t)headerlength);
822 hcryp->
Instance->DINR = __REV((uint32_t)(inputlength>>32));
823 hcryp->
Instance->DINR = __REV((uint32_t)inputlength);
825 else if(hcryp->
Init.DataType == CRYP_DATATYPE_16B)
827 hcryp->
Instance->DINR = __ROR((uint32_t)(headerlength>>32), 16);
828 hcryp->
Instance->DINR = __ROR((uint32_t)headerlength, 16);
829 hcryp->
Instance->DINR = __ROR((uint32_t)(inputlength>>32), 16);
830 hcryp->
Instance->DINR = __ROR((uint32_t)inputlength, 16);
832 else if(hcryp->
Init.DataType == CRYP_DATATYPE_32B)
834 hcryp->
Instance->DINR = (uint32_t)(headerlength>>32);
835 hcryp->
Instance->DINR = (uint32_t)(headerlength);
836 hcryp->
Instance->DINR = (uint32_t)(inputlength>>32);
837 hcryp->
Instance->DINR = (uint32_t)(inputlength);
845 hcryp->
Instance->DINR = (uint32_t)(headerlength>>32);
846 hcryp->
Instance->DINR = (uint32_t)(headerlength);
847 hcryp->
Instance->DINR = (uint32_t)(inputlength>>32);
848 hcryp->
Instance->DINR = (uint32_t)(inputlength);
851 #if !defined(AES_CR_NPBLB) 852 else if (hcryp->
Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)
854 inputaddr = (uint32_t)pInputData;
857 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
859 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
861 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
863 hcryp->
Instance->DINR = *(uint32_t*)(inputaddr);
881 *(uint32_t*)(tagaddr) = hcryp->
Instance->DOUTR;
883 *(uint32_t*)(tagaddr) = hcryp->
Instance->DOUTR;
885 *(uint32_t*)(tagaddr) = hcryp->
Instance->DOUTR;
887 *(uint32_t*)(tagaddr) = hcryp->
Instance->DOUTR;
891 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
895 __HAL_CRYP_DISABLE(hcryp);
__IO HAL_CRYP_STATETypeDef State
static HAL_StatusTypeDef CRYP_WaitOnBusyFlagReset(CRYP_HandleTypeDef const *const hcryp, uint32_t Timeout)
Wait for Busy Flag to be reset during a GCM payload encryption process suspension.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
HAL_SuspendTypeDef SuspendRequest
static void CRYP_Padding(CRYP_HandleTypeDef *hcryp, uint32_t difflength, uint32_t polling)
Last header or payload block padding when size is not a multiple of 128 bits.
static HAL_StatusTypeDef CRYP_WaitOnCCFlag(CRYP_HandleTypeDef const *const hcryp, uint32_t Timeout)
Handle CRYP hardware block Timeout when waiting for CCF flag to be raised.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
uint8_t * pCrypOutBuffPtr