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
275 static void HASH_GetDigest(uint8_t *pMsgDigest, uint8_t Size);
276 static HAL_StatusTypeDef HASH_WaitOnFlagUntilTimeout(
HASH_HandleTypeDef *hhash, uint32_t Flag, FlagStatus Status,
278 static HAL_StatusTypeDef HASH_WriteData(
HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
281 static HAL_StatusTypeDef HMAC_Processing(
HASH_HandleTypeDef *hhash, uint32_t Timeout);
337 assert_param(IS_HASH_DATATYPE(hhash->Init.DataType));
339 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
343 hhash->Lock = HAL_UNLOCKED;
350 if (hhash->MspInitCallback == NULL)
356 hhash->MspInitCallback(hhash);
362 hhash->Lock = HAL_UNLOCKED;
373 hhash->HashInCount = 0;
374 hhash->HashBuffSize = 0;
375 hhash->HashITCounter = 0;
376 hhash->NbWordsAlreadyPushed = 0;
378 hhash->DigestCalculationDisable = RESET;
385 MODIFY_REG(HASH->CR, HASH_CR_DATATYPE, hhash->Init.DataType);
386 #if defined(HASH_CR_MDMAT)
388 __HAL_HASH_RESET_MDMAT();
391 hhash->Status = HAL_OK;
397 hhash->ErrorCode = HAL_HASH_ERROR_NONE;
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)
436 hhash->MspDeInitCallback(hhash);
444 hhash->Status = HAL_OK;
450 hhash->ErrorCode = HAL_HASH_ERROR_NONE;
453 hhash->Accumulation = 0U;
544 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
562 HAL_StatusTypeDef status = HAL_OK;
564 if (pCallback == NULL)
567 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
578 hhash->InCpltCallback = pCallback;
582 hhash->DgstCpltCallback = pCallback;
586 hhash->ErrorCallback = pCallback;
590 hhash->MspInitCallback = pCallback;
594 hhash->MspDeInitCallback = pCallback;
599 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
610 hhash->MspInitCallback = pCallback;
614 hhash->MspDeInitCallback = pCallback;
619 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
628 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
653 HAL_StatusTypeDef status = HAL_OK;
685 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
705 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
714 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
772 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
797 return HASH_Accumulate(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
811 uint8_t *pOutBuffer, uint32_t Timeout)
813 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
830 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
855 return HASH_Accumulate(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
869 uint8_t *pOutBuffer, uint32_t Timeout)
871 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
919 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
957 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
973 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
1010 uint8_t *pOutBuffer)
1012 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
1026 hhash->Status = HASH_IT(hhash);
1027 if (hhash->Status != HAL_OK)
1029 hhash->ErrorCode |= HAL_HASH_ERROR_IT;
1030 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1031 hhash->ErrorCallback(hhash);
1036 hhash->Status = HAL_OK;
1084 return HASH_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
1114 return HASH_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1172 return HMAC_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
1191 return HMAC_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
1231 uint8_t *pOutBuffer)
1233 return HMAC_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
1249 uint8_t *pOutBuffer)
1251 return HMAC_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
1304 return HMAC_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
1329 return HMAC_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1376 return hhash->State;
1389 return hhash->Status;
1407 uint32_t mem_ptr = (uint32_t)pMemBuffer;
1408 uint32_t csr_ptr = (uint32_t)HASH->CSR;
1415 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->IMR, HASH_IT_DINI | HASH_IT_DCI);
1418 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->STR, HASH_STR_NBLW);
1421 #if defined(HASH_CR_MDMAT)
1422 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->CR, HASH_CR_DMAE | HASH_CR_DATATYPE | HASH_CR_MODE | HASH_CR_ALGO |
1423 HASH_CR_LKEY | HASH_CR_MDMAT);
1425 *(uint32_t *)(mem_ptr) = READ_BIT(HASH->CR, HASH_CR_DMAE | HASH_CR_DATATYPE | HASH_CR_MODE | HASH_CR_ALGO |
1430 for (i = HASH_NUMBER_OF_CSR_REGISTERS; i > 0U; i--)
1432 *(uint32_t *)(mem_ptr) = *(uint32_t *)(csr_ptr);
1453 uint32_t mem_ptr = (uint32_t)pMemBuffer;
1454 uint32_t csr_ptr = (uint32_t)HASH->CSR;
1461 WRITE_REG(HASH->IMR, (*(uint32_t *)(mem_ptr)));
1464 WRITE_REG(HASH->STR, (*(uint32_t *)(mem_ptr)));
1467 WRITE_REG(HASH->CR, (*(uint32_t *)(mem_ptr)));
1475 for (i = HASH_NUMBER_OF_CSR_REGISTERS; i > 0U; i--)
1477 WRITE_REG((*(uint32_t *)(csr_ptr)), (*(uint32_t *)(mem_ptr)));
1511 uint32_t tmp_remaining_DMATransferSize_inWords;
1512 uint32_t tmp_initial_DMATransferSize_inWords;
1513 uint32_t tmp_words_already_pushed;
1523 tmp_remaining_DMATransferSize_inWords = ((DMA_Stream_TypeDef *)hhash->hdmain->Instance)->NDTR;
1525 if (tmp_remaining_DMATransferSize_inWords <= HASH_DMA_SUSPENSION_WORDS_LIMIT)
1533 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK)
1538 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET)
1544 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, RESET, HASH_TIMEOUTVALUE) != HAL_OK)
1560 CLEAR_BIT(HASH->CR, HASH_CR_DMAE);
1563 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK)
1568 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET)
1575 tmp_remaining_DMATransferSize_inWords = ((DMA_Stream_TypeDef *)hhash->hdmain->Instance)->NDTR;
1577 if (tmp_remaining_DMATransferSize_inWords == 0U)
1594 tmp_initial_DMATransferSize_inWords = (((hhash->HashInCount % 4U) != 0U) ? \
1595 ((hhash->HashInCount + 3U) / 4U) : (hhash->HashInCount / 4U));
1601 tmp_words_already_pushed = hhash->NbWordsAlreadyPushed;
1602 if (((tmp_words_already_pushed + tmp_initial_DMATransferSize_inWords - \
1603 tmp_remaining_DMATransferSize_inWords) % 16U) != HASH_NBW_PUSHED())
1605 tmp_remaining_DMATransferSize_inWords--;
1610 hhash->pHashInBuffPtr += 4U * (tmp_initial_DMATransferSize_inWords - tmp_remaining_DMATransferSize_inWords) ;
1613 hhash->HashInCount = 4U * tmp_remaining_DMATransferSize_inWords;
1633 return hhash->ErrorCode;
1659 uint32_t buffersize;
1660 HAL_StatusTypeDef status;
1666 CLEAR_BIT(HASH->CR, HASH_CR_DMAE);
1668 if (READ_BIT(HASH->CR, HASH_CR_MODE) == 0U)
1676 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1677 hhash->InCpltCallback(hhash);
1700 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1701 hhash->InCpltCallback(hhash);
1710 inputaddr = (uint32_t)hhash->pHashMsgBuffPtr;
1711 buffersize = hhash->HashBuffSize;
1715 hhash->HashInCount = hhash->HashBuffSize;
1716 hhash->pHashInBuffPtr = hhash->pHashMsgBuffPtr ;
1718 hhash->NbWordsAlreadyPushed = 0U;
1719 #
if defined(HASH_CR_MDMAT)
1721 if (hhash->DigestCalculationDisable != RESET)
1725 __HAL_HASH_SET_MDMAT();
1731 if (hhash->DigestCalculationDisable != RESET)
1739 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1740 hhash->InCpltCallback(hhash);
1750 inputaddr = (uint32_t)hhash->Init.pKey;
1751 buffersize = hhash->Init.KeySize;
1754 hhash->HashInCount = hhash->Init.KeySize;
1755 hhash->pHashInBuffPtr = hhash->Init.pKey ;
1757 hhash->NbWordsAlreadyPushed = 0U;
1762 __HAL_HASH_SET_NBVALIDBITS(buffersize);
1765 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
1768 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, \
1769 (((buffersize % 4U) != 0U) ? ((buffersize + (4U - (buffersize % 4U))) / 4U) : \
1770 (buffersize / 4U)));
1773 SET_BIT(HASH->CR, HASH_CR_DMAE);
1776 if (status != HAL_OK)
1805 hhash->ErrorCode |= HAL_HASH_ERROR_DMA;
1810 hhash->Status = HAL_ERROR;
1811 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
1812 hhash->ErrorCallback(hhash);
1817 hhash->Status = HAL_OK;
1833 static HAL_StatusTypeDef HASH_WriteData(
HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
1835 uint32_t buffercounter;
1836 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
1839 for (buffercounter = 0U; buffercounter < Size / 4U; buffercounter++)
1842 HASH->DIN = *(uint32_t *)inputaddr;
1847 if ((hhash->SuspendRequest ==
HAL_HASH_SUSPEND) && ((buffercounter * 4 + 4U) < Size))
1850 if (buffercounter * 4 >= 64U)
1852 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK)
1859 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
1869 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
1871 hhash->HashInCount = Size - (buffercounter * 4 + 4U);
1876 hhash->pHashKeyBuffPtr = (uint8_t *)inputaddr;
1878 hhash->HashKeyCount = Size - (buffercounter * 4 + 4U);
1884 __HAL_UNLOCK(hhash);
1898 if (Size % 4U != 0U)
1900 if (hhash->Init.DataType == HASH_DATATYPE_16B)
1906 HASH->DIN = (uint32_t) * (uint16_t *)inputaddr;
1910 HASH->DIN = *(uint32_t *)inputaddr;
1914 else if ((hhash->Init.DataType == HASH_DATATYPE_8B)
1915 || (hhash->Init.DataType == HASH_DATATYPE_1B))
1920 HASH->DIN = (uint32_t) * (uint8_t *)inputaddr;
1924 HASH->DIN = (uint32_t) * (uint16_t *)inputaddr;
1928 tmp = *(uint8_t *)inputaddr;
1929 tmp |= *(uint8_t *)(inputaddr + 1U) << 8U ;
1930 tmp |= *(uint8_t *)(inputaddr + 2U) << 16U;
1937 HASH->DIN = *(uint32_t *)inputaddr;
1952 static void HASH_GetDigest(uint8_t *pMsgDigest, uint8_t Size)
1954 uint32_t msgdigest = (uint32_t)pMsgDigest;
1960 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1962 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
1964 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
1966 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
1969 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1971 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
1973 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
1975 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
1977 *(uint32_t *)(msgdigest) = __REV(HASH->HR[4]);
1980 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1982 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
1984 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
1986 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
1988 *(uint32_t *)(msgdigest) = __REV(HASH->HR[4]);
1989 #if defined(HASH_CR_MDMAT)
1991 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
1993 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
1997 *(uint32_t *)(msgdigest) = __REV(HASH->HR[0]);
1999 *(uint32_t *)(msgdigest) = __REV(HASH->HR[1]);
2001 *(uint32_t *)(msgdigest) = __REV(HASH->HR[2]);
2003 *(uint32_t *)(msgdigest) = __REV(HASH->HR[3]);
2005 *(uint32_t *)(msgdigest) = __REV(HASH->HR[4]);
2006 #if defined(HASH_CR_MDMAT)
2008 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
2010 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
2012 *(uint32_t *)(msgdigest) = __REV(HASH_DIGEST->HR[7]);
2030 static HAL_StatusTypeDef HASH_WaitOnFlagUntilTimeout(
HASH_HandleTypeDef *hhash, uint32_t Flag, FlagStatus Status,
2036 if (Status == RESET)
2038 while (__HAL_HASH_GET_FLAG(Flag) == RESET)
2041 if (Timeout != HAL_MAX_DELAY)
2043 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
2048 hhash->Status = HAL_TIMEOUT;
2051 __HAL_UNLOCK(hhash);
2060 while (__HAL_HASH_GET_FLAG(Flag) != RESET)
2063 if (Timeout != HAL_MAX_DELAY)
2065 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
2070 hhash->Status = HAL_TIMEOUT;
2073 __HAL_UNLOCK(hhash);
2098 if (hhash->HashITCounter == 0U)
2101 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2107 else if (hhash->HashITCounter == 1U)
2112 hhash->HashITCounter = 2U;
2118 hhash->HashITCounter = 3U;
2122 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS))
2125 HASH_GetDigest(hhash->pHashOutBuffPtr, HASH_DIGEST_LENGTH());
2128 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2134 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
2135 hhash->DgstCpltCallback(hhash);
2144 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
2149 if ((hhash->HashInCount != 0U) && (hhash->SuspendRequest ==
HAL_HASH_SUSPEND))
2152 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2165 if (HASH_Write_Block_Data(hhash) == HASH_DIGEST_CALCULATION_STARTED)
2169 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
2170 hhash->InCpltCallback(hhash);
2178 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK)
2181 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2186 __HAL_HASH_SET_NBVALIDBITS(hhash->HashBuffSize);
2187 hhash->HashInCount = hhash->HashBuffSize;
2188 hhash->pHashInBuffPtr = hhash->pHashMsgBuffPtr;
2189 hhash->HashITCounter = 1;
2191 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2196 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK)
2199 __HAL_HASH_DISABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
2204 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2205 hhash->HashInCount = hhash->Init.KeySize;
2206 hhash->pHashInBuffPtr = hhash->Init.pKey;
2207 hhash->HashITCounter = 1;
2209 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2237 uint32_t buffercounter;
2238 uint32_t inputcounter;
2239 uint32_t ret = HASH_DIGEST_CALCULATION_NOT_STARTED;
2242 if (hhash->HashInCount > 64U)
2244 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2247 for (buffercounter = 0U; buffercounter < 64U; buffercounter += 4U)
2249 HASH->DIN = *(uint32_t *)inputaddr;
2254 if (hhash->HashITCounter == 2U)
2256 HASH->DIN = *(uint32_t *)inputaddr;
2257 if (hhash->HashInCount >= 68U)
2262 hhash->HashInCount -= 68U;
2263 hhash->pHashInBuffPtr += 68U;
2268 hhash->HashInCount = 0U;
2276 hhash->HashInCount -= 64U;
2277 hhash->pHashInBuffPtr += 64U;
2286 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2288 inputcounter = hhash->HashInCount;
2290 __HAL_HASH_DISABLE_IT(HASH_IT_DINI);
2293 for (buffercounter = 0U; buffercounter < ((inputcounter + 3U) / 4U); buffercounter++)
2295 HASH->DIN = *(uint32_t *)inputaddr;
2299 if (hhash->Accumulation == 1U)
2305 hhash->Accumulation = 0U;
2309 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
2310 hhash->InCpltCallback(hhash);
2318 __HAL_HASH_START_DIGEST();
2323 ret = HASH_DIGEST_CALCULATION_STARTED;
2326 hhash->HashInCount = 0;
2339 static HAL_StatusTypeDef HMAC_Processing(
HASH_HandleTypeDef *hhash, uint32_t Timeout)
2349 __HAL_UNLOCK(hhash);
2360 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2363 hhash->Status = HASH_WriteData(hhash, hhash->pHashKeyBuffPtr, hhash->HashKeyCount);
2364 if (hhash->Status != HAL_OK)
2366 return hhash->Status;
2373 __HAL_UNLOCK(hhash);
2380 __HAL_HASH_START_DIGEST();
2383 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, Timeout) != HAL_OK)
2402 __HAL_HASH_SET_NBVALIDBITS(hhash->HashBuffSize);
2405 hhash->Status = HASH_WriteData(hhash, hhash->pHashInBuffPtr, hhash->HashInCount);
2406 if (hhash->Status != HAL_OK)
2408 return hhash->Status;
2415 __HAL_UNLOCK(hhash);
2422 __HAL_HASH_START_DIGEST();
2425 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, Timeout) != HAL_OK)
2435 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
2436 hhash->HashKeyCount = hhash->Init.KeySize;
2449 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2452 hhash->Status = HASH_WriteData(hhash, hhash->pHashKeyBuffPtr, hhash->HashKeyCount);
2453 if (hhash->Status != HAL_OK)
2455 return hhash->Status;
2462 __HAL_UNLOCK(hhash);
2469 __HAL_HASH_START_DIGEST();
2472 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_DCIS, RESET, Timeout) != HAL_OK)
2478 HASH_GetDigest(hhash->pHashOutBuffPtr, HASH_DIGEST_LENGTH());
2488 __HAL_UNLOCK(hhash);
2508 uint32_t Timeout, uint32_t Algorithm)
2510 uint8_t *pInBuffer_tmp;
2519 if ((pInBuffer == NULL) || (pOutBuffer == NULL))
2535 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2538 __HAL_HASH_SET_NBVALIDBITS(Size);
2542 pInBuffer_tmp = pInBuffer;
2558 pInBuffer_tmp = hhash->pHashInBuffPtr;
2559 Size_tmp = hhash->HashInCount;
2566 pInBuffer_tmp = pInBuffer;
2569 __HAL_HASH_SET_NBVALIDBITS(Size);
2580 __HAL_UNLOCK(hhash);
2588 hhash->Status = HASH_WriteData(hhash, pInBuffer_tmp, Size_tmp);
2589 if (hhash->Status != HAL_OK)
2591 return hhash->Status;
2598 __HAL_HASH_START_DIGEST();
2601 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_DCIS, RESET, Timeout) != HAL_OK)
2607 HASH_GetDigest(pOutBuffer, HASH_DIGEST_LENGTH());
2618 __HAL_UNLOCK(hhash);
2646 uint8_t *pInBuffer_tmp;
2651 if ((Size % 4U) != 0U)
2660 if ((pInBuffer == NULL) || (Size == 0U))
2678 pInBuffer_tmp = hhash->pHashInBuffPtr;
2679 Size_tmp = hhash->HashInCount;
2689 pInBuffer_tmp = pInBuffer;
2696 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2705 hhash->Status = HASH_WriteData(hhash, pInBuffer_tmp, Size_tmp);
2706 if (hhash->Status != HAL_OK)
2708 return hhash->Status;
2719 __HAL_UNLOCK(hhash);
2750 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
2751 uint32_t SizeVar = Size;
2754 if ((Size % 4U) != 0U)
2763 if ((pInBuffer == NULL) || (Size == 0U))
2787 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2788 hhash->HashITCounter = 1;
2792 hhash->HashITCounter = 3;
2802 while ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) && (SizeVar > 0U))
2806 HASH->DIN = *(uint32_t *)inputaddr;
2812 if ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) || (SizeVar == 0U))
2818 __HAL_UNLOCK(hhash);
2825 hhash->HashInCount = SizeVar;
2827 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2837 hhash->Accumulation = 1U;
2840 __HAL_UNLOCK(hhash);
2843 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2873 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
2874 uint32_t polling_step = 0U;
2875 uint32_t initialization_skipped = 0U;
2876 uint32_t SizeVar = Size;
2882 if ((pInBuffer == NULL) || (Size == 0U) || (pOutBuffer == NULL))
2895 hhash->HashITCounter = 1;
2901 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2904 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2907 hhash->HashInCount = SizeVar;
2909 hhash->pHashInBuffPtr = pInBuffer;
2916 hhash->pHashOutBuffPtr = pOutBuffer;
2920 initialization_skipped = 1;
2929 while ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) && (SizeVar > 3U))
2934 HASH->DIN = *(uint32_t *)inputaddr;
2939 if (polling_step == 1U)
2945 hhash->pHashOutBuffPtr = pOutBuffer;
2948 __HAL_HASH_START_DIGEST();
2950 __HAL_UNLOCK(hhash);
2953 __HAL_HASH_ENABLE_IT(HASH_IT_DCI);
2958 else if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
2963 hhash->HashInCount = SizeVar;
2964 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2966 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2967 hhash->pHashOutBuffPtr = pOutBuffer;
2968 if (initialization_skipped == 1U)
2970 hhash->HashITCounter = 3;
2977 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2978 HASH->DIN = *(uint32_t *)inputaddr;
2981 hhash->pHashOutBuffPtr = pOutBuffer;
2982 __HAL_HASH_START_DIGEST();
2984 __HAL_UNLOCK(hhash);
2987 __HAL_HASH_ENABLE_IT(HASH_IT_DCI);
2996 __HAL_UNLOCK(hhash);
2999 __HAL_HASH_ENABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
3031 HAL_StatusTypeDef status ;
3034 #if defined (HASH_CR_MDMAT)
3037 assert_param(IS_HASH_DMA_MULTIBUFFER_SIZE(Size));
3043 if ((pInBuffer == NULL) || (Size == 0U) ||
3070 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT, Algorithm | HASH_CR_INIT);
3077 __HAL_HASH_SET_NBVALIDBITS(Size);
3079 inputaddr = (uint32_t)pInBuffer;
3083 hhash->pHashInBuffPtr = pInBuffer;
3084 hhash->HashInCount = Size;
3096 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
3097 inputSize = hhash->HashInCount;
3102 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
3104 hhash->hdmain->XferErrorCallback = HASH_DMAError;
3107 hhash->NbWordsAlreadyPushed = HASH_NBW_PUSHED();
3110 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, \
3111 (((inputSize % 4U) != 0U) ? ((inputSize + (4U - (inputSize % 4U))) / 4U) : \
3115 SET_BIT(HASH->CR, HASH_CR_DMAE);
3118 __HAL_UNLOCK(hhash);
3121 if (status != HAL_OK)
3149 if (pOutBuffer == NULL)
3161 if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_DCIS, RESET, Timeout) != HAL_OK)
3167 HASH_GetDigest(pOutBuffer, HASH_DIGEST_LENGTH());
3176 __HAL_UNLOCK(hhash);
3205 uint32_t Timeout, uint32_t Algorithm)
3213 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U)
3214 || (pOutBuffer == NULL))
3230 if (hhash->Init.KeySize > 64U)
3232 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3233 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3237 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3238 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3245 hhash->pHashOutBuffPtr = pOutBuffer;
3246 hhash->pHashInBuffPtr = pInBuffer;
3248 hhash->HashInCount = Size;
3250 hhash->HashBuffSize = Size;
3251 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3253 hhash->HashKeyCount = hhash->Init.KeySize;
3258 return HMAC_Processing(hhash, Timeout);
3291 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U)
3292 || (pOutBuffer == NULL))
3305 hhash->HashITCounter = 1;
3311 if (hhash->Init.KeySize > 64U)
3313 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3314 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3318 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3319 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3325 hhash->HashInCount = hhash->Init.KeySize;
3326 hhash->pHashInBuffPtr = hhash->Init.pKey ;
3330 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3331 hhash->pHashMsgBuffPtr = pInBuffer;
3332 hhash->HashBuffSize = Size;
3333 hhash->pHashOutBuffPtr = pOutBuffer;
3336 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
3355 __HAL_UNLOCK(hhash);
3361 __HAL_UNLOCK(hhash);
3364 __HAL_HASH_ENABLE_IT(HASH_IT_DINI | HASH_IT_DCI);
3397 HAL_StatusTypeDef status ;
3401 assert_param(IS_HMAC_DMA_MULTIBUFFER_SIZE(hhash, Size));
3406 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U) ||
3428 #if defined(HASH_CR_MDMAT)
3431 if (hhash->Init.KeySize > 64U)
3433 MODIFY_REG(HASH->CR, HASH_CR_MDMAT | HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3434 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3438 MODIFY_REG(HASH->CR, HASH_CR_MDMAT | HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3439 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3443 if (hhash->Init.KeySize > 64U)
3445 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3446 Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3450 MODIFY_REG(HASH->CR, HASH_CR_LKEY | HASH_CR_ALGO | HASH_CR_MODE | HASH_CR_INIT,
3451 Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3456 hhash->HashInCount = hhash->Init.KeySize;
3457 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3458 hhash->pHashInBuffPtr = hhash->Init.pKey ;
3459 hhash->pHashMsgBuffPtr = pInBuffer;
3460 hhash->HashBuffSize = Size;
3463 inputaddr = (uint32_t)(hhash->Init.pKey);
3464 inputSize = hhash->Init.KeySize;
3467 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
3482 hhash->HashInCount = Size;
3483 hhash->pHashInBuffPtr = pInBuffer;
3486 inputaddr = (uint32_t)pInBuffer;
3489 if (hhash->DigestCalculationDisable == RESET)
3492 #if defined(HASH_CR_MDMAT)
3493 __HAL_HASH_RESET_MDMAT();
3495 __HAL_HASH_SET_NBVALIDBITS(inputSize);
3501 __HAL_UNLOCK(hhash);
3517 inputaddr = (uint32_t)(hhash->pHashInBuffPtr);
3518 inputSize = hhash->HashInCount;
3523 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
3525 hhash->hdmain->XferErrorCallback = HASH_DMAError;
3528 hhash->NbWordsAlreadyPushed = HASH_NBW_PUSHED();
3531 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, \
3532 (((inputSize % 4U) != 0U) ? ((inputSize + (4U - (inputSize % 4U))) / 4U) \
3533 : (inputSize / 4U)));
3536 SET_BIT(HASH->CR, HASH_CR_DMAE);
3539 __HAL_UNLOCK(hhash);
3542 if (status != HAL_OK)
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash)
DeInitialize the HASH MSP.
void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash)
Digest computation complete call back.
HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash)
DeInitialize the HASH peripheral.
HAL_StatusTypeDef HAL_HASH_RegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID, pHASH_CallbackTypeDef pCallback)
Register a User HASH Callback To be used instead of the weak (surcharged) predefined callback.
void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash)
Input data transfer complete call back.
HAL_StatusTypeDef HAL_HASH_UnRegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID)
Unregister a HASH Callback HASH Callback is redirected to the weak (surcharged) predefined callback.
HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash)
Initialize the HASH according to the specified parameters in the HASH_HandleTypeDef and create the as...
void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash)
Initialize the HASH MSP.
void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash)
Error callback.
HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout)
Initialize the HASH peripheral in MD5 mode, next process pInBuffer then read the computed digest.
HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout)
End computation of a single HASH signature after several calls to HAL_HASH_MD5_Accmlt() API.
HAL_StatusTypeDef HAL_HASH_MD5_Accmlt(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
If not already done, initialize the HASH peripheral in MD5 mode then processes pInBuffer.
HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout)
End computation of a single HASH signature after several calls to HAL_HASH_SHA1_Accmlt() API.
HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout)
Initialize the HASH peripheral in SHA1 mode, next process pInBuffer then read the computed digest.
HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
If not already done, initialize the HASH peripheral in SHA1 mode then processes pInBuffer.
HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer)
Initialize the HASH peripheral in SHA1 mode, next process pInBuffer then read the computed digest in ...
HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer)
End computation of a single HASH signature after several calls to HAL_HASH_MD5_Accmlt_IT() API.
HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
If not already done, initialize the HASH peripheral in MD5 mode then processes pInBuffer in interrupt...
HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer)
End computation of a single HASH signature after several calls to HAL_HASH_SHA1_Accmlt_IT() API.
HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer)
Initialize the HASH peripheral in MD5 mode, next process pInBuffer then read the computed digest in i...
void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash)
Handle HASH interrupt request.
HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
If not already done, initialize the HASH peripheral in SHA1 mode then processes pInBuffer in interrup...
HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
Return the computed digest in MD5 mode.
HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
Initialize the HASH peripheral in MD5 mode then initiate a DMA transfer to feed the input buffer to t...
HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
Initialize the HASH peripheral in SHA1 mode then initiate a DMA transfer to feed the input buffer to ...
HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
Return the computed digest in SHA1 mode.
HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout)
Initialize the HASH peripheral in HMAC MD5 mode, next process pInBuffer then read the computed digest...
HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout)
Initialize the HASH peripheral in HMAC SHA1 mode, next process pInBuffer then read the computed diges...
HAL_StatusTypeDef HAL_HMAC_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer)
Initialize the HASH peripheral in HMAC SHA1 mode, next process pInBuffer then read the computed diges...
HAL_StatusTypeDef HAL_HMAC_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer)
Initialize the HASH peripheral in HMAC MD5 mode, next process pInBuffer then read the computed digest...
HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
Initialize the HASH peripheral in HMAC MD5 mode then initiate the required DMA transfers to feed the ...
HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
Initialize the HASH peripheral in HMAC SHA1 mode then initiate the required DMA transfers to feed the...
void HAL_HASH_ContextSaving(HASH_HandleTypeDef *hhash, uint8_t *pMemBuffer)
Save the HASH context in case of processing suspension.
HAL_HASH_StateTypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash)
Return the HASH handle state.
HAL_StatusTypeDef HAL_HASH_GetStatus(HASH_HandleTypeDef *hhash)
Return the HASH HAL status.
uint32_t HAL_HASH_GetError(HASH_HandleTypeDef *hhash)
Return the HASH handle error code.
void HAL_HASH_ContextRestoring(HASH_HandleTypeDef *hhash, uint8_t *pMemBuffer)
Restore the HASH context in case of processing resumption.
void HAL_HASH_SwFeed_ProcessSuspend(HASH_HandleTypeDef *hhash)
Initiate HASH processing suspension when in polling or interruption mode.
HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash)
Suspend the HASH processing when in DMA mode.
void(* pHASH_CallbackTypeDef)(HASH_HandleTypeDef *hhash)
HAL HASH Callback pointer definition.
HAL_HASH_CallbackIDTypeDef
HAL HASH common Callback ID enumeration definition.
struct __HASH_HandleTypeDef else typedef struct endif HASH_HandleTypeDef
HASH Handle Structure definition.
HAL_HASH_StateTypeDef
HAL State structures definition.
@ HAL_HASH_INPUTCPLT_CB_ID
@ HAL_HASH_MSPDEINIT_CB_ID
@ HAL_HASH_DGSTCPLT_CB_ID
@ HAL_HASH_PHASE_HMAC_STEP_1
@ HAL_HASH_PHASE_HMAC_STEP_3
@ HAL_HASH_PHASE_HMAC_STEP_2
@ HAL_HASH_STATE_SUSPENDED
HAL_StatusTypeDef HMAC_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout, uint32_t Algorithm)
Initialize the HASH peripheral in HMAC mode, next process pInBuffer then read the computed digest.
HAL_StatusTypeDef HASH_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm)
If not already done, initialize the HASH peripheral then processes pInBuffer.
HAL_StatusTypeDef HASH_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm)
Initialize the HASH peripheral then initiate a DMA transfer to feed the input buffer to the Periphera...
HAL_StatusTypeDef HASH_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Timeout, uint32_t Algorithm)
Initialize the HASH peripheral, next process pInBuffer then read the computed digest.
HAL_StatusTypeDef HASH_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
Return the computed digest.
HAL_StatusTypeDef HASH_Accumulate_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm)
If not already done, initialize the HASH peripheral then processes pInBuffer in interruption mode.
HAL_StatusTypeDef HASH_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Algorithm)
Initialize the HASH peripheral, next process pInBuffer then read the computed digest in interruption ...
HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm)
Initialize the HASH peripheral in HMAC mode then initiate the required DMA transfers to feed the key ...
HAL_StatusTypeDef HMAC_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer, uint32_t Algorithm)
Initialize the HASH peripheral in HMAC mode, next process pInBuffer then read the computed digest in ...
This file contains all the functions prototypes for the HAL module driver.
DMA handle Structure definition.