42 #if defined (AES)  || defined (CRYP) 
   43 #if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES) 
   50 #ifdef HAL_CRYP_MODULE_ENABLED 
   58 #define CRYP_PHASE_INIT                              0x00000000U              
   59 #define CRYP_PHASE_HEADER                            AES_CR_GCMPH_0           
   60 #define CRYP_PHASE_PAYLOAD                           AES_CR_GCMPH_1           
   61 #define CRYP_PHASE_FINAL                             AES_CR_GCMPH             
   63 #define CRYP_OPERATINGMODE_ENCRYPT                   0x00000000U              
   64 #define CRYP_OPERATINGMODE_KEYDERIVATION             AES_CR_MODE_0            
   65 #define CRYP_OPERATINGMODE_DECRYPT                   AES_CR_MODE_1            
   66 #define CRYP_OPERATINGMODE_KEYDERIVATION_DECRYPT     AES_CR_MODE              
   70 #define CRYP_PHASE_INIT                 0x00000000U 
   71 #define CRYP_PHASE_HEADER               CRYP_CR_GCM_CCMPH_0 
   72 #define CRYP_PHASE_PAYLOAD              CRYP_CR_GCM_CCMPH_1 
   73 #define CRYP_PHASE_FINAL                CRYP_CR_GCM_CCMPH 
   75 #define CRYP_OPERATINGMODE_ENCRYPT      0x00000000U 
   76 #define CRYP_OPERATINGMODE_DECRYPT      CRYP_CR_ALGODIR 
   79 #define  CRYPEx_PHASE_PROCESS       0x02U      
   80 #define  CRYPEx_PHASE_FINAL         0x03U      
   83 #define CRYP_CCM_CTR0_0            0x07FFFFFFU 
   84 #define CRYP_CCM_CTR0_3            0xFFFFFF00U 
  133   uint64_t inputlength = (uint64_t)hcryp->
SizesSum * 8U; 
 
  134   uint32_t tagaddr = (uint32_t)AuthTag;
 
  151     if (hcryp->
Phase == CRYPEx_PHASE_PROCESS)
 
  154       hcryp->
Phase = CRYPEx_PHASE_FINAL;
 
  159       __HAL_CRYP_DISABLE(hcryp);
 
  162       hcryp->
ErrorCode |= HAL_CRYP_ERROR_AUTH_TAG_SEQUENCE;
 
  175     __HAL_CRYP_DISABLE(hcryp);
 
  178     MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_GCM_CCMPH, CRYP_PHASE_FINAL);
 
  181     hcryp->
Instance->CR &=  ~CRYP_CR_ALGODIR;
 
  184     __HAL_CRYP_ENABLE(hcryp);
 
  191       hcryp->
Instance->DIN = __RBIT((uint32_t)(headerlength));
 
  193       hcryp->
Instance->DIN = __RBIT((uint32_t)(inputlength));
 
  198       hcryp->
Instance->DIN = __REV((uint32_t)(headerlength));
 
  200       hcryp->
Instance->DIN = __REV((uint32_t)(inputlength));
 
  205       hcryp->
Instance->DIN = __ROR((uint32_t)headerlength, 16U);
 
  207       hcryp->
Instance->DIN = __ROR((uint32_t)inputlength, 16U);
 
  212       hcryp->
Instance->DIN = (uint32_t)(headerlength);
 
  214       hcryp->
Instance->DIN = (uint32_t)(inputlength);
 
  223     while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_OFNE))
 
  226       if (Timeout != HAL_MAX_DELAY)
 
  228         if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
 
  231           __HAL_CRYP_DISABLE(hcryp);
 
  234           hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
 
  245     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  247     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  249     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  251     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  256     MODIFY_REG(hcryp->
Instance->CR, AES_CR_GCMPH, CRYP_PHASE_FINAL);
 
  263       hcryp->
Instance->DINR = __RBIT((uint32_t)(headerlength));
 
  265       hcryp->
Instance->DINR = __RBIT((uint32_t)(inputlength));
 
  270       hcryp->
Instance->DINR = __REV((uint32_t)(headerlength));
 
  272       hcryp->
Instance->DINR = __REV((uint32_t)(inputlength));
 
  277       hcryp->
Instance->DINR = __ROR((uint32_t)headerlength, 16U);
 
  279       hcryp->
Instance->DINR = __ROR((uint32_t)inputlength, 16U);
 
  284       hcryp->
Instance->DINR = (uint32_t)(headerlength);
 
  286       hcryp->
Instance->DINR = (uint32_t)(inputlength);
 
  294     while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF))
 
  297       if (Timeout != HAL_MAX_DELAY)
 
  299         if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
 
  302           __HAL_CRYP_DISABLE(hcryp);
 
  305           hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
 
  316     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  318     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  320     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  322     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  325     __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
 
  330     __HAL_CRYP_DISABLE(hcryp);
 
  358   uint32_t tagaddr = (uint32_t)AuthTag;
 
  359   uint32_t ctr0 [4] = {0};
 
  360   uint32_t ctr0addr = (uint32_t)ctr0;
 
  372     if (hcryp->
Phase == CRYPEx_PHASE_PROCESS)
 
  375       hcryp->
Phase = CRYPEx_PHASE_FINAL;
 
  380       __HAL_CRYP_DISABLE(hcryp);
 
  383       hcryp->
ErrorCode |= HAL_CRYP_ERROR_AUTH_TAG_SEQUENCE;
 
  396     __HAL_CRYP_DISABLE(hcryp);
 
  399     MODIFY_REG(hcryp->
Instance->CR, CRYP_CR_GCM_CCMPH | CRYP_CR_ALGODIR, CRYP_PHASE_FINAL | CRYP_OPERATINGMODE_ENCRYPT);
 
  402     __HAL_CRYP_ENABLE(hcryp);
 
  406     ctr0[0] = (hcryp->
Init.
B0[0]) & CRYP_CCM_CTR0_0;
 
  407     ctr0[1] = hcryp->
Init.
B0[1];
 
  408     ctr0[2] = hcryp->
Init.
B0[2];
 
  409     ctr0[3] = hcryp->
Init.
B0[3] &  CRYP_CCM_CTR0_3;
 
  413       hcryp->
Instance->DIN = __REV(*(uint32_t *)(ctr0addr));
 
  415       hcryp->
Instance->DIN = __REV(*(uint32_t *)(ctr0addr));
 
  417       hcryp->
Instance->DIN = __REV(*(uint32_t *)(ctr0addr));
 
  419       hcryp->
Instance->DIN = __REV(*(uint32_t *)(ctr0addr));
 
  423       hcryp->
Instance->DIN = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  425       hcryp->
Instance->DIN = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  427       hcryp->
Instance->DIN = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  429       hcryp->
Instance->DIN = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  433       hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(ctr0addr));
 
  435       hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(ctr0addr));
 
  437       hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(ctr0addr));
 
  439       hcryp->
Instance->DIN = __RBIT(*(uint32_t *)(ctr0addr));
 
  443       hcryp->
Instance->DIN = *(uint32_t *)(ctr0addr);
 
  445       hcryp->
Instance->DIN = *(uint32_t *)(ctr0addr);
 
  447       hcryp->
Instance->DIN = *(uint32_t *)(ctr0addr);
 
  449       hcryp->
Instance->DIN = *(uint32_t *)(ctr0addr);
 
  453     while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, CRYP_FLAG_OFNE))
 
  456       if (Timeout != HAL_MAX_DELAY)
 
  458         if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
 
  461           __HAL_CRYP_DISABLE(hcryp);
 
  464           hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
 
  475     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  477     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  479     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  481     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUT;
 
  486     MODIFY_REG(hcryp->
Instance->CR, AES_CR_GCMPH, CRYP_PHASE_FINAL);
 
  492       ctr0[0] = (__REV(hcryp->
Init.
B0[0]) & CRYP_CCM_CTR0_0);
 
  493       ctr0[1] = __REV(hcryp->
Init.
B0[1]);
 
  494       ctr0[2] = __REV(hcryp->
Init.
B0[2]);
 
  495       ctr0[3] = (__REV(hcryp->
Init.
B0[3])& CRYP_CCM_CTR0_3);
 
  497       hcryp->
Instance->DINR = __REV(*(uint32_t *)(ctr0addr));
 
  499       hcryp->
Instance->DINR = __REV(*(uint32_t *)(ctr0addr));
 
  501       hcryp->
Instance->DINR = __REV(*(uint32_t *)(ctr0addr));
 
  503       hcryp->
Instance->DINR = __REV(*(uint32_t *)(ctr0addr));
 
  507       ctr0[0] = (__ROR((hcryp->
Init.
B0[0]), 16U)& CRYP_CCM_CTR0_0);
 
  508       ctr0[1] =   __ROR((hcryp->
Init.
B0[1]), 16U);
 
  509       ctr0[2] =   __ROR((hcryp->
Init.
B0[2]), 16U);
 
  510       ctr0[3] = (__ROR((hcryp->
Init.
B0[3]), 16U)& CRYP_CCM_CTR0_3);
 
  512       hcryp->
Instance->DINR = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  514       hcryp->
Instance->DINR = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  516       hcryp->
Instance->DINR = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  518       hcryp->
Instance->DINR = __ROR(*(uint32_t *)(ctr0addr), 16U);
 
  522       ctr0[0] = (__RBIT(hcryp->
Init.
B0[0])& CRYP_CCM_CTR0_0);
 
  523       ctr0[1] = __RBIT(hcryp->
Init.
B0[1]);
 
  524       ctr0[2] = __RBIT(hcryp->
Init.
B0[2]);
 
  525       ctr0[3] = (__RBIT(hcryp->
Init.
B0[3])& CRYP_CCM_CTR0_3);
 
  527       hcryp->
Instance->DINR = __RBIT(*(uint32_t *)(ctr0addr));
 
  529       hcryp->
Instance->DINR = __RBIT(*(uint32_t *)(ctr0addr));
 
  531       hcryp->
Instance->DINR = __RBIT(*(uint32_t *)(ctr0addr));
 
  533       hcryp->
Instance->DINR = __RBIT(*(uint32_t *)(ctr0addr));
 
  537       ctr0[0] = (hcryp->
Init.
B0[0]) & CRYP_CCM_CTR0_0;
 
  538       ctr0[1] = hcryp->
Init.
B0[1];
 
  539       ctr0[2] = hcryp->
Init.
B0[2];
 
  540       ctr0[3] = hcryp->
Init.
B0[3] &  CRYP_CCM_CTR0_3;
 
  542       hcryp->
Instance->DINR = *(uint32_t *)(ctr0addr);
 
  544       hcryp->
Instance->DINR = *(uint32_t *)(ctr0addr);
 
  546       hcryp->
Instance->DINR = *(uint32_t *)(ctr0addr);
 
  548       hcryp->
Instance->DINR = *(uint32_t *)(ctr0addr);
 
  553     while (HAL_IS_BIT_CLR(hcryp->
Instance->SR, AES_SR_CCF))
 
  556       if (Timeout != HAL_MAX_DELAY)
 
  558         if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
 
  561           __HAL_CRYP_DISABLE(hcryp);
 
  564           hcryp->
ErrorCode |= HAL_CRYP_ERROR_TIMEOUT;
 
  575     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  577     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  579     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  581     *(uint32_t *)(tagaddr) = hcryp->
Instance->DOUTR;
 
  584     __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
 
  595     __HAL_CRYP_DISABLE(hcryp);
 
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_GenerateAuthTAG(CRYP_HandleTypeDef *hcryp, uint32_t *AuthTag, uint32_t Timeout)
AES CCM Authentication TAG generation.
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_GenerateAuthTAG(CRYP_HandleTypeDef *hcryp, uint32_t *AuthTag, uint32_t Timeout)
generate the GCM authentication TAG.
void HAL_CRYPEx_EnableAutoKeyDerivation(CRYP_HandleTypeDef *hcryp)
AES enable key derivation functions.
void HAL_CRYPEx_DisableAutoKeyDerivation(CRYP_HandleTypeDef *hcryp)
AES disable key derivation functions.
__IO HAL_CRYP_STATETypeDef State
FunctionalState AutoKeyDerivation
CRYP handle Structure definition.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
This file contains all the functions prototypes for the HAL module driver.