219 #ifdef HAL_HASH_MODULE_ENABLED 230 #define HASH_DIGEST_CALCULATION_NOT_STARTED ((uint32_t)0x00000000U) 231 #define HASH_DIGEST_CALCULATION_STARTED ((uint32_t)0x00000001U) 239 #define HASH_NUMBER_OF_CSR_REGISTERS 54U 247 #define HASH_TIMEOUTVALUE 1000U 255 #define HASH_DMA_SUSPENSION_WORDS_LIMIT 20U 335 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 345 if(hhash->MspInitCallback == NULL)
351 hhash->MspInitCallback(hhash);
368 hhash->HashInCount = 0;
369 hhash->HashBuffSize = 0;
370 hhash->HashITCounter = 0;
371 hhash->NbWordsAlreadyPushed = 0;
373 hhash->DigestCalculationDisable = RESET;
378 MODIFY_REG(HASH->CR, HASH_CR_DATATYPE, hhash->Init.DataType);
380 __HAL_HASH_RESET_MDMAT();
388 hhash->ErrorCode = HAL_HASH_ERROR_NONE;
414 hhash->HashInCount = 0;
415 hhash->HashBuffSize = 0;
416 hhash->HashITCounter = 0;
418 hhash->DigestCalculationDisable = RESET;
420 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 421 if(hhash->MspDeInitCallback == NULL)
427 hhash->MspDeInitCallback(hhash);
441 hhash->ErrorCode = HAL_HASH_ERROR_NONE;
444 hhash->Accumulation = 0U;
535 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 552 HAL_StatusTypeDef status =
HAL_OK;
554 if(pCallback == NULL)
557 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
568 hhash->InCpltCallback = pCallback;
572 hhash->DgstCpltCallback = pCallback;
576 hhash->ErrorCallback = pCallback;
580 hhash->MspInitCallback = pCallback;
584 hhash->MspDeInitCallback = pCallback;
589 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
600 hhash->MspInitCallback = pCallback;
604 hhash->MspDeInitCallback = pCallback;
609 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
618 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
643 HAL_StatusTypeDef status =
HAL_OK;
674 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
694 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
703 hhash->ErrorCode |= HAL_HASH_ERROR_INVALID_CALLBACK;
758 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
799 return HASH_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
824 return HASH_Accumulate(hhash, pInBuffer, Size,HASH_ALGOSELECTION_SHA1);
868 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer,HASH_ALGOSELECTION_MD5);
906 return HASH_Start_IT(hhash, pInBuffer, Size, pOutBuffer,HASH_ALGOSELECTION_SHA1);
944 hhash->Status =
HASH_IT(hhash);
945 if (hhash->Status !=
HAL_OK)
947 hhash->ErrorCode |= HAL_HASH_ERROR_IT;
948 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 949 hhash->ErrorCallback(hhash);
1002 return HASH_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
1032 return HASH_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1089 return HMAC_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_MD5);
1107 return HMAC_Start(hhash, pInBuffer, Size, pOutBuffer, Timeout, HASH_ALGOSELECTION_SHA1);
1148 return HMAC_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_MD5);
1165 return HMAC_Start_IT(hhash, pInBuffer, Size, pOutBuffer, HASH_ALGOSELECTION_SHA1);
1218 return HMAC_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_MD5);
1243 return HMAC_Start_DMA(hhash, pInBuffer, Size, HASH_ALGOSELECTION_SHA1);
1290 return hhash->State;
1303 return hhash->Status;
1321 uint32_t mem_ptr = (uint32_t)pMemBuffer;
1322 uint32_t csr_ptr = (uint32_t)HASH->CSR;
1329 *(uint32_t*)(mem_ptr) = READ_BIT(HASH->IMR,HASH_IT_DINI|HASH_IT_DCI);
1332 *(uint32_t*)(mem_ptr) = READ_BIT(HASH->STR,HASH_STR_NBLW);
1335 *(uint32_t*)(mem_ptr) = READ_BIT(HASH->CR,HASH_CR_DMAE|HASH_CR_DATATYPE|HASH_CR_MODE|HASH_CR_ALGO|HASH_CR_LKEY|HASH_CR_MDMAT);
1338 for (i = HASH_NUMBER_OF_CSR_REGISTERS; i >0U; i--)
1340 *(uint32_t*)(mem_ptr) = *(uint32_t*)(csr_ptr);
1361 uint32_t mem_ptr = (uint32_t)pMemBuffer;
1362 uint32_t csr_ptr = (uint32_t)HASH->CSR;
1369 WRITE_REG(HASH->IMR, (*(uint32_t*)(mem_ptr)));
1372 WRITE_REG(HASH->STR, (*(uint32_t*)(mem_ptr)));
1375 WRITE_REG(HASH->CR, (*(uint32_t*)(mem_ptr)));
1383 for (i = HASH_NUMBER_OF_CSR_REGISTERS; i >0U; i--)
1385 WRITE_REG((*(uint32_t*)(csr_ptr)), (*(uint32_t*)(mem_ptr)));
1419 uint32_t tmp_remaining_DMATransferSize_inWords;
1420 uint32_t tmp_initial_DMATransferSize_inWords;
1421 uint32_t tmp_words_already_pushed;
1431 tmp_remaining_DMATransferSize_inWords = ((DMA_Channel_TypeDef *)hhash->hdmain->Instance)->CNDTR;
1433 if (tmp_remaining_DMATransferSize_inWords <= HASH_DMA_SUSPENSION_WORDS_LIMIT)
1446 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET)
1477 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET)
1484 tmp_remaining_DMATransferSize_inWords = ((DMA_Channel_TypeDef *)hhash->hdmain->Instance)->CNDTR;
1486 if (tmp_remaining_DMATransferSize_inWords == 0U)
1503 tmp_initial_DMATransferSize_inWords = (((hhash->HashInCount%4U)!=0U) ? ((hhash->HashInCount+3U)/4U): (hhash->HashInCount/4U));
1509 tmp_words_already_pushed = hhash->NbWordsAlreadyPushed;
1510 if (((tmp_words_already_pushed + tmp_initial_DMATransferSize_inWords - tmp_remaining_DMATransferSize_inWords) %16U) != HASH_NBW_PUSHED())
1512 tmp_remaining_DMATransferSize_inWords--;
1516 hhash->pHashInBuffPtr += 4U * (tmp_initial_DMATransferSize_inWords - tmp_remaining_DMATransferSize_inWords) ;
1519 hhash->HashInCount = 4U * tmp_remaining_DMATransferSize_inWords;
1539 return hhash->ErrorCode;
1565 uint32_t buffersize;
1566 HAL_StatusTypeDef status ;
1574 if (READ_BIT(HASH->CR, HASH_CR_MODE) == 0U)
1582 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 1583 hhash->InCpltCallback(hhash);
1606 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 1607 hhash->InCpltCallback(hhash);
1616 inputaddr = (uint32_t)hhash->pHashMsgBuffPtr;
1617 buffersize = hhash->HashBuffSize;
1621 hhash->HashInCount = hhash->HashBuffSize;
1622 hhash->pHashInBuffPtr = hhash->pHashMsgBuffPtr ;
1624 hhash->NbWordsAlreadyPushed = 0U;
1626 if (hhash->DigestCalculationDisable != RESET)
1630 __HAL_HASH_SET_MDMAT();
1635 if (hhash->DigestCalculationDisable != RESET)
1643 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 1644 hhash->InCpltCallback(hhash);
1654 inputaddr = (uint32_t)hhash->Init.pKey;
1655 buffersize = hhash->Init.KeySize;
1658 hhash->HashInCount = hhash->Init.KeySize;
1659 hhash->pHashInBuffPtr = hhash->Init.pKey ;
1661 hhash->NbWordsAlreadyPushed = 0U;
1666 __HAL_HASH_SET_NBVALIDBITS(buffersize);
1672 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (((buffersize %4U)!=0U) ? ((buffersize+(4U-(buffersize %4U)))/4U):(buffersize/4U)));
1675 SET_BIT(HASH->CR, HASH_CR_DMAE);
1707 hhash->ErrorCode |= HAL_HASH_ERROR_DMA;
1712 hhash->Status = HAL_ERROR;
1713 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 1714 hhash->ErrorCallback(hhash);
1737 uint32_t buffercounter;
1738 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
1740 for(buffercounter = 0U; buffercounter < Size; buffercounter+=4U)
1743 HASH->DIN = *(uint32_t*)inputaddr;
1748 if ((hhash->SuspendRequest ==
HAL_HASH_SUSPEND) && ((buffercounter+4U) < Size))
1752 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
1762 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
1764 hhash->HashInCount = Size - (buffercounter + 4U);
1769 hhash->pHashKeyBuffPtr = (uint8_t *)inputaddr;
1771 hhash->HashKeyCount = Size - (buffercounter + 4U);
1801 uint32_t msgdigest = (uint32_t)pMsgDigest;
1807 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
1809 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
1811 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
1813 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
1816 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
1818 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
1820 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
1822 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
1824 *(uint32_t*)(msgdigest) = __REV(HASH->HR[4]);
1827 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
1829 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
1831 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
1833 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
1835 *(uint32_t*)(msgdigest) = __REV(HASH->HR[4]);
1837 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
1839 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
1842 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
1844 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
1846 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
1848 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
1850 *(uint32_t*)(msgdigest) = __REV(HASH->HR[4]);
1852 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
1854 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
1856 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[7]);
1880 while(__HAL_HASH_GET_FLAG(Flag) == RESET)
1883 if(Timeout != HAL_MAX_DELAY)
1885 if(((
HAL_GetTick()-tickstart) > Timeout) || (Timeout == 0U))
1890 hhash->Status = HAL_TIMEOUT;
1902 while(__HAL_HASH_GET_FLAG(Flag) != RESET)
1905 if(Timeout != HAL_MAX_DELAY)
1907 if(((
HAL_GetTick()-tickstart) > Timeout) || (Timeout == 0U))
1912 hhash->Status = HAL_TIMEOUT;
1940 if(hhash->HashITCounter == 0U)
1943 __HAL_HASH_DISABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
1949 else if (hhash->HashITCounter == 1U)
1954 hhash->HashITCounter = 2U;
1960 hhash->HashITCounter = 3U;
1964 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS))
1970 __HAL_HASH_DISABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
1974 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 1975 hhash->DgstCpltCallback(hhash);
1984 if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
1989 if ( (hhash->HashInCount != 0U) && (hhash->SuspendRequest ==
HAL_HASH_SUSPEND))
1992 __HAL_HASH_DISABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
2009 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 2010 hhash->InCpltCallback(hhash);
2021 __HAL_HASH_DISABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
2026 __HAL_HASH_SET_NBVALIDBITS(hhash->HashBuffSize);
2027 hhash->HashInCount = hhash->HashBuffSize;
2028 hhash->pHashInBuffPtr = hhash->pHashMsgBuffPtr;
2029 hhash->HashITCounter = 1;
2030 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2038 __HAL_HASH_DISABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
2043 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2044 hhash->HashInCount = hhash->Init.KeySize;
2045 hhash->pHashInBuffPtr = hhash->Init.pKey;
2046 hhash->HashITCounter = 1;
2047 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2075 uint32_t buffercounter;
2076 uint32_t inputcounter;
2077 uint32_t ret = HASH_DIGEST_CALCULATION_NOT_STARTED;
2080 if(hhash->HashInCount > 64U)
2082 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2085 for(buffercounter = 0U; buffercounter < 64U; buffercounter+=4U)
2087 HASH->DIN = *(uint32_t*)inputaddr;
2092 if(hhash->HashITCounter == 2U)
2094 HASH->DIN = *(uint32_t*)inputaddr;
2095 if(hhash->HashInCount >= 68U)
2100 hhash->HashInCount -= 68U;
2101 hhash->pHashInBuffPtr+= 68U;
2106 hhash->HashInCount = 0U;
2114 hhash->HashInCount -= 64U;
2115 hhash->pHashInBuffPtr+= 64U;
2124 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2126 inputcounter = hhash->HashInCount;
2128 __HAL_HASH_DISABLE_IT(HASH_IT_DINI);
2131 for(buffercounter = 0U; buffercounter < ((inputcounter+3U)/4U); buffercounter++)
2133 HASH->DIN = *(uint32_t*)inputaddr;
2137 if (hhash->Accumulation == 1U)
2143 hhash->Accumulation = 0U;
2147 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1) 2148 hhash->InCpltCallback(hhash);
2156 __HAL_HASH_START_DIGEST();
2161 ret = HASH_DIGEST_CALCULATION_STARTED;
2164 hhash->HashInCount = 0;
2197 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2200 hhash->Status =
HASH_WriteData(hhash, hhash->pHashKeyBuffPtr, hhash->HashKeyCount);
2201 if (hhash->Status !=
HAL_OK)
2203 return hhash->Status;
2217 __HAL_HASH_START_DIGEST();
2239 __HAL_HASH_SET_NBVALIDBITS(hhash->HashBuffSize);
2242 hhash->Status =
HASH_WriteData(hhash, hhash->pHashInBuffPtr, hhash->HashInCount);
2243 if (hhash->Status !=
HAL_OK)
2245 return hhash->Status;
2259 __HAL_HASH_START_DIGEST();
2272 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
2273 hhash->HashKeyCount = hhash->Init.KeySize;
2286 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
2289 hhash->Status =
HASH_WriteData(hhash, hhash->pHashKeyBuffPtr, hhash->HashKeyCount);
2290 if (hhash->Status !=
HAL_OK)
2292 return hhash->Status;
2306 __HAL_HASH_START_DIGEST();
2343 uint8_t *pInBuffer_tmp;
2352 if ((pInBuffer == NULL) || (Size == 0U) || (pOutBuffer == NULL))
2368 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2371 __HAL_HASH_SET_NBVALIDBITS(Size);
2375 pInBuffer_tmp = pInBuffer;
2391 pInBuffer_tmp = hhash->pHashInBuffPtr;
2392 Size_tmp = hhash->HashInCount;
2399 pInBuffer_tmp = pInBuffer;
2402 __HAL_HASH_SET_NBVALIDBITS(Size);
2422 if (hhash->Status !=
HAL_OK)
2424 return hhash->Status;
2431 __HAL_HASH_START_DIGEST();
2476 uint8_t *pInBuffer_tmp;
2481 if ((Size % 4U) != 0U)
2490 if ((pInBuffer == NULL) || (Size == 0U))
2508 pInBuffer_tmp = hhash->pHashInBuffPtr;
2509 Size_tmp = hhash->HashInCount;
2519 pInBuffer_tmp = pInBuffer;
2526 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2536 if (hhash->Status !=
HAL_OK)
2538 return hhash->Status;
2580 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
2581 uint32_t SizeVar = Size;
2584 if ((Size % 4U) != 0U)
2593 if ((pInBuffer == NULL) || (Size == 0U))
2617 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2618 hhash->HashITCounter = 1;
2622 hhash->HashITCounter = 3;
2632 while((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) && (SizeVar > 0U))
2636 HASH->DIN = *(uint32_t*)inputaddr;
2642 if ((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) || (SizeVar == 0U))
2655 hhash->HashInCount = SizeVar;
2657 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2667 hhash->Accumulation = 1U;
2673 __HAL_HASH_ENABLE_IT(HASH_IT_DINI);
2702 __IO uint32_t inputaddr = (uint32_t) pInBuffer;
2703 uint32_t polling_step = 0U;
2704 uint32_t initialization_skipped = 0U;
2705 uint32_t SizeVar = Size;
2711 if ((pInBuffer == NULL) || (Size == 0U) || (pOutBuffer == NULL))
2724 hhash->HashITCounter = 1;
2730 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2733 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2736 hhash->HashInCount = SizeVar;
2738 hhash->pHashInBuffPtr = pInBuffer;
2745 hhash->pHashOutBuffPtr = pOutBuffer;
2749 initialization_skipped = 1;
2758 while((!(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))) && (SizeVar > 3U))
2763 HASH->DIN = *(uint32_t*)inputaddr;
2768 if (polling_step == 1U)
2774 hhash->pHashOutBuffPtr = pOutBuffer;
2777 __HAL_HASH_START_DIGEST();
2782 __HAL_HASH_ENABLE_IT(HASH_IT_DCI);
2787 else if (__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
2792 hhash->HashInCount = SizeVar;
2793 hhash->pHashInBuffPtr = (uint8_t *)inputaddr;
2794 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2795 hhash->pHashOutBuffPtr = pOutBuffer;
2796 if (initialization_skipped == 1U)
2798 hhash->HashITCounter = 3;
2805 __HAL_HASH_SET_NBVALIDBITS(SizeVar);
2806 HASH->DIN = *(uint32_t*)inputaddr;
2809 hhash->pHashOutBuffPtr = pOutBuffer;
2810 __HAL_HASH_START_DIGEST();
2815 __HAL_HASH_ENABLE_IT(HASH_IT_DCI);
2827 __HAL_HASH_ENABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
2859 HAL_StatusTypeDef status ;
2862 #if defined (HASH_CR_MDMAT) 2871 if ( (pInBuffer == NULL ) || (Size == 0U) ||
2898 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_CR_INIT);
2905 __HAL_HASH_SET_NBVALIDBITS(Size);
2907 inputaddr = (uint32_t)pInBuffer;
2911 hhash->pHashInBuffPtr = pInBuffer;
2912 hhash->HashInCount = Size;
2924 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
2925 inputSize = hhash->HashInCount;
2935 hhash->NbWordsAlreadyPushed = HASH_NBW_PUSHED();
2938 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (((inputSize %4U)!=0U) ? ((inputSize+(4U-(inputSize %4U)))/4U):(inputSize/4U)));
2941 SET_BIT(HASH->CR, HASH_CR_DMAE);
2975 if (pOutBuffer == NULL)
3035 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U) || (pOutBuffer == NULL))
3051 if(hhash->Init.KeySize > 64U)
3053 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3057 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3064 hhash->pHashOutBuffPtr = pOutBuffer;
3065 hhash->pHashInBuffPtr = pInBuffer;
3066 hhash->HashInCount = Size;
3067 hhash->HashBuffSize = Size;
3068 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3069 hhash->HashKeyCount = hhash->Init.KeySize;
3105 if ((pInBuffer == NULL) || (Size == 0U) || (hhash->Init.pKey == NULL) || (hhash->Init.KeySize == 0U) || (pOutBuffer == NULL))
3118 hhash->HashITCounter = 1;
3124 if(hhash->Init.KeySize > 64U)
3126 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3130 MODIFY_REG(HASH->CR, HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3136 hhash->HashInCount = hhash->Init.KeySize;
3137 hhash->pHashInBuffPtr = hhash->Init.pKey ;
3141 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3142 hhash->pHashMsgBuffPtr = pInBuffer;
3143 hhash->HashBuffSize = Size;
3144 hhash->pHashOutBuffPtr = pOutBuffer;
3147 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
3175 __HAL_HASH_ENABLE_IT(HASH_IT_DINI|HASH_IT_DCI);
3208 HAL_StatusTypeDef status ;
3212 assert_param(IS_HMAC_DMA_MULTIBUFFER_SIZE(hhash, Size));
3217 if ((pInBuffer == NULL ) || (Size == 0U) || (hhash->Init.pKey == NULL ) || (hhash->Init.KeySize == 0U) ||
3241 if(hhash->Init.KeySize > 64U)
3243 MODIFY_REG(HASH->CR, HASH_CR_MDMAT|HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_ALGOMODE_HMAC | HASH_HMAC_KEYTYPE_LONGKEY | HASH_CR_INIT);
3247 MODIFY_REG(HASH->CR, HASH_CR_MDMAT|HASH_CR_LKEY|HASH_CR_ALGO|HASH_CR_MODE|HASH_CR_INIT, Algorithm | HASH_ALGOMODE_HMAC | HASH_CR_INIT);
3251 hhash->HashInCount = hhash->Init.KeySize;
3252 hhash->pHashKeyBuffPtr = hhash->Init.pKey;
3253 hhash->pHashInBuffPtr = hhash->Init.pKey ;
3254 hhash->pHashMsgBuffPtr = pInBuffer;
3255 hhash->HashBuffSize = Size;
3258 inputaddr = (uint32_t)(hhash->Init.pKey);
3259 inputSize = hhash->Init.KeySize;
3262 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
3277 hhash->HashInCount = Size;
3278 hhash->pHashInBuffPtr = pInBuffer;
3281 inputaddr = (uint32_t)pInBuffer;
3284 if (hhash->DigestCalculationDisable == RESET)
3287 __HAL_HASH_RESET_MDMAT();
3288 __HAL_HASH_SET_NBVALIDBITS(inputSize);
3310 inputaddr = (uint32_t)(hhash->pHashInBuffPtr);
3311 inputSize = hhash->HashInCount;
3321 hhash->NbWordsAlreadyPushed = HASH_NBW_PUSHED();
3324 status =
HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (((inputSize %4U)!=0U) ? ((inputSize+(4U-(inputSize %4U)))/4U):(inputSize/4U)));
3326 SET_BIT(HASH->CR, HASH_CR_DMAE);
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_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
Return the computed digest in SHA1 mode.
struct __HASH_HandleTypeDef else typedef struct endif HASH_HandleTypeDef
HASH Handle Structure definition.
static void HASH_DMAXferCplt(DMA_HandleTypeDef *hdma)
DMA HASH Input Data transfer completion callback.
void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash)
Initialize the HASH MSP.
void HAL_HASH_ContextRestoring(HASH_HandleTypeDef *hhash, uint8_t *pMemBuffer)
Restore the HASH context in case of processing resumption.
HAL_HASH_CallbackIDTypeDef
HAL HASH common Callback ID enumeration definition.
void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash)
DeInitialize the HASH MSP.
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 ...
DMA handle Structure definition.
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...
if(lpuartdiv >=LPUART_BRR_MIN_VALUE)
This file contains all the functions prototypes for the HAL module driver.
static HAL_StatusTypeDef HASH_IT(HASH_HandleTypeDef *hhash)
HASH processing in interruption mode.
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...
void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash)
Input data transfer complete call back.
static HAL_StatusTypeDef HASH_WaitOnFlagUntilTimeout(HASH_HandleTypeDef *hhash, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
Handle HASH processing Timeout.
static void HASH_DMAError(DMA_HandleTypeDef *hdma)
DMA HASH communication error callback.
HAL_StatusTypeDef HASH_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
Return the computed digest.
void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash)
Digest computation complete call back.
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_HASH_SHA1_Accumulate_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...
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
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_Init(HASH_HandleTypeDef *hhash)
Initialize the HASH according to the specified parameters in the HASH_HandleTypeDef and create the as...
HAL_StatusTypeDef HAL_HASH_SHA1_Accumulate(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_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
void(* pHASH_CallbackTypeDef)(HASH_HandleTypeDef *hhash)
HAL HASH Callback pointer definition.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
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 ...
HAL_StatusTypeDef HAL_HASH_GetStatus(HASH_HandleTypeDef *hhash)
Return the HASH HAL status.
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 HAL_HASH_MD5_Accumulate_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_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...
void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash)
Error callback.
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 HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Abort the DMA Transfer.
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.
uint32_t HAL_HASH_GetError(HASH_HandleTypeDef *hhash)
Return the HASH handle error code.
void HAL_HASH_SwFeed_ProcessSuspend(HASH_HandleTypeDef *hhash)
Initiate HASH processing suspension when in polling or interruption mode.
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_DeInit(HASH_HandleTypeDef *hhash)
DeInitialize the HASH peripheral.
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...
static HAL_StatusTypeDef HMAC_Processing(HASH_HandleTypeDef *hhash, uint32_t Timeout)
HMAC processing in polling mode.
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_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 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 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 ...
static uint32_t HASH_Write_Block_Data(HASH_HandleTypeDef *hhash)
Write a block of data in HASH Peripheral in interruption mode.
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...
HAL_HASH_StateTypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash)
Return the HASH handle state.
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_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout)
Return the computed digest in MD5 mode.
void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash)
Handle HASH interrupt request.
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...
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
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 HAL_HASH_MD5_Accumulate(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_UnRegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID)
Unregister a HASH Callback HASH Callback is redirected to the weak (surcharged) predefined callback...
static void HASH_GetDigest(uint8_t *pMsgDigest, uint8_t Size)
Retrieve the message digest.
HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash)
Suspend the HASH processing when in DMA mode.
static HAL_StatusTypeDef HASH_WriteData(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
Feed the input buffer to the HASH Peripheral.
HAL_HASH_StateTypeDef
HAL State structures definition.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
void HAL_HASH_ContextSaving(HASH_HandleTypeDef *hhash, uint8_t *pMemBuffer)
Save the HASH context in case of processing suspension.