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.