STM32L4xx_HAL_Driver  1.14.0
stm32l4xx_hal_cryp.c
Go to the documentation of this file.
1 
123 /* Includes ------------------------------------------------------------------*/
124 #include "stm32l4xx_hal.h"
125 
126 #ifdef HAL_CRYP_MODULE_ENABLED
127 
128 #if defined(AES)
129 
141 /* Private typedef -----------------------------------------------------------*/
142 /* Private define ------------------------------------------------------------*/
143 /* Private macro -------------------------------------------------------------*/
144 /* Private variables ---------------------------------------------------------*/
145 /* Private functions --------------------------------------------------------*/
146 
151 static HAL_StatusTypeDef CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp);
152 static HAL_StatusTypeDef CRYP_SetKey(CRYP_HandleTypeDef *hcryp);
153 static HAL_StatusTypeDef CRYP_AES_IT(CRYP_HandleTypeDef *hcryp);
154 
159 /* Exported functions ---------------------------------------------------------*/
160 
240 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
241 {
242  /* Check the CRYP handle allocation */
243  if(hcryp == NULL)
244  {
245  return HAL_ERROR;
246  }
247 
248  /* Check the instance */
249  assert_param(IS_AES_ALL_INSTANCE(hcryp->Instance));
250 
251  /* Check the parameters */
252  assert_param(IS_CRYP_KEYSIZE(hcryp->Init.KeySize));
253  assert_param(IS_CRYP_DATATYPE(hcryp->Init.DataType));
254  assert_param(IS_CRYP_ALGOMODE(hcryp->Init.OperatingMode));
255  /* ChainingMode parameter is irrelevant when mode is set to Key derivation */
256  if (hcryp->Init.OperatingMode != CRYP_ALGOMODE_KEYDERIVATION)
257  {
258  assert_param(IS_CRYP_CHAINMODE(hcryp->Init.ChainingMode));
259  }
260  assert_param(IS_CRYP_WRITE(hcryp->Init.KeyWriteFlag));
261 
262  /*========================================================*/
263  /* Check the proper operating/chaining modes combinations */
264  /*========================================================*/
265  /* Check the proper chaining when the operating mode is key derivation and decryption */
266 #if defined(AES_CR_NPBLB)
267  if ((hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION_DECRYPT) &&\
268  ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CTR) \
269  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC) \
270  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CCM)))
271 #else
272  if ((hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION_DECRYPT) &&\
273  ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CTR) \
274  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC) \
275  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)))
276 #endif
277  {
278  return HAL_ERROR;
279  }
280  /* Check that key derivation is not set in CMAC mode or CCM mode when applicable */
281 #if defined(AES_CR_NPBLB)
282  if ((hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION)
283  && (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CCM))
284 #else
285  if ((hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION)
286  && (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC))
287 #endif
288  {
289  return HAL_ERROR;
290  }
291 
292 
293  /*================*/
294  /* Initialization */
295  /*================*/
296  /* Initialization start */
297 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
298  if (hcryp->State == HAL_CRYP_STATE_RESET)
299  {
300  /* Allocate lock resource and initialize it */
301  hcryp->Lock = HAL_UNLOCKED;
302 
303  /* Reset Callback pointers in HAL_CRYP_STATE_RESET only */
304  hcryp->InCpltCallback = HAL_CRYP_InCpltCallback; /* Legacy weak (surcharged) input DMA transfer completion callback */
305  hcryp->OutCpltCallback = HAL_CRYP_OutCpltCallback; /* Legacy weak (surcharged) output DMA transfer completion callback */
306  hcryp->CompCpltCallback = HAL_CRYPEx_ComputationCpltCallback; /* Legacy weak (surcharged) computation completion callback */
307  hcryp->ErrorCallback = HAL_CRYP_ErrorCallback; /* Legacy weak (surcharged) error callback */
308  if(hcryp->MspInitCallback == NULL)
309  {
311  }
312 
313  /* Init the low level hardware */
314  hcryp->MspInitCallback(hcryp);
315  }
316 #else
317  if(hcryp->State == HAL_CRYP_STATE_RESET)
318  {
319  /* Allocate lock resource and initialize it */
320  hcryp->Lock = HAL_UNLOCKED;
321 
322  /* Init the low level hardware */
323  HAL_CRYP_MspInit(hcryp);
324  }
325 #endif /* (USE_HAL_CRYP_REGISTER_CALLBACKS) */
326 
327  /* Change the CRYP state */
328  hcryp->State = HAL_CRYP_STATE_BUSY;
329 
330  /* Disable the Peripheral */
331  __HAL_CRYP_DISABLE(hcryp);
332 
333  /*=============================================================*/
334  /* AES initialization common to all operating modes */
335  /*=============================================================*/
336  /* Set the Key size selection */
337  MODIFY_REG(hcryp->Instance->CR, AES_CR_KEYSIZE, hcryp->Init.KeySize);
338 
339  /* Set the default CRYP phase when this parameter is not used.
340  Phase is updated below in case of GCM/GMAC(/CMAC)(/CCM) setting. */
342 
343 
344 
345  /*=============================================================*/
346  /* Carry on the initialization based on the AES operating mode */
347  /*=============================================================*/
348  /* Key derivation */
349  if (hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION)
350  {
351  MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_ALGOMODE_KEYDERIVATION);
352 
353  /* Configure the Key registers */
354  if (CRYP_SetKey(hcryp) != HAL_OK)
355  {
356  return HAL_ERROR;
357  }
358  }
359  else
360  /* Encryption / Decryption (with or without key derivation) / authentication */
361  {
362 #if !defined(AES_CR_NPBLB)
363  /* Set data type, operating and chaining modes.
364  In case of GCM or GMAC, data type is forced to 0b00 */
365  if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
366  {
367  MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE|AES_CR_MODE|AES_CR_CHMOD, hcryp->Init.OperatingMode|hcryp->Init.ChainingMode);
368  }
369  else
370 #endif
371  {
372  MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE|AES_CR_MODE|AES_CR_CHMOD, hcryp->Init.DataType|hcryp->Init.OperatingMode|hcryp->Init.ChainingMode);
373  }
374 
375 
376  /* Specify the encryption/decryption phase in case of Galois counter mode (GCM),
377  Galois message authentication code (GMAC), cipher message authentication code (CMAC) when applicable
378  or Counter with Cipher Mode (CCM) when applicable */
379 #if defined(AES_CR_NPBLB)
380  if ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
381  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CCM))
382 #else
383  if ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
384  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC))
385 #endif
386  {
387  MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, hcryp->Init.GCMCMACPhase);
388  hcryp->Phase = HAL_CRYP_PHASE_START;
389  }
390 
391 
392  /* Configure the Key registers if no need to bypass this step */
393  if (hcryp->Init.KeyWriteFlag == CRYP_KEY_WRITE_ENABLE)
394  {
395  if (CRYP_SetKey(hcryp) != HAL_OK)
396  {
397  return HAL_ERROR;
398  }
399  }
400 
401  /* If applicable, configure the Initialization Vector */
402  if (hcryp->Init.ChainingMode != CRYP_CHAINMODE_AES_ECB)
403  {
404  if (CRYP_SetInitVector(hcryp) != HAL_OK)
405  {
406  return HAL_ERROR;
407  }
408  }
409  }
410 
411 #if defined(AES_CR_NPBLB)
412  /* Clear NPBLB field */
413  CLEAR_BIT(hcryp->Instance->CR, AES_CR_NPBLB);
414 #endif
415 
416  /* Reset CrypInCount and CrypOutCount */
417  hcryp->CrypInCount = 0;
418  hcryp->CrypOutCount = 0;
419 
420  /* Reset ErrorCode field */
421  hcryp->ErrorCode = HAL_CRYP_ERROR_NONE;
422 
423  /* Reset Mode suspension request */
425 
426  /* Change the CRYP state */
427  hcryp->State = HAL_CRYP_STATE_READY;
428 
429  /* Enable the Peripheral */
430  __HAL_CRYP_ENABLE(hcryp);
431 
432  /* Return function status */
433  return HAL_OK;
434 }
435 
442 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
443 {
444  /* Check the CRYP handle allocation */
445  if(hcryp == NULL)
446  {
447  return HAL_ERROR;
448  }
449 
450  /* Change the CRYP state */
451  hcryp->State = HAL_CRYP_STATE_BUSY;
452 
453  /* Set the default CRYP phase */
454  hcryp->Phase = HAL_CRYP_PHASE_READY;
455 
456  /* Reset CrypInCount and CrypOutCount */
457  hcryp->CrypInCount = 0;
458  hcryp->CrypOutCount = 0;
459 
460  /* Disable the CRYP Peripheral Clock */
461  __HAL_CRYP_DISABLE(hcryp);
462 
463 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
464  if(hcryp->MspDeInitCallback == NULL)
465  {
467  }
468 
469  /* DeInit the low level hardware */
470  hcryp->MspDeInitCallback(hcryp);
471 #else
472  /* DeInit the low level hardware: CLOCK, NVIC.*/
473  HAL_CRYP_MspDeInit(hcryp);
474 #endif /* (USE_HAL_CRYP_REGISTER_CALLBACKS) */
475 
476  /* Change the CRYP state */
477  hcryp->State = HAL_CRYP_STATE_RESET;
478 
479  /* Release Lock */
480  __HAL_UNLOCK(hcryp);
481 
482  /* Return function status */
483  return HAL_OK;
484 }
485 
493 {
494  /* Prevent unused argument(s) compilation warning */
495  UNUSED(hcryp);
496 
497  /* NOTE : This function should not be modified; when the callback is needed,
498  the HAL_CRYP_MspInit can be implemented in the user file
499  */
500 }
501 
509 {
510  /* Prevent unused argument(s) compilation warning */
511  UNUSED(hcryp);
512 
513  /* NOTE : This function should not be modified; when the callback is needed,
514  the HAL_CRYP_MspDeInit can be implemented in the user file
515  */
516 }
517 
554 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
555 {
556  /* Re-initialize AES IP with proper parameters */
557  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
558  {
559  return HAL_ERROR;
560  }
561  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
562  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
563  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
564  if (HAL_CRYP_Init(hcryp) != HAL_OK)
565  {
566  return HAL_ERROR;
567  }
568 
569  return HAL_CRYPEx_AES(hcryp, pPlainData, Size, pCypherData, Timeout);
570 }
571 
572 
585 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
586 {
587  /* Re-initialize AES IP with proper parameters */
588  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
589  {
590  return HAL_ERROR;
591  }
592  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
593  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
594  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
595  if (HAL_CRYP_Init(hcryp) != HAL_OK)
596  {
597  return HAL_ERROR;
598  }
599 
600  return HAL_CRYPEx_AES(hcryp, pPlainData, Size, pCypherData, Timeout);
601 }
602 
603 
616 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
617 {
618  /* Re-initialize AES IP with proper parameters */
619  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
620  {
621  return HAL_ERROR;
622  }
623  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
624  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
625  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
626  if (HAL_CRYP_Init(hcryp) != HAL_OK)
627  {
628  return HAL_ERROR;
629  }
630 
631  return HAL_CRYPEx_AES(hcryp, pPlainData, Size, pCypherData, Timeout);
632 }
633 
647 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
648 {
649  /* Re-initialize AES IP with proper parameters */
650  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
651  {
652  return HAL_ERROR;
653  }
654  hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
655  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
656  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
657  if (HAL_CRYP_Init(hcryp) != HAL_OK)
658  {
659  return HAL_ERROR;
660  }
661 
662  return HAL_CRYPEx_AES(hcryp, pCypherData, Size, pPlainData, Timeout);
663 }
664 
678 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
679 {
680  /* Re-initialize AES IP with proper parameters */
681  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
682  {
683  return HAL_ERROR;
684  }
685  hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
686  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
687  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
688  if (HAL_CRYP_Init(hcryp) != HAL_OK)
689  {
690  return HAL_ERROR;
691  }
692 
693  return HAL_CRYPEx_AES(hcryp, pCypherData, Size, pPlainData, Timeout);
694 }
695 
709 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
710 {
711  /* Re-initialize AES IP with proper parameters */
712  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
713  {
714  return HAL_ERROR;
715  }
716  hcryp->Init.OperatingMode = CRYP_ALGOMODE_DECRYPT;
717  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
718  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
719  if (HAL_CRYP_Init(hcryp) != HAL_OK)
720  {
721  return HAL_ERROR;
722  }
723 
724  return HAL_CRYPEx_AES(hcryp, pCypherData, Size, pPlainData, Timeout);
725 }
726 
739 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
740 {
741  /* Re-initialize AES IP with proper parameters */
742  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
743  {
744  return HAL_ERROR;
745  }
746  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
747  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
748  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
749  if (HAL_CRYP_Init(hcryp) != HAL_OK)
750  {
751  return HAL_ERROR;
752  }
753 
754  return HAL_CRYPEx_AES_IT(hcryp, pPlainData, Size, pCypherData);
755 }
756 
769 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
770 {
771  /* Re-initialize AES IP with proper parameters */
772  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
773  {
774  return HAL_ERROR;
775  }
776  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
777  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
778  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
779  if (HAL_CRYP_Init(hcryp) != HAL_OK)
780  {
781  return HAL_ERROR;
782  }
783 
784  return HAL_CRYPEx_AES_IT(hcryp, pPlainData, Size, pCypherData);
785 }
786 
787 
800 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
801 {
802  /* Re-initialize AES IP with proper parameters */
803  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
804  {
805  return HAL_ERROR;
806  }
807  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
808  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
809  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
810  if (HAL_CRYP_Init(hcryp) != HAL_OK)
811  {
812  return HAL_ERROR;
813  }
814 
815  return HAL_CRYPEx_AES_IT(hcryp, pPlainData, Size, pCypherData);
816 }
817 
830 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
831 {
832  /* Re-initialize AES IP with proper parameters */
833  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
834  {
835  return HAL_ERROR;
836  }
837  hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
838  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
839  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
840  if (HAL_CRYP_Init(hcryp) != HAL_OK)
841  {
842  return HAL_ERROR;
843  }
844 
845  return HAL_CRYPEx_AES_IT(hcryp, pCypherData, Size, pPlainData);
846 }
847 
860 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
861 {
862  /* Re-initialize AES IP with proper parameters */
863  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
864  {
865  return HAL_ERROR;
866  }
867  hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
868  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
869  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
870  if (HAL_CRYP_Init(hcryp) != HAL_OK)
871  {
872  return HAL_ERROR;
873  }
874 
875  return HAL_CRYPEx_AES_IT(hcryp, pCypherData, Size, pPlainData);
876 }
877 
890 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
891 {
892  /* Re-initialize AES IP with proper parameters */
893  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
894  {
895  return HAL_ERROR;
896  }
897  hcryp->Init.OperatingMode = CRYP_ALGOMODE_DECRYPT;
898  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
899  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
900  if (HAL_CRYP_Init(hcryp) != HAL_OK)
901  {
902  return HAL_ERROR;
903  }
904 
905  return HAL_CRYPEx_AES_IT(hcryp, pCypherData, Size, pPlainData);
906 }
907 
921 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
922 {
923  /* Re-initialize AES IP with proper parameters */
924  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
925  {
926  return HAL_ERROR;
927  }
928  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
929  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
930  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
931  if (HAL_CRYP_Init(hcryp) != HAL_OK)
932  {
933  return HAL_ERROR;
934  }
935 
936  return HAL_CRYPEx_AES_DMA(hcryp, pPlainData, Size, pCypherData);
937 }
938 
939 
940 
954 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
955 {
956  /* Re-initialize AES IP with proper parameters */
957  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
958  {
959  return HAL_ERROR;
960  }
961  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
962  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
963  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
964  if (HAL_CRYP_Init(hcryp) != HAL_OK)
965  {
966  return HAL_ERROR;
967  }
968 
969  return HAL_CRYPEx_AES_DMA(hcryp, pPlainData, Size, pCypherData);
970 }
971 
985 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
986 {
987  /* Re-initialize AES IP with proper parameters */
988  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
989  {
990  return HAL_ERROR;
991  }
992  hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
993  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
994  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
995  if (HAL_CRYP_Init(hcryp) != HAL_OK)
996  {
997  return HAL_ERROR;
998  }
999 
1000  return HAL_CRYPEx_AES_DMA(hcryp, pPlainData, Size, pCypherData);
1001 }
1002 
1016 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
1017 {
1018  /* Re-initialize AES IP with proper parameters */
1019  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
1020  {
1021  return HAL_ERROR;
1022  }
1023  hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
1024  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
1025  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
1026  if (HAL_CRYP_Init(hcryp) != HAL_OK)
1027  {
1028  return HAL_ERROR;
1029  }
1030 
1031  return HAL_CRYPEx_AES_DMA(hcryp, pCypherData, Size, pPlainData);
1032 }
1033 
1047 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
1048 {
1049  /* Re-initialize AES IP with proper parameters */
1050  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
1051  {
1052  return HAL_ERROR;
1053  }
1054  hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
1055  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
1056  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
1057  if (HAL_CRYP_Init(hcryp) != HAL_OK)
1058  {
1059  return HAL_ERROR;
1060  }
1061 
1062  return HAL_CRYPEx_AES_DMA(hcryp, pCypherData, Size, pPlainData);
1063 }
1064 
1078 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
1079 {
1080  /* Re-initialize AES IP with proper parameters */
1081  if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
1082  {
1083  return HAL_ERROR;
1084  }
1085  hcryp->Init.OperatingMode = CRYP_ALGOMODE_DECRYPT;
1086  hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
1087  hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
1088  if (HAL_CRYP_Init(hcryp) != HAL_OK)
1089  {
1090  return HAL_ERROR;
1091  }
1092 
1093  return HAL_CRYPEx_AES_DMA(hcryp, pCypherData, Size, pPlainData);
1094 }
1095 
1096 
1124 {
1125  /* Prevent unused argument(s) compilation warning */
1126  UNUSED(hcryp);
1127 
1128  /* NOTE : This function should not be modified; when the callback is needed,
1129  the HAL_CRYP_ErrorCallback can be implemented in the user file
1130  */
1131 }
1132 
1140 {
1141  /* Prevent unused argument(s) compilation warning */
1142  UNUSED(hcryp);
1143 
1144  /* NOTE : This function should not be modified; when the callback is needed,
1145  the HAL_CRYP_InCpltCallback can be implemented in the user file
1146  */
1147 }
1148 
1156 {
1157  /* Prevent unused argument(s) compilation warning */
1158  UNUSED(hcryp);
1159 
1160  /* NOTE : This function should not be modified; when the callback is needed,
1161  the HAL_CRYP_OutCpltCallback can be implemented in the user file
1162  */
1163 }
1164 
1165 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
1166 
1182 {
1183  HAL_StatusTypeDef status = HAL_OK;
1184 
1185  if(pCallback == NULL)
1186  {
1187  /* Update the error code */
1188  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1189  return HAL_ERROR;
1190  }
1191  /* Process locked */
1192  __HAL_LOCK(hcryp);
1193 
1194  if(HAL_CRYP_STATE_READY == hcryp->State)
1195  {
1196  switch (CallbackID)
1197  {
1199  hcryp->InCpltCallback = pCallback;
1200  break;
1201 
1203  hcryp->OutCpltCallback = pCallback;
1204  break;
1205 
1207  hcryp->CompCpltCallback = pCallback;
1208  break;
1209 
1210  case HAL_CRYP_ERROR_CB_ID :
1211  hcryp->ErrorCallback = pCallback;
1212  break;
1213 
1214  case HAL_CRYP_MSPINIT_CB_ID :
1215  hcryp->MspInitCallback = pCallback;
1216  break;
1217 
1219  hcryp->MspDeInitCallback = pCallback;
1220  break;
1221 
1222  default :
1223  /* Update the error code */
1224  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1225  /* update return status */
1226  status = HAL_ERROR;
1227  break;
1228  }
1229  }
1230  else if(HAL_CRYP_STATE_RESET == hcryp->State)
1231  {
1232  switch (CallbackID)
1233  {
1234  case HAL_CRYP_MSPINIT_CB_ID :
1235  hcryp->MspInitCallback = pCallback;
1236  break;
1237 
1239  hcryp->MspDeInitCallback = pCallback;
1240  break;
1241 
1242  default :
1243  /* Update the error code */
1244  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1245  /* update return status */
1246  status = HAL_ERROR;
1247  break;
1248  }
1249  }
1250  else
1251  {
1252  /* Update the error code */
1253  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1254  /* update return status */
1255  status = HAL_ERROR;
1256  }
1257 
1258  /* Release Lock */
1259  __HAL_UNLOCK(hcryp);
1260  return status;
1261 }
1262 
1278 {
1279 HAL_StatusTypeDef status = HAL_OK;
1280 
1281  /* Process locked */
1282  __HAL_LOCK(hcryp);
1283 
1284  if(HAL_CRYP_STATE_READY == hcryp->State)
1285  {
1286  switch (CallbackID)
1287  {
1289  hcryp->InCpltCallback = HAL_CRYP_InCpltCallback; /* Legacy weak (surcharged) input DMA transfer completion callback */
1290  break;
1291 
1293  hcryp->OutCpltCallback = HAL_CRYP_OutCpltCallback; /* Legacy weak (surcharged) output DMA transfer completion callback */
1294  break;
1295 
1297  hcryp->CompCpltCallback = HAL_CRYPEx_ComputationCpltCallback; /* Legacy weak (surcharged) computation completion callback */
1298  break;
1299 
1300  case HAL_CRYP_ERROR_CB_ID :
1301  hcryp->ErrorCallback = HAL_CRYP_ErrorCallback; /* Legacy weak (surcharged) error callback */
1302  break;
1303 
1304  case HAL_CRYP_MSPINIT_CB_ID :
1305  hcryp->MspInitCallback = HAL_CRYP_MspInit; /* Legacy weak (surcharged) Msp DeInit */
1306  break;
1307 
1309  hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit; /* Legacy weak (surcharged) Msp DeInit */
1310  break;
1311 
1312  default :
1313  /* Update the error code */
1314  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1315  /* update return status */
1316  status = HAL_ERROR;
1317  break;
1318  }
1319  }
1320  else if(HAL_CRYP_STATE_RESET == hcryp->State)
1321  {
1322  switch (CallbackID)
1323  {
1324  case HAL_CRYP_MSPINIT_CB_ID :
1325  hcryp->MspInitCallback = HAL_CRYP_MspInit; /* Legacy weak (surcharged) Msp Init */
1326  break;
1327 
1329  hcryp->MspDeInitCallback = HAL_CRYP_MspDeInit; /* Legacy weak (surcharged) Msp DeInit */
1330  break;
1331 
1332  default :
1333  /* Update the error code */
1334  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1335  /* update return status */
1336  status = HAL_ERROR;
1337  break;
1338  }
1339  }
1340  else
1341  {
1342  /* Update the error code */
1343  hcryp->ErrorCode |= HAL_CRYP_ERROR_INVALID_CALLBACK;
1344  /* update return status */
1345  status = HAL_ERROR;
1346  }
1347 
1348  /* Release Lock */
1349  __HAL_UNLOCK(hcryp);
1350  return status;
1351 }
1352 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
1353 
1378 {
1379  /* Check if error occurred */
1380  if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_ERRIE) != RESET)
1381  {
1382  /* If Write Error occurred */
1383  if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_WRERR) != RESET)
1384  {
1385  hcryp->ErrorCode |= HAL_CRYP_WRITE_ERROR;
1386  hcryp->State = HAL_CRYP_STATE_ERROR;
1387  }
1388  /* If Read Error occurred */
1389  if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_RDERR) != RESET)
1390  {
1391  hcryp->ErrorCode |= HAL_CRYP_READ_ERROR;
1392  hcryp->State = HAL_CRYP_STATE_ERROR;
1393  }
1394 
1395  /* If an error has been reported */
1396  if (hcryp->State == HAL_CRYP_STATE_ERROR)
1397  {
1398  /* Disable Error and Computation Complete Interrupts */
1399  __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
1400  /* Clear all Interrupt flags */
1401  __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_ERR_CLEAR|CRYP_CCF_CLEAR);
1402 
1403  /* Process Unlocked */
1404  __HAL_UNLOCK(hcryp);
1405 
1406 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
1407  hcryp->ErrorCallback(hcryp);
1408 #else
1409  HAL_CRYP_ErrorCallback(hcryp);
1410 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
1411 
1412  return;
1413  }
1414 
1415  }
1416 
1417  /* Check if computation complete interrupt is enabled
1418  and if the computation complete flag is raised */
1419  if (__HAL_CRYP_GET_FLAG(hcryp, CRYP_IT_CCF) != RESET)
1420  {
1421  if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_CCFIE) != RESET)
1422  {
1423 #if defined(AES_CR_NPBLB)
1424  if ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
1425  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CCM))
1426 #else
1427  if ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
1428  || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC))
1429 #endif
1430  {
1431  /* To ensure proper suspension requests management, CCF flag
1432  is reset in CRYP_AES_Auth_IT() according to the current
1433  phase under handling */
1434  if (CRYP_AES_Auth_IT(hcryp) != HAL_OK)
1435  {
1436 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
1437  hcryp->ErrorCallback(hcryp);
1438 #else
1439  HAL_CRYP_ErrorCallback(hcryp);
1440 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
1441  }
1442  }
1443  else
1444  {
1445  /* Clear Computation Complete Flag */
1446  __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CCF_CLEAR);
1447  if (CRYP_AES_IT(hcryp) != HAL_OK)
1448  {
1449 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
1450  hcryp->ErrorCallback(hcryp);
1451 #else
1452  HAL_CRYP_ErrorCallback(hcryp);
1453 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
1454  }
1455  }
1456  }
1457  }
1458 }
1459 
1485 {
1486  /* Return CRYP handle state */
1487  return hcryp->State;
1488 }
1489 
1498 {
1499  return hcryp->ErrorCode;
1500 }
1501 
1521 static HAL_StatusTypeDef CRYP_SetKey(CRYP_HandleTypeDef *hcryp)
1522 {
1523  uint32_t keyaddr;
1524 
1525  if (hcryp->Init.pKey == NULL)
1526  {
1527  return HAL_ERROR;
1528  }
1529 
1530 
1531  keyaddr = (uint32_t)(hcryp->Init.pKey);
1532 
1533  if (hcryp->Init.KeySize == CRYP_KEYSIZE_256B)
1534  {
1535  hcryp->Instance->KEYR7 = __REV(*(uint32_t*)(keyaddr));
1536  keyaddr+=4U;
1537  hcryp->Instance->KEYR6 = __REV(*(uint32_t*)(keyaddr));
1538  keyaddr+=4U;
1539  hcryp->Instance->KEYR5 = __REV(*(uint32_t*)(keyaddr));
1540  keyaddr+=4U;
1541  hcryp->Instance->KEYR4 = __REV(*(uint32_t*)(keyaddr));
1542  keyaddr+=4U;
1543  }
1544 
1545  hcryp->Instance->KEYR3 = __REV(*(uint32_t*)(keyaddr));
1546  keyaddr+=4U;
1547  hcryp->Instance->KEYR2 = __REV(*(uint32_t*)(keyaddr));
1548  keyaddr+=4U;
1549  hcryp->Instance->KEYR1 = __REV(*(uint32_t*)(keyaddr));
1550  keyaddr+=4U;
1551  hcryp->Instance->KEYR0 = __REV(*(uint32_t*)(keyaddr));
1552 
1553  return HAL_OK;
1554 }
1555 
1562 static HAL_StatusTypeDef CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp)
1563 {
1564  uint32_t ivaddr;
1565 
1566 #if !defined(AES_CR_NPBLB)
1567  if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)
1568  {
1569  hcryp->Instance->IVR3 = 0;
1570  hcryp->Instance->IVR2 = 0;
1571  hcryp->Instance->IVR1 = 0;
1572  hcryp->Instance->IVR0 = 0;
1573  }
1574  else
1575 #endif
1576  {
1577  if (hcryp->Init.pInitVect == NULL)
1578  {
1579  return HAL_ERROR;
1580  }
1581 
1582  ivaddr = (uint32_t)(hcryp->Init.pInitVect);
1583 
1584  hcryp->Instance->IVR3 = __REV(*(uint32_t*)(ivaddr));
1585  ivaddr+=4U;
1586  hcryp->Instance->IVR2 = __REV(*(uint32_t*)(ivaddr));
1587  ivaddr+=4U;
1588  hcryp->Instance->IVR1 = __REV(*(uint32_t*)(ivaddr));
1589  ivaddr+=4U;
1590  hcryp->Instance->IVR0 = __REV(*(uint32_t*)(ivaddr));
1591  }
1592  return HAL_OK;
1593 }
1594 
1595 
1596 
1605 static HAL_StatusTypeDef CRYP_AES_IT(CRYP_HandleTypeDef *hcryp)
1606 {
1607  uint32_t inputaddr;
1608  uint32_t outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
1609 
1610  if(hcryp->State == HAL_CRYP_STATE_BUSY)
1611  {
1612  if (hcryp->Init.OperatingMode != CRYP_ALGOMODE_KEYDERIVATION)
1613  {
1614  /* Read the last available output block from the Data Output Register */
1615  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1616  outputaddr+=4U;
1617  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1618  outputaddr+=4U;
1619  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1620  outputaddr+=4U;
1621  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1622  hcryp->pCrypOutBuffPtr += 16;
1623  hcryp->CrypOutCount -= 16U;
1624 
1625  }
1626  else
1627  {
1628  /* Read the derived key from the Key registers */
1629  if (hcryp->Init.KeySize == CRYP_KEYSIZE_256B)
1630  {
1631  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR7);
1632  outputaddr+=4U;
1633  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR6);
1634  outputaddr+=4U;
1635  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR5);
1636  outputaddr+=4U;
1637  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR4);
1638  outputaddr+=4U;
1639  }
1640 
1641  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR3);
1642  outputaddr+=4U;
1643  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR2);
1644  outputaddr+=4U;
1645  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR1);
1646  outputaddr+=4U;
1647  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR0);
1648  }
1649 
1650  /* In case of ciphering or deciphering, check if all output text has been retrieved;
1651  In case of key derivation, stop right there */
1652  if ((hcryp->CrypOutCount == 0U) || (hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION))
1653  {
1654  /* Disable Computation Complete Flag and Errors Interrupts */
1655  __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
1656  /* Change the CRYP state */
1657  hcryp->State = HAL_CRYP_STATE_READY;
1658 
1659  /* Process Unlocked */
1660  __HAL_UNLOCK(hcryp);
1661 
1662  /* Call computation complete callback */
1663 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
1664  hcryp->CompCpltCallback(hcryp);
1665 #else
1667 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
1668 
1669  return HAL_OK;
1670  }
1671  /* If suspension flag has been raised, suspend processing */
1672  else if (hcryp->SuspendRequest == HAL_CRYP_SUSPEND)
1673  {
1674  /* reset ModeSuspend */
1676 
1677  /* Disable Computation Complete Flag and Errors Interrupts */
1678  __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
1679  /* Change the CRYP state */
1681 
1682  /* Process Unlocked */
1683  __HAL_UNLOCK(hcryp);
1684 
1685  return HAL_OK;
1686  }
1687  else /* Process the rest of input data */
1688  {
1689  /* Get the Intput data address */
1690  inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
1691 
1692  /* Increment/decrement instance pointer/counter */
1693  hcryp->pCrypInBuffPtr += 16;
1694  hcryp->CrypInCount -= 16U;
1695 
1696  /* Write the next input block in the Data Input register */
1697  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1698  inputaddr+=4U;
1699  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1700  inputaddr+=4U;
1701  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1702  inputaddr+=4U;
1703  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1704 
1705  return HAL_OK;
1706  }
1707  }
1708  else
1709  {
1710  return HAL_BUSY;
1711  }
1712 }
1713 
1714 
1715 
1716 
1731 #endif /* AES */
1732 
1733 #endif /* HAL_CRYP_MODULE_ENABLED */
1734 
1735 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
Return the CRYP handle state.
void(* ErrorCallback)(struct __CRYP_HandleTypeDef *hcryp)
__IO HAL_CRYP_STATETypeDef State
HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
Decrypt pCypherData in AES CTR decryption mode using DMA, the decyphered data are available in pPlain...
HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
Decrypt pCypherData in AES CTR decryption mode using Interrupt, the decyphered data are available in ...
HAL_CRYP_CallbackIDTypeDef
HAL CRYP common Callback ID enumeration definition.
void(* MspInitCallback)(struct __CRYP_HandleTypeDef *hcryp)
This file contains all the functions prototypes for the HAL module driver.
HAL_CRYP_STATETypeDef
HAL CRYP State structures definition.
HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
Encrypt pPlainData in AES CBC encryption mode using DMA, the cypher data are available in pCypherData...
HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
Decrypt pCypherData in AES ECB decryption mode using Interrupt, the decyphered data are available in ...
HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
DeInitialize the CRYP peripheral.
HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
Encrypt pPlainData in AES CBC encryption mode with key derivation. The cypher data are available in p...
void(* OutCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
Encrypt pPlainData in AES CTR encryption mode using Interrupt, the cypher data are available in pCyph...
HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
Encrypt pPlainData in AES ECB encryption mode. The cypher data are available in pCypherData.
void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
Initialize the CRYP MSP.
void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
Output DMA transfer complete callback.
__HAL_UNLOCK(hrtc)
HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
Decrypt pCypherData in AES ECB decryption mode with key derivation, the decyphered data are available...
static HAL_StatusTypeDef CRYP_AES_IT(CRYP_HandleTypeDef *hcryp)
Handle CRYP block input/output data handling under interruption.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp)
Handle CRYP block input/output data handling under interruption for GCM, GMAC, CCM or CMAC chaining m...
__HAL_LOCK(hrtc)
HAL_SuspendTypeDef SuspendRequest
HAL_StatusTypeDef HAL_CRYPEx_AES(CRYP_HandleTypeDef *hcryp, uint8_t *pInputData, uint16_t Size, uint8_t *pOutputData, uint32_t Timeout)
Carry out in polling mode the ciphering or deciphering operation according to hcryp->Init structure f...
HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
Encrypt pPlainData in AES ECB encryption mode using DMA, the cypher data are available in pCypherData...
static HAL_StatusTypeDef CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp)
Write the InitVector/InitCounter in IVRx registers.
CRYP handle Structure definition.
return HAL_OK
static HAL_StatusTypeDef CRYP_SetKey(CRYP_HandleTypeDef *hcryp)
Write the Key in KeyRx registers.
HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
Decrypt pCypherData in AES CBC decryption mode using Interrupt, the decyphered data are available in ...
HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
Encrypt pPlainData in AES CTR encryption mode. The cypher data are available in pCypherData.
void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
CRYP error callback.
HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
Encrypt pPlainData in AES ECB encryption mode using Interrupt, the cypher data are available in pCyph...
void(* CompCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
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 (surcharged) predefined callback...
void(* InCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
Decrypt pCypherData in AES CBC decryption mode using DMA, the decyphered data are available in pPlain...
void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
DeInitialize CRYP MSP.
void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
Input DMA transfer complete callback.
HAL_PhaseTypeDef Phase
HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
Decrypt pCypherData in AES ECB decryption mode with key derivation, the decyphered data are available...
HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
Initialize the CRYP according to the specified parameters in the CRYP_InitTypeDef and initialize the ...
uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp)
Return the CRYP peripheral error.
__weak void HAL_CRYPEx_ComputationCpltCallback(CRYP_HandleTypeDef *hcryp)
Computation completed callbacks.
HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
Decrypt pCypherData in AES ECB decryption mode using DMA, the decyphered data are available in pPlain...
void(* pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef *hcryp)
HAL CRYP Callback pointer definition.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
Encrypt pPlainData in AES CTR encryption mode using DMA, the cypher data are available in pCypherData...
HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
Decrypt pCypherData in AES CTR decryption mode, the decyphered data are available in pPlainData...
HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID)
Unregister a CRYP Callback CRYP Callback is redirected to the weak (surcharged) predefined callback...
HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
Encrypt pPlainData in AES CBC encryption mode using Interrupt, the cypher data are available in pCyph...
HAL_StatusTypeDef HAL_CRYPEx_AES_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pInputData, uint16_t Size, uint8_t *pOutputData)
Carry out in interrupt mode the ciphering or deciphering operation according to hcryp->Init structure...
HAL_StatusTypeDef HAL_CRYPEx_AES_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pInputData, uint16_t Size, uint8_t *pOutputData)
Carry out in DMA mode the ciphering or deciphering operation according to hcryp->Init structure field...
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
Handle AES interrupt request.
void(* MspDeInitCallback)(struct __CRYP_HandleTypeDef *hcryp)