222#ifdef HAL_HASH_MODULE_ENABLED
233#define HASH_DIGEST_CALCULATION_NOT_STARTED ((uint32_t)0x00000000U)
234#define HASH_DIGEST_CALCULATION_STARTED ((uint32_t)0x00000001U)
242#define HASH_NUMBER_OF_CSR_REGISTERS 54U
250#define HASH_TIMEOUTVALUE 1000U
258#define HASH_DMA_SUSPENSION_WORDS_LIMIT 20U
275static void HASH_GetDigest(
const uint8_t *pMsgDigest, uint8_t Size);
276static HAL_StatusTypeDef HASH_WaitOnFlagUntilTimeout(HASH_HandleTypeDef *hhash, uint32_t Flag, FlagStatus Status,
278static HAL_StatusTypeDef HASH_WriteData(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size);
280static uint32_t HASH_Write_Block_Data(HASH_HandleTypeDef *hhash);
281static HAL_StatusTypeDef HMAC_Processing(HASH_HandleTypeDef *hhash, uint32_t Timeout);
339#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
340 if (hhash->State == HAL_HASH_STATE_RESET)
346 hhash->InCpltCallback = HAL_HASH_InCpltCallback;
347 hhash->DgstCpltCallback = HAL_HASH_DgstCpltCallback;
349 hhash->ErrorCallback = HAL_HASH_ErrorCallback;
350 if (hhash->MspInitCallback == NULL)
352 hhash->MspInitCallback = HAL_HASH_MspInit;
356 hhash->MspInitCallback(hhash);
359 if (hhash->State == HAL_HASH_STATE_RESET)
365 HAL_HASH_MspInit(hhash);
370 hhash->State = HAL_HASH_STATE_BUSY;
373 hhash->HashInCount = 0;
374 hhash->HashBuffSize = 0;
375 hhash->HashITCounter = 0;
376 hhash->NbWordsAlreadyPushed = 0;
378 hhash->DigestCalculationDisable = RESET;
380 hhash->Phase = HAL_HASH_PHASE_READY;
382 hhash->SuspendRequest = HAL_HASH_SUSPEND_NONE;
385 MODIFY_REG(HASH->CR, HASH_CR_DATATYPE, hhash->Init.DataType);
386#if defined(HASH_CR_MDMAT)
388 __HAL_HASH_RESET_MDMAT();
394 hhash->State = HAL_HASH_STATE_READY;
397 hhash->ErrorCode = HAL_HASH_ERROR_NONE;
417 hhash->State = HAL_HASH_STATE_BUSY;
420 hhash->Phase = HAL_HASH_PHASE_READY;
423 hhash->HashInCount = 0;
424 hhash->HashBuffSize = 0;
425 hhash->HashITCounter = 0;
427 hhash->DigestCalculationDisable = RESET;
429#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
430 if (hhash->MspDeInitCallback == NULL)
432 hhash->MspDeInitCallback = HAL_HASH_MspDeInit;
436 hhash->MspDeInitCallback(hhash);
439 HAL_HASH_MspDeInit(hhash);
447 hhash->State = HAL_HASH_STATE_RESET;
450 hhash->ErrorCode = HAL_HASH_ERROR_NONE;
453 hhash->Accumulation = 0U;
464__weak
void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash)
479__weak
void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash)
500__weak
void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash)
517__weak
void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash)
534__weak
void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash)
544#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
559HAL_StatusTypeDef HAL_HASH_RegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID,
560 pHASH_CallbackTypeDef pCallback)
564 if (pCallback == NULL)
567 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
573 if (HAL_HASH_STATE_READY == hhash->State)
577 case HAL_HASH_INPUTCPLT_CB_ID :
578 hhash->InCpltCallback = pCallback;
581 case HAL_HASH_DGSTCPLT_CB_ID :
582 hhash->DgstCpltCallback = pCallback;
585 case HAL_HASH_ERROR_CB_ID :
586 hhash->ErrorCallback = pCallback;
589 case HAL_HASH_MSPINIT_CB_ID :
590 hhash->MspInitCallback = pCallback;
593 case HAL_HASH_MSPDEINIT_CB_ID :
594 hhash->MspDeInitCallback = pCallback;
599 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
605 else if (HAL_HASH_STATE_RESET == hhash->State)
609 case HAL_HASH_MSPINIT_CB_ID :
610 hhash->MspInitCallback = pCallback;
613 case HAL_HASH_MSPDEINIT_CB_ID :
614 hhash->MspDeInitCallback = pCallback;
619 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
628 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
651HAL_StatusTypeDef HAL_HASH_UnRegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID)
658 if (HAL_HASH_STATE_READY == hhash->State)
662 case HAL_HASH_INPUTCPLT_CB_ID :
663 hhash->InCpltCallback = HAL_HASH_InCpltCallback;
666 case HAL_HASH_DGSTCPLT_CB_ID :
667 hhash->DgstCpltCallback = HAL_HASH_DgstCpltCallback;
671 case HAL_HASH_ERROR_CB_ID :
672 hhash->ErrorCallback = HAL_HASH_ErrorCallback;
675 case HAL_HASH_MSPINIT_CB_ID :
676 hhash->MspInitCallback = HAL_HASH_MspInit;
679 case HAL_HASH_MSPDEINIT_CB_ID :
680 hhash->MspDeInitCallback = HAL_HASH_MspDeInit;
685 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
691 else if (HAL_HASH_STATE_RESET == hhash->State)
695 case HAL_HASH_MSPINIT_CB_ID :
696 hhash->MspInitCallback = HAL_HASH_MspInit;
699 case HAL_HASH_MSPDEINIT_CB_ID :
700 hhash->MspDeInitCallback = HAL_HASH_MspDeInit;
705 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
714 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
769HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
773 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
796HAL_StatusTypeDef HAL_HASH_MD5_Accmlt(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
798 return HASH_Accumulate(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
811HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
812 uint8_t *pOutBuffer, uint32_t Timeout)
814 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
828HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
832 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
855HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
857 return HASH_Accumulate(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
870HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
871 uint8_t *pOutBuffer, uint32_t Timeout)
873 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
918HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
921 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
942HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
944 return HASH_Accumulate_IT(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
956HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
959 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
972HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
975 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
997HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
999 return HASH_Accumulate_IT(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1011HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
1012 uint8_t *pOutBuffer)
1014 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
1026void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash)
1028 hhash->Status = HASH_IT(hhash);
1029 if (hhash->Status !=
HAL_OK)
1031 hhash->ErrorCode |= HAL_HASH_ERROR_IT;
1032#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1033 hhash->ErrorCallback(hhash);
1035 HAL_HASH_ErrorCallback(hhash);
1084HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
1086 return HASH_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
1099HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
1101 return HASH_Finish(hhash, pOutBuffer, Timeout);
1114HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
1116 return HASH_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1130HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
1132 return HASH_Finish(hhash, pOutBuffer, Timeout);
1171HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
1172 uint8_t *pOutBuffer,
1175 return HMAC_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
1191HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
1192 uint8_t *pOutBuffer,
1195 return HMAC_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
1234HAL_StatusTypeDef HAL_HMAC_MD5_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
1235 uint8_t *pOutBuffer)
1237 return HMAC_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
1252HAL_StatusTypeDef HAL_HMAC_SHA1_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
1253 uint8_t *pOutBuffer)
1255 return HMAC_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
1305HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
1307 return HMAC_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
1330HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
1332 return HMAC_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1377HAL_HASH_StateTypeDef HAL_HASH_GetState(
const HASH_HandleTypeDef *hhash)
1379 return hhash->State;
1392 return hhash->Status;
1408void HAL_HASH_ContextSaving(
const HASH_HandleTypeDef *hhash,
const uint8_t *pMemBuffer)
1410 uint32_t mem_ptr = (uint32_t)pMemBuffer;
1411 uint32_t csr_ptr = (uint32_t)HASH->CSR;
1418 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->IMR, HASH_IT_DINI | HASH_IT_DCI);
1421 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->STR, HASH_STR_NBLW);
1424#if defined(HASH_CR_MDMAT)
1425 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->CR, HASH_CR_DMAE | HASH_CR_DATATYPE | HASH_CR_MODE | HASH_CR_ALGO |
1426 HASH_CR_LKEY | HASH_CR_MDMAT);
1428 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->CR, HASH_CR_DMAE | HASH_CR_DATATYPE | HASH_CR_MODE | HASH_CR_ALGO |
1433 for (i = HASH_NUMBER_OF_CSR_REGISTERS; i > 0U; i--)
1435 *(uint32_t *)(mem_ptr) = *(uint32_t *)(csr_ptr);
1454void HAL_HASH_ContextRestoring(HASH_HandleTypeDef *hhash,
const uint8_t *pMemBuffer)
1456 uint32_t mem_ptr = (uint32_t)pMemBuffer;
1457 uint32_t csr_ptr = (uint32_t)HASH->CSR;
1464 WRITE_REG(HASH->IMR, (*(uint32_t *)(mem_ptr)));
1467 WRITE_REG(HASH->STR, (*(uint32_t *)(mem_ptr)));
1470 WRITE_REG(HASH->CR, (*(uint32_t *)(mem_ptr)));
1478 for (i = HASH_NUMBER_OF_CSR_REGISTERS; i > 0U; i--)
1480 WRITE_REG((*(uint32_t *)(csr_ptr)), (*(uint32_t *)(mem_ptr)));
1497void HAL_HASH_SwFeed_ProcessSuspend(HASH_HandleTypeDef *hhash)
1500 hhash->SuspendRequest = HAL_HASH_SUSPEND;
1514 uint32_t tmp_remaining_DMATransferSize_inWords;
1515 uint32_t tmp_initial_DMATransferSize_inWords;
1516 uint32_t tmp_words_already_pushed;
1518 if (hhash->State == HAL_HASH_STATE_READY)
1526 tmp_remaining_DMATransferSize_inWords = ((DMA_Stream_TypeDef *)hhash->hdmain->Instance)->NDTR;
1528 if (tmp_remaining_DMATransferSize_inWords <= HASH_DMA_SUSPENSION_WORDS_LIMIT)
1536 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) !=
HAL_OK)
1541 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET)
1547 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, RESET, HASH_TIMEOUTVALUE) !=
HAL_OK)
1563 CLEAR_BIT(HASH->CR, HASH_CR_DMAE);
1566 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) !=
HAL_OK)
1571 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET)
1578 tmp_remaining_DMATransferSize_inWords = ((DMA_Stream_TypeDef *)hhash->hdmain->Instance)->NDTR;
1580 if (tmp_remaining_DMATransferSize_inWords == 0U)
1597 tmp_initial_DMATransferSize_inWords = (((hhash->HashInCount % 4U) != 0U) ? \
1598 ((hhash->HashInCount + 3U) / 4U) : (hhash->HashInCount / 4U));
1604 tmp_words_already_pushed = hhash->NbWordsAlreadyPushed;
1605 if (((tmp_words_already_pushed + tmp_initial_DMATransferSize_inWords - \
1606 tmp_remaining_DMATransferSize_inWords) % 16U) != HASH_NBW_PUSHED())
1608 tmp_remaining_DMATransferSize_inWords--;
1613 hhash->pHashInBuffPtr += 4U * (tmp_initial_DMATransferSize_inWords - tmp_remaining_DMATransferSize_inWords) ;
1616 hhash->HashInCount = 4U * tmp_remaining_DMATransferSize_inWords;
1621 hhash->State = HAL_HASH_STATE_SUSPENDED;
1633uint32_t HAL_HASH_GetError(
const HASH_HandleTypeDef *hhash)
1636 return hhash->ErrorCode;
1660 HASH_HandleTypeDef *hhash = (HASH_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1662 uint32_t buffersize;
1665 if (hhash->State != HAL_HASH_STATE_SUSPENDED)
1669 CLEAR_BIT(HASH->CR, HASH_CR_DMAE);
1671 if (READ_BIT(HASH->CR, HASH_CR_MODE) == 0U)
1676 hhash->State = HAL_HASH_STATE_READY;
1679#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1680 hhash->InCpltCallback(hhash);
1682 HAL_HASH_InCpltCallback(hhash);
1693 if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_3)
1698 hhash->State = HAL_HASH_STATE_READY;
1703#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1704 hhash->InCpltCallback(hhash);
1706 HAL_HASH_InCpltCallback(hhash);
1711 else if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_1)
1713 inputaddr = (uint32_t)hhash->pHashMsgBuffPtr;
1714 buffersize = hhash->HashBuffSize;
1715 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_2;
1718 hhash->HashInCount = hhash->HashBuffSize;
1719 hhash->pHashInBuffPtr = hhash->pHashMsgBuffPtr ;
1721 hhash->NbWordsAlreadyPushed = 0U;
1722#if defined(HASH_CR_MDMAT)
1724 if (hhash->DigestCalculationDisable != RESET)
1728 __HAL_HASH_SET_MDMAT();
1734 if (hhash->DigestCalculationDisable != RESET)
1741 hhash->State = HAL_HASH_STATE_READY;
1742#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1743 hhash->InCpltCallback(hhash);
1745 HAL_HASH_InCpltCallback(hhash);
1753 inputaddr = (uint32_t)hhash->Init.pKey;
1754 buffersize = hhash->Init.KeySize;
1755 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_3;
1757 hhash->HashInCount = hhash->Init.KeySize;
1758 hhash->pHashInBuffPtr = hhash->Init.pKey ;
1760 hhash->NbWordsAlreadyPushed = 0U;
1765 __HAL_HASH_SET_NBVALIDBITS(buffersize);
1768 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
1771 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, \
1772 (((buffersize % 4U) != 0U) ? ((buffersize + (4U - (buffersize % 4U))) / 4U) : \
1773 (buffersize / 4U)));
1776 SET_BIT(HASH->CR, HASH_CR_DMAE);
1782 hhash->State = HAL_HASH_STATE_ERROR;
1787 hhash->State = HAL_HASH_STATE_BUSY;
1804 HASH_HandleTypeDef *hhash = (HASH_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1806 if (hhash->State != HAL_HASH_STATE_SUSPENDED)
1808 hhash->ErrorCode |= HAL_HASH_ERROR_DMA;
1811 hhash->State = HAL_HASH_STATE_READY;
1814#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1815 hhash->ErrorCallback(hhash);
1817 HAL_HASH_ErrorCallback(hhash);
1836static HAL_StatusTypeDef HASH_WriteData(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size)
1838 uint32_t buffercounter;
1839 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
1842 for (buffercounter = 0U; buffercounter < (Size / 4U); buffercounter++)
1845 HASH->DIN = *(uint32_t *)inputaddr;
1850 if ((hhash->SuspendRequest == HAL_HASH_SUSPEND) && (((buffercounter * 4U) + 4U) < Size))
1853 if ((buffercounter * 4U) >= 64U)
1855 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) !=
HAL_OK)
1862 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
1865 hhash->SuspendRequest = HAL_HASH_SUSPEND_NONE;
1869 if ((hhash->Phase == HAL_HASH_PHASE_PROCESS) || (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_2))
1872 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
1874 hhash->HashInCount = Size - ((buffercounter * 4U) + 4U);
1876 else if ((hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_1) || (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_3))
1879 hhash->pHashKeyBuffPtr = (uint8_t *)inputaddr;
1881 hhash->HashKeyCount = Size - ((buffercounter * 4U) + 4U);
1886 hhash->State = HAL_HASH_STATE_READY;
1892 hhash->State = HAL_HASH_STATE_SUSPENDED;
1901 if ((Size % 4U) != 0U)
1903 if (hhash->Init.DataType == HASH_DATATYPE_16B)
1907 if ((Size % 4U) <= 2U)
1909 HASH->DIN = (uint32_t) * (uint16_t *)inputaddr;
1911 if ((Size % 4U) == 3U)
1913 HASH->DIN = *(uint32_t *)inputaddr;
1917 else if ((hhash->Init.DataType == HASH_DATATYPE_8B)
1918 || (hhash->Init.DataType == HASH_DATATYPE_1B))
1921 if ((Size % 4U) == 1U)
1923 HASH->DIN = (uint32_t) * (uint8_t *)inputaddr;
1925 if ((Size % 4U) == 2U)
1927 HASH->DIN = (uint32_t) * (uint16_t *)inputaddr;
1929 if ((Size % 4U) == 3U)
1931 tmp = *(uint8_t *)inputaddr;
1932 tmp |= (uint32_t) * (uint8_t *)(inputaddr + 1U) << 8U;
1933 tmp |= (uint32_t) * (uint8_t *)(inputaddr + 2U) << 16U;
1940 HASH->DIN = *(uint32_t *)inputaddr;
1954static void HASH_GetDigest(
const uint8_t *pMsgDigest, uint8_t Size)
1956 uint32_t msgdigest = (uint32_t)pMsgDigest;
1962 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1964 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
1966 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
1968 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
1971 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1973 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
1975 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
1977 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
1979 *(uint32_t *)(msgdigest) = __REV(HASH->HR[4]);
1982 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1984 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
1986 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
1988 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
1990 *(uint32_t *)(msgdigest) = __REV(HASH->HR[4]);
1991#if defined(HASH_CR_MDMAT)
1993 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
1995 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
1999 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
2001 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
2003 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
2005 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
2007 *(uint32_t *)(msgdigest) = __REV(HASH->HR[4]);
2008#if defined(HASH_CR_MDMAT)
2010 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
2012 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
2014 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[7]);
2031static HAL_StatusTypeDef HASH_WaitOnFlagUntilTimeout(HASH_HandleTypeDef *hhash, uint32_t Flag, FlagStatus Status,
2037 if (Status == RESET)
2039 while (__HAL_HASH_GET_FLAG(Flag) == RESET)
2044 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
2047 hhash->State = HAL_HASH_STATE_READY;
2061 while (__HAL_HASH_GET_FLAG(Flag) != RESET)
2066 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
2069 hhash->State = HAL_HASH_STATE_READY;
2096 if (hhash->State == HAL_HASH_STATE_BUSY)
2099 if (hhash->HashITCounter == 0U)
2102 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2105 hhash->State = HAL_HASH_STATE_READY;
2108 else if (hhash->HashITCounter == 1U)
2113 hhash->HashITCounter = 2U;
2119 hhash->HashITCounter = 3U;
2123 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS))
2126 HASH_GetDigest(hhash->pHashOutBuffPtr, HASH_DIGEST_LENGTH());
2129 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2131 hhash->State = HAL_HASH_STATE_READY;
2133 hhash->Phase = HAL_HASH_PHASE_READY;
2135#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
2136 hhash->DgstCpltCallback(hhash);
2138 HAL_HASH_DgstCpltCallback(hhash);
2145 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
2150 if ((hhash->HashInCount != 0U) && (hhash->SuspendRequest == HAL_HASH_SUSPEND))
2153 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2156 hhash->SuspendRequest = HAL_HASH_SUSPEND_NONE;
2159 hhash->State = HAL_HASH_STATE_SUSPENDED;
2166 if (HASH_Write_Block_Data(hhash) == HASH_DIGEST_CALCULATION_STARTED)
2170#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
2171 hhash->InCpltCallback(hhash);
2173 HAL_HASH_InCpltCallback(hhash);
2176 if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_1)
2179 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) !=
HAL_OK)
2182 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2186 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_2;
2187 __HAL_HASH_SET_NBVALIDBITS(hhash->HashBuffSize);
2188 hhash->HashInCount = hhash->HashBuffSize;
2189 hhash->pHashInBuffPtr = hhash->pHashMsgBuffPtr;
2190 hhash->HashITCounter = 1;
2192 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2194 else if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_2)
2197 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) !=
HAL_OK)
2200 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2204 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_3;
2205 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2206 hhash->HashInCount = hhash->Init.KeySize;
2207 hhash->pHashInBuffPtr = hhash->Init.pKey;
2208 hhash->HashITCounter = 1;
2210 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2235static uint32_t HASH_Write_Block_Data(HASH_HandleTypeDef *hhash)
2238 uint32_t buffercounter;
2239 uint32_t inputcounter;
2240 uint32_t ret = HASH_DIGEST_CALCULATION_NOT_STARTED;
2243 if (hhash->HashInCount > 64U)
2245 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2248 for (buffercounter = 0U; buffercounter < 64U; buffercounter += 4U)
2250 HASH->DIN = *(uint32_t *)inputaddr;
2255 if (hhash->HashITCounter == 2U)
2257 HASH->DIN = *(uint32_t *)inputaddr;
2258 if (hhash->HashInCount >= 68U)
2263 hhash->HashInCount -= 68U;
2264 hhash->pHashInBuffPtr += 68U;
2269 hhash->HashInCount = 0U;
2277 hhash->HashInCount -= 64U;
2278 hhash->pHashInBuffPtr += 64U;
2287 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2289 inputcounter = hhash->HashInCount;
2291 __HAL_HASH_DISABLE_IT(HASH_IT_DINI);
2294 for (buffercounter = 0U; buffercounter < ((inputcounter + 3U) / 4U); buffercounter++)
2296 HASH->DIN = *(uint32_t *)inputaddr;
2300 if (hhash->Accumulation == 1U)
2306 hhash->Accumulation = 0U;
2308 hhash->State = HAL_HASH_STATE_READY;
2310#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
2311 hhash->InCpltCallback(hhash);
2313 HAL_HASH_InCpltCallback(hhash);
2319 __HAL_HASH_START_DIGEST();
2324 ret = HASH_DIGEST_CALCULATION_STARTED;
2327 hhash->HashInCount = 0;
2340static HAL_StatusTypeDef HMAC_Processing(HASH_HandleTypeDef *hhash, uint32_t Timeout)
2343 if ((hhash->Phase != HAL_HASH_PHASE_HMAC_STEP_1) && (hhash->Phase != HAL_HASH_PHASE_HMAC_STEP_2)
2344 && (hhash->Phase != HAL_HASH_PHASE_HMAC_STEP_3))
2347 hhash->State = HAL_HASH_STATE_READY;
2357 if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_1)
2361 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2364 hhash->Status = HASH_WriteData(hhash, hhash->pHashKeyBuffPtr, hhash->HashKeyCount);
2365 if (hhash->Status !=
HAL_OK)
2367 return hhash->Status;
2371 if (hhash->State == HAL_HASH_STATE_SUSPENDED)
2381 __HAL_HASH_START_DIGEST();
2384 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, Timeout) !=
HAL_OK)
2390 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_2;
2399 if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_2)
2403 __HAL_HASH_SET_NBVALIDBITS(hhash->HashBuffSize);
2406 hhash->Status = HASH_WriteData(hhash, hhash->pHashInBuffPtr, hhash->HashInCount);
2407 if (hhash->Status !=
HAL_OK)
2409 return hhash->Status;
2413 if (hhash->State == HAL_HASH_STATE_SUSPENDED)
2423 __HAL_HASH_START_DIGEST();
2426 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, Timeout) !=
HAL_OK)
2432 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_3;
2436 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
2437 hhash->HashKeyCount = hhash->Init.KeySize;
2446 if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_3)
2450 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2453 hhash->Status = HASH_WriteData(hhash, hhash->pHashKeyBuffPtr, hhash->HashKeyCount);
2454 if (hhash->Status !=
HAL_OK)
2456 return hhash->Status;
2460 if (hhash->State == HAL_HASH_STATE_SUSPENDED)
2470 __HAL_HASH_START_DIGEST();
2473 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_DCIS, RESET, Timeout) !=
HAL_OK)
2479 HASH_GetDigest(hhash->pHashOutBuffPtr, HASH_DIGEST_LENGTH());
2482 hhash->Phase = HAL_HASH_PHASE_READY;
2486 hhash->State = HAL_HASH_STATE_READY;
2508HAL_StatusTypeDef HASH_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
2509 uint8_t *pOutBuffer,
2510 uint32_t Timeout, uint32_t Algorithm)
2512 const uint8_t *pInBuffer_tmp;
2514 HAL_HASH_StateTypeDef State_tmp = hhash->State;
2518 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
2521 if ((pInBuffer == NULL) || (pOutBuffer == NULL))
2523 hhash->State = HAL_HASH_STATE_READY;
2531 if (hhash->Phase == HAL_HASH_PHASE_READY)
2534 hhash->State = HAL_HASH_STATE_BUSY;
2537 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2540 __HAL_HASH_SET_NBVALIDBITS(Size);
2544 pInBuffer_tmp = (
const uint8_t *)pInBuffer;
2548 hhash->Phase = HAL_HASH_PHASE_PROCESS;
2550 else if (hhash->Phase == HAL_HASH_PHASE_PROCESS)
2555 if (hhash->State == HAL_HASH_STATE_SUSPENDED)
2560 pInBuffer_tmp = (
const uint8_t *)hhash->pHashInBuffPtr;
2561 Size_tmp = hhash->HashInCount;
2568 pInBuffer_tmp = (
const uint8_t *)pInBuffer;
2571 __HAL_HASH_SET_NBVALIDBITS(Size);
2574 hhash->State = HAL_HASH_STATE_BUSY;
2579 hhash->State = HAL_HASH_STATE_READY;
2590 hhash->Status = HASH_WriteData(hhash, pInBuffer_tmp, Size_tmp);
2591 if (hhash->Status !=
HAL_OK)
2593 return hhash->Status;
2597 if (hhash->State != HAL_HASH_STATE_SUSPENDED)
2600 __HAL_HASH_START_DIGEST();
2603 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_DCIS, RESET, Timeout) !=
HAL_OK)
2609 HASH_GetDigest(pOutBuffer, HASH_DIGEST_LENGTH());
2612 hhash->State = HAL_HASH_STATE_READY;
2615 hhash->Phase = HAL_HASH_PHASE_READY;
2646HAL_StatusTypeDef HASH_Accumulate(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
2649 const uint8_t *pInBuffer_tmp;
2651 HAL_HASH_StateTypeDef State_tmp = hhash->State;
2654 if ((Size % 4U) != 0U)
2660 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
2663 if ((pInBuffer == NULL) || (Size == 0U))
2665 hhash->State = HAL_HASH_STATE_READY;
2673 if (hhash->State == HAL_HASH_STATE_SUSPENDED)
2676 hhash->State = HAL_HASH_STATE_BUSY;
2681 pInBuffer_tmp = (
const uint8_t *)hhash->pHashInBuffPtr;
2682 Size_tmp = hhash->HashInCount;
2688 hhash->State = HAL_HASH_STATE_BUSY;
2692 pInBuffer_tmp = (
const uint8_t *)pInBuffer;
2696 if (hhash->Phase == HAL_HASH_PHASE_READY)
2699 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2703 hhash->Phase = HAL_HASH_PHASE_PROCESS;
2708 hhash->Status = HASH_WriteData(hhash, pInBuffer_tmp, Size_tmp);
2709 if (hhash->Status !=
HAL_OK)
2711 return hhash->Status;
2715 if (hhash->State != HAL_HASH_STATE_SUSPENDED)
2718 hhash->State = HAL_HASH_STATE_READY;
2750HAL_StatusTypeDef HASH_Accumulate_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
2753 HAL_HASH_StateTypeDef State_tmp = hhash->State;
2754 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
2755 uint32_t SizeVar = Size;
2758 if ((Size % 4U) != 0U)
2764 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
2767 if ((pInBuffer == NULL) || (Size == 0U))
2769 hhash->State = HAL_HASH_STATE_READY;
2777 if (hhash->State == HAL_HASH_STATE_SUSPENDED)
2780 hhash->State = HAL_HASH_STATE_BUSY;
2785 hhash->State = HAL_HASH_STATE_BUSY;
2788 if (hhash->Phase == HAL_HASH_PHASE_READY)
2791 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2792 hhash->HashITCounter = 1;
2796 hhash->HashITCounter = 3;
2800 hhash->Phase = HAL_HASH_PHASE_PROCESS;
2806 while ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) && (SizeVar > 0U))
2810 HASH->DIN = *(uint32_t *)inputaddr;
2816 if ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) || (SizeVar == 0U))
2819 hhash->State = HAL_HASH_STATE_READY;
2829 hhash->HashInCount = SizeVar;
2831 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2841 hhash->Accumulation = 1U;
2847 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2872HAL_StatusTypeDef HASH_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
2873 uint8_t *pOutBuffer,
2876 HAL_HASH_StateTypeDef State_tmp = hhash->State;
2877 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
2878 uint32_t polling_step = 0U;
2879 uint32_t initialization_skipped = 0U;
2880 uint32_t SizeVar = Size;
2883 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
2886 if ((pInBuffer == NULL) || (Size == 0U) || (pOutBuffer == NULL))
2888 hhash->State = HAL_HASH_STATE_READY;
2896 hhash->State = HAL_HASH_STATE_BUSY;
2899 hhash->HashITCounter = 1;
2902 if (hhash->Phase == HAL_HASH_PHASE_READY)
2905 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2908 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2911 hhash->HashInCount = SizeVar;
2913 hhash->pHashInBuffPtr = pInBuffer;
2920 hhash->pHashOutBuffPtr = pOutBuffer;
2922 else if ((hhash->Phase == HAL_HASH_PHASE_PROCESS) && (SizeVar < 4U))
2924 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
2928 hhash->HashInCount = SizeVar;
2929 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2931 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2932 hhash->pHashOutBuffPtr = pOutBuffer;
2937 initialization_skipped = 1;
2941 hhash->Phase = HAL_HASH_PHASE_PROCESS;
2946 while ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) && (SizeVar > 3U))
2951 HASH->DIN = *(uint32_t *)inputaddr;
2956 if (polling_step == 1U)
2962 hhash->pHashOutBuffPtr = pOutBuffer;
2965 __HAL_HASH_START_DIGEST();
2970 __HAL_HASH_ENABLE_IT(HASH_IT_DCI);
2975 else if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
2980 hhash->HashInCount = SizeVar;
2981 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2983 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2984 hhash->pHashOutBuffPtr = pOutBuffer;
2985 if (initialization_skipped == 1U)
2987 hhash->HashITCounter = 3;
2994 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2995 HASH->DIN = *(uint32_t *)inputaddr;
2998 hhash->pHashOutBuffPtr = pOutBuffer;
2999 __HAL_HASH_START_DIGEST();
3004 __HAL_HASH_ENABLE_IT(HASH_IT_DCI);
3016 __HAL_HASH_ENABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
3044HAL_StatusTypeDef HASH_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
3050 HAL_HASH_StateTypeDef State_tmp = hhash->State;
3052#if defined (HASH_CR_MDMAT)
3058 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
3061 if ((pInBuffer == NULL) || (Size == 0U) ||
3065 ((hhash->Phase != HAL_HASH_PHASE_READY) && (!(IS_HASH_PROCESSING(hhash)))))
3067 hhash->State = HAL_HASH_STATE_READY;
3076 if (hhash->State == HAL_HASH_STATE_READY)
3079 hhash->State = HAL_HASH_STATE_BUSY;
3085 if (hhash->Phase == HAL_HASH_PHASE_READY)
3088 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
3091 hhash->Phase = HAL_HASH_PHASE_PROCESS;
3095 __HAL_HASH_SET_NBVALIDBITS(Size);
3097 inputaddr = (uint32_t)pInBuffer;
3101 hhash->pHashInBuffPtr = pInBuffer;
3102 hhash->HashInCount = Size;
3109 hhash->State = HAL_HASH_STATE_BUSY;
3114 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
3115 inputSize = hhash->HashInCount;
3120 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
3122 hhash->hdmain->XferErrorCallback = HASH_DMAError;
3125 hhash->NbWordsAlreadyPushed = HASH_NBW_PUSHED();
3128 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, \
3129 (((inputSize % 4U) != 0U) ? ((inputSize + (4U - (inputSize % 4U))) / 4U) : \
3133 SET_BIT(HASH->CR, HASH_CR_DMAE);
3142 hhash->State = HAL_HASH_STATE_ERROR;
3161HAL_StatusTypeDef HASH_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
3164 if (hhash->State == HAL_HASH_STATE_READY)
3167 if (pOutBuffer == NULL)
3176 hhash->State = HAL_HASH_STATE_BUSY;
3179 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_DCIS, RESET, Timeout) !=
HAL_OK)
3185 HASH_GetDigest(pOutBuffer, HASH_DIGEST_LENGTH());
3188 hhash->State = HAL_HASH_STATE_READY;
3191 hhash->Phase = HAL_HASH_PHASE_READY;
3222HAL_StatusTypeDef HMAC_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
3223 uint8_t *pOutBuffer,
3224 uint32_t Timeout, uint32_t Algorithm)
3226 HAL_HASH_StateTypeDef State_tmp = hhash->State;
3229 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
3232 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U)
3233 || (pOutBuffer == NULL))
3235 hhash->State = HAL_HASH_STATE_READY;
3243 hhash->State = HAL_HASH_STATE_BUSY;
3246 if (hhash->Phase == HAL_HASH_PHASE_READY)
3249 if (hhash->Init.KeySize > 64U)
3251 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3252 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3256 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3257 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3260 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_1;
3264 hhash->pHashOutBuffPtr = pOutBuffer;
3265 hhash->pHashInBuffPtr = pInBuffer;
3267 hhash->HashInCount = Size;
3269 hhash->HashBuffSize = Size;
3270 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3272 hhash->HashKeyCount = hhash->Init.KeySize;
3277 return HMAC_Processing(hhash, Timeout);
3300HAL_StatusTypeDef HMAC_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
3301 uint8_t *pOutBuffer,
3304 HAL_HASH_StateTypeDef State_tmp = hhash->State;
3307 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
3310 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U)
3311 || (pOutBuffer == NULL))
3313 hhash->State = HAL_HASH_STATE_READY;
3321 hhash->State = HAL_HASH_STATE_BUSY;
3324 hhash->HashITCounter = 1;
3327 if (hhash->Phase == HAL_HASH_PHASE_READY)
3330 if (hhash->Init.KeySize > 64U)
3332 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3333 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3337 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3338 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3344 hhash->HashInCount = hhash->Init.KeySize;
3345 hhash->pHashInBuffPtr = hhash->Init.pKey ;
3349 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3350 hhash->pHashMsgBuffPtr = pInBuffer;
3351 hhash->HashBuffSize = Size;
3352 hhash->pHashOutBuffPtr = pOutBuffer;
3355 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
3358 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_1;
3360 else if ((hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_1) || (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_3))
3365 else if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_2)
3375 hhash->State = HAL_HASH_STATE_READY;
3383 __HAL_HASH_ENABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
3411HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
3417 HAL_HASH_StateTypeDef State_tmp = hhash->State;
3420 assert_param(IS_HMAC_DMA_MULTIBUFFER_SIZE(hhash, Size));
3422 if ((State_tmp == HAL_HASH_STATE_READY) || (State_tmp == HAL_HASH_STATE_SUSPENDED))
3425 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U) ||
3429 ((hhash->Phase != HAL_HASH_PHASE_READY) && (!(IS_HMAC_PROCESSING(hhash)))))
3431 hhash->State = HAL_HASH_STATE_READY;
3440 if (hhash->State == HAL_HASH_STATE_READY)
3443 if (hhash->Phase == HAL_HASH_PHASE_READY)
3446 hhash->State = HAL_HASH_STATE_BUSY;
3447#if defined(HASH_CR_MDMAT)
3450 if (hhash->Init.KeySize > 64U)
3452 MODIFY_REG(HASH->CR, HASH_CR_MDMAT | HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3453 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3457 MODIFY_REG(HASH->CR, HASH_CR_MDMAT | HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3458 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3462 if (hhash->Init.KeySize > 64U)
3464 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3465 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3469 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3470 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3475 hhash->HashInCount = hhash->Init.KeySize;
3476 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3477 hhash->pHashInBuffPtr = hhash->Init.pKey ;
3478 hhash->pHashMsgBuffPtr = pInBuffer;
3479 hhash->HashBuffSize = Size;
3482 inputaddr = (uint32_t)(hhash->Init.pKey);
3483 inputSize = hhash->Init.KeySize;
3486 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
3489 hhash->Phase = HAL_HASH_PHASE_HMAC_STEP_1;
3492 else if (hhash->Phase == HAL_HASH_PHASE_HMAC_STEP_2)
3498 hhash->State = HAL_HASH_STATE_BUSY;
3501 hhash->HashInCount = Size;
3502 hhash->pHashInBuffPtr = pInBuffer;
3505 inputaddr = (uint32_t)pInBuffer;
3508 if (hhash->DigestCalculationDisable == RESET)
3511#if defined(HASH_CR_MDMAT)
3512 __HAL_HASH_RESET_MDMAT();
3514 __HAL_HASH_SET_NBVALIDBITS(inputSize);
3530 hhash->State = HAL_HASH_STATE_BUSY;
3536 inputaddr = (uint32_t)(hhash->pHashInBuffPtr);
3537 inputSize = hhash->HashInCount;
3542 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
3544 hhash->hdmain->XferErrorCallback = HASH_DMAError;
3547 hhash->NbWordsAlreadyPushed = HASH_NBW_PUSHED();
3550 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, \
3551 (((inputSize % 4U) != 0U) ? ((inputSize + (4U - (inputSize % 4U))) / 4U) \
3552 : (inputSize / 4U)));
3555 SET_BIT(HASH->CR, HASH_CR_DMAE);
3564 hhash->State = HAL_HASH_STATE_ERROR;
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition.
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)