mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Jun 23 14:00:09 2014 +0100
Revision:
235:685d5f11838f
Synchronized with git revision 9728c76667962b289ee9c4c687ef9f115db48cd3

Full URL: https://github.com/mbedmicro/mbed/commit/9728c76667962b289ee9c4c687ef9f115db48cd3/

[NUCLEO_F411RE] Add all target files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_hash.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 235:685d5f11838f 5 * @version V1.1.0
mbed_official 235:685d5f11838f 6 * @date 19-June-2014
mbed_official 235:685d5f11838f 7 * @brief HASH HAL module driver.
mbed_official 235:685d5f11838f 8 * This file provides firmware functions to manage the following
mbed_official 235:685d5f11838f 9 * functionalities of the HASH peripheral:
mbed_official 235:685d5f11838f 10 * + Initialization and de-initialization functions
mbed_official 235:685d5f11838f 11 * + HASH/HMAC Processing functions by algorithm using polling mode
mbed_official 235:685d5f11838f 12 * + HASH/HMAC functions by algorithm using interrupt mode
mbed_official 235:685d5f11838f 13 * + HASH/HMAC functions by algorithm using DMA mode
mbed_official 235:685d5f11838f 14 * + Peripheral State functions
mbed_official 235:685d5f11838f 15 *
mbed_official 235:685d5f11838f 16 @verbatim
mbed_official 235:685d5f11838f 17 ==============================================================================
mbed_official 235:685d5f11838f 18 ##### How to use this driver #####
mbed_official 235:685d5f11838f 19 ==============================================================================
mbed_official 235:685d5f11838f 20 [..]
mbed_official 235:685d5f11838f 21 The HASH HAL driver can be used as follows:
mbed_official 235:685d5f11838f 22 (#)Initialize the HASH low level resources by implementing the HAL_HASH_MspInit():
mbed_official 235:685d5f11838f 23 (##) Enable the HASH interface clock using __HASH_CLK_ENABLE()
mbed_official 235:685d5f11838f 24 (##) In case of using processing APIs based on interrupts (e.g. HAL_HMAC_SHA1_Start_IT())
mbed_official 235:685d5f11838f 25 (+++) Configure the HASH interrupt priority using HAL_NVIC_SetPriority()
mbed_official 235:685d5f11838f 26 (+++) Enable the HASH IRQ handler using HAL_NVIC_EnableIRQ()
mbed_official 235:685d5f11838f 27 (+++) In HASH IRQ handler, call HAL_HASH_IRQHandler()
mbed_official 235:685d5f11838f 28 (##) In case of using DMA to control data transfer (e.g. HAL_HMAC_SHA1_Start_DMA())
mbed_official 235:685d5f11838f 29 (+++) Enable the DMAx interface clock using __DMAx_CLK_ENABLE()
mbed_official 235:685d5f11838f 30 (+++) Configure and enable one DMA stream one for managing data transfer from
mbed_official 235:685d5f11838f 31 memory to peripheral (input stream). Managing data transfer from
mbed_official 235:685d5f11838f 32 peripheral to memory can be performed only using CPU
mbed_official 235:685d5f11838f 33 (+++) Associate the initialized DMA handle to the HASH DMA handle
mbed_official 235:685d5f11838f 34 using __HAL_LINKDMA()
mbed_official 235:685d5f11838f 35 (+++) Configure the priority and enable the NVIC for the transfer complete
mbed_official 235:685d5f11838f 36 interrupt on the DMA Stream using HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ()
mbed_official 235:685d5f11838f 37 (#)Initialize the HASH HAL using HAL_HASH_Init(). This function configures mainly:
mbed_official 235:685d5f11838f 38 (##) The data type: 1-bit, 8-bit, 16-bit and 32-bit.
mbed_official 235:685d5f11838f 39 (##) For HMAC, the encryption key.
mbed_official 235:685d5f11838f 40 (##) For HMAC, the key size used for encryption.
mbed_official 235:685d5f11838f 41 (#)Three processing functions are available:
mbed_official 235:685d5f11838f 42 (##) Polling mode: processing APIs are blocking functions
mbed_official 235:685d5f11838f 43 i.e. they process the data and wait till the digest computation is finished
mbed_official 235:685d5f11838f 44 e.g. HAL_HASH_SHA1_Start()
mbed_official 235:685d5f11838f 45 (##) Interrupt mode: encryption and decryption APIs are not blocking functions
mbed_official 235:685d5f11838f 46 i.e. they process the data under interrupt
mbed_official 235:685d5f11838f 47 e.g. HAL_HASH_SHA1_Start_IT()
mbed_official 235:685d5f11838f 48 (##) DMA mode: processing APIs are not blocking functions and the CPU is
mbed_official 235:685d5f11838f 49 not used for data transfer i.e. the data transfer is ensured by DMA
mbed_official 235:685d5f11838f 50 e.g. HAL_HASH_SHA1_Start_DMA()
mbed_official 235:685d5f11838f 51 (#)When the processing function is called at first time after HAL_HASH_Init()
mbed_official 235:685d5f11838f 52 the HASH peripheral is initialized and processes the buffer in input.
mbed_official 235:685d5f11838f 53 After that, the digest computation is started.
mbed_official 235:685d5f11838f 54 When processing multi-buffer use the accumulate function to write the
mbed_official 235:685d5f11838f 55 data in the peripheral without starting the digest computation. In last
mbed_official 235:685d5f11838f 56 buffer use the start function to input the last buffer ans start the digest
mbed_official 235:685d5f11838f 57 computation.
mbed_official 235:685d5f11838f 58 (##) e.g. HAL_HASH_SHA1_Accumulate() : write 1st data buffer in the peripheral without starting the digest computation
mbed_official 235:685d5f11838f 59 (##) write (n-1)th data buffer in the peripheral without starting the digest computation
mbed_official 235:685d5f11838f 60 (##) HAL_HASH_SHA1_Start() : write (n)th data buffer in the peripheral and start the digest computation
mbed_official 235:685d5f11838f 61 (#)In HMAC mode, there is no Accumulate API. Only Start API is available.
mbed_official 235:685d5f11838f 62 (#)In case of using DMA, call the DMA start processing e.g. HAL_HASH_SHA1_Start_DMA().
mbed_official 235:685d5f11838f 63 After that, call the finish function in order to get the digest value
mbed_official 235:685d5f11838f 64 e.g. HAL_HASH_SHA1_Finish()
mbed_official 235:685d5f11838f 65 (#)Call HAL_HASH_DeInit() to deinitialize the HASH peripheral.
mbed_official 235:685d5f11838f 66
mbed_official 235:685d5f11838f 67 @endverbatim
mbed_official 235:685d5f11838f 68 ******************************************************************************
mbed_official 235:685d5f11838f 69 * @attention
mbed_official 235:685d5f11838f 70 *
mbed_official 235:685d5f11838f 71 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 72 *
mbed_official 235:685d5f11838f 73 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 74 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 75 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 76 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 77 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 78 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 79 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 80 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 81 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 82 * without specific prior written permission.
mbed_official 235:685d5f11838f 83 *
mbed_official 235:685d5f11838f 84 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 85 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 86 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 87 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 88 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 89 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 90 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 91 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 92 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 93 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 94 *
mbed_official 235:685d5f11838f 95 ******************************************************************************
mbed_official 235:685d5f11838f 96 */
mbed_official 235:685d5f11838f 97
mbed_official 235:685d5f11838f 98 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 99 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 100
mbed_official 235:685d5f11838f 101 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 102 * @{
mbed_official 235:685d5f11838f 103 */
mbed_official 235:685d5f11838f 104
mbed_official 235:685d5f11838f 105 /** @defgroup HASH
mbed_official 235:685d5f11838f 106 * @brief HASH HAL module driver.
mbed_official 235:685d5f11838f 107 * @{
mbed_official 235:685d5f11838f 108 */
mbed_official 235:685d5f11838f 109
mbed_official 235:685d5f11838f 110 #ifdef HAL_HASH_MODULE_ENABLED
mbed_official 235:685d5f11838f 111
mbed_official 235:685d5f11838f 112 #if defined(STM32F415xx) || defined(STM32F417xx) || defined(STM32F437xx) || defined(STM32F439xx)
mbed_official 235:685d5f11838f 113
mbed_official 235:685d5f11838f 114 /* Private typedef -----------------------------------------------------------*/
mbed_official 235:685d5f11838f 115 /* Private define ------------------------------------------------------------*/
mbed_official 235:685d5f11838f 116 /* Private macro -------------------------------------------------------------*/
mbed_official 235:685d5f11838f 117 /* Private variables ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 118 /* Private function prototypes -----------------------------------------------*/
mbed_official 235:685d5f11838f 119 static void HASH_DMAXferCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 120 static void HASH_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 121 static void HASH_GetDigest(uint8_t *pMsgDigest, uint8_t Size);
mbed_official 235:685d5f11838f 122 static void HASH_WriteData(uint8_t *pInBuffer, uint32_t Size);
mbed_official 235:685d5f11838f 123
mbed_official 235:685d5f11838f 124 /* Private functions ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 125
mbed_official 235:685d5f11838f 126 /** @defgroup HASH_Private_Functions
mbed_official 235:685d5f11838f 127 * @{
mbed_official 235:685d5f11838f 128 */
mbed_official 235:685d5f11838f 129
mbed_official 235:685d5f11838f 130 /** @defgroup HASH_Group1 Initialization and de-initialization functions
mbed_official 235:685d5f11838f 131 * @brief Initialization and Configuration functions.
mbed_official 235:685d5f11838f 132 *
mbed_official 235:685d5f11838f 133 @verbatim
mbed_official 235:685d5f11838f 134 ===============================================================================
mbed_official 235:685d5f11838f 135 ##### Initialization and de-initialization functions #####
mbed_official 235:685d5f11838f 136 ===============================================================================
mbed_official 235:685d5f11838f 137 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 138 (+) Initialize the HASH according to the specified parameters
mbed_official 235:685d5f11838f 139 in the HASH_InitTypeDef and creates the associated handle.
mbed_official 235:685d5f11838f 140 (+) DeInitialize the HASH peripheral.
mbed_official 235:685d5f11838f 141 (+) Initialize the HASH MSP.
mbed_official 235:685d5f11838f 142 (+) DeInitialize HASH MSP.
mbed_official 235:685d5f11838f 143
mbed_official 235:685d5f11838f 144 @endverbatim
mbed_official 235:685d5f11838f 145 * @{
mbed_official 235:685d5f11838f 146 */
mbed_official 235:685d5f11838f 147
mbed_official 235:685d5f11838f 148 /**
mbed_official 235:685d5f11838f 149 * @brief Initializes the HASH according to the specified parameters in the
mbed_official 235:685d5f11838f 150 HASH_HandleTypeDef and creates the associated handle.
mbed_official 235:685d5f11838f 151 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 152 * the configuration information for HASH module
mbed_official 235:685d5f11838f 153 * @retval HAL status
mbed_official 235:685d5f11838f 154 */
mbed_official 235:685d5f11838f 155 HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 156 {
mbed_official 235:685d5f11838f 157 /* Check the hash handle allocation */
mbed_official 235:685d5f11838f 158 if(hhash == NULL)
mbed_official 235:685d5f11838f 159 {
mbed_official 235:685d5f11838f 160 return HAL_ERROR;
mbed_official 235:685d5f11838f 161 }
mbed_official 235:685d5f11838f 162
mbed_official 235:685d5f11838f 163 /* Check the parameters */
mbed_official 235:685d5f11838f 164 assert_param(IS_HASH_DATATYPE(hhash->Init.DataType));
mbed_official 235:685d5f11838f 165
mbed_official 235:685d5f11838f 166 if(hhash->State == HAL_HASH_STATE_RESET)
mbed_official 235:685d5f11838f 167 {
mbed_official 235:685d5f11838f 168 /* Init the low level hardware */
mbed_official 235:685d5f11838f 169 HAL_HASH_MspInit(hhash);
mbed_official 235:685d5f11838f 170 }
mbed_official 235:685d5f11838f 171
mbed_official 235:685d5f11838f 172 /* Change the HASH state */
mbed_official 235:685d5f11838f 173 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 174
mbed_official 235:685d5f11838f 175 /* Reset HashInCount, HashBuffSize and HashITCounter */
mbed_official 235:685d5f11838f 176 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 177 hhash->HashBuffSize = 0;
mbed_official 235:685d5f11838f 178 hhash->HashITCounter = 0;
mbed_official 235:685d5f11838f 179
mbed_official 235:685d5f11838f 180 /* Set the data type */
mbed_official 235:685d5f11838f 181 HASH->CR |= (uint32_t) (hhash->Init.DataType);
mbed_official 235:685d5f11838f 182
mbed_official 235:685d5f11838f 183 /* Change the HASH state */
mbed_official 235:685d5f11838f 184 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 185
mbed_official 235:685d5f11838f 186 /* Set the default HASH phase */
mbed_official 235:685d5f11838f 187 hhash->Phase = HAL_HASH_PHASE_READY;
mbed_official 235:685d5f11838f 188
mbed_official 235:685d5f11838f 189 /* Return function status */
mbed_official 235:685d5f11838f 190 return HAL_OK;
mbed_official 235:685d5f11838f 191 }
mbed_official 235:685d5f11838f 192
mbed_official 235:685d5f11838f 193 /**
mbed_official 235:685d5f11838f 194 * @brief DeInitializes the HASH peripheral.
mbed_official 235:685d5f11838f 195 * @note This API must be called before starting a new processing.
mbed_official 235:685d5f11838f 196 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 197 * the configuration information for HASH module
mbed_official 235:685d5f11838f 198 * @retval HAL status
mbed_official 235:685d5f11838f 199 */
mbed_official 235:685d5f11838f 200 HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 201 {
mbed_official 235:685d5f11838f 202 /* Check the HASH handle allocation */
mbed_official 235:685d5f11838f 203 if(hhash == NULL)
mbed_official 235:685d5f11838f 204 {
mbed_official 235:685d5f11838f 205 return HAL_ERROR;
mbed_official 235:685d5f11838f 206 }
mbed_official 235:685d5f11838f 207
mbed_official 235:685d5f11838f 208 /* Change the HASH state */
mbed_official 235:685d5f11838f 209 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 210
mbed_official 235:685d5f11838f 211 /* Set the default HASH phase */
mbed_official 235:685d5f11838f 212 hhash->Phase = HAL_HASH_PHASE_READY;
mbed_official 235:685d5f11838f 213
mbed_official 235:685d5f11838f 214 /* Reset HashInCount, HashBuffSize and HashITCounter */
mbed_official 235:685d5f11838f 215 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 216 hhash->HashBuffSize = 0;
mbed_official 235:685d5f11838f 217 hhash->HashITCounter = 0;
mbed_official 235:685d5f11838f 218
mbed_official 235:685d5f11838f 219 /* DeInit the low level hardware */
mbed_official 235:685d5f11838f 220 HAL_HASH_MspDeInit(hhash);
mbed_official 235:685d5f11838f 221
mbed_official 235:685d5f11838f 222 /* Change the HASH state */
mbed_official 235:685d5f11838f 223 hhash->State = HAL_HASH_STATE_RESET;
mbed_official 235:685d5f11838f 224
mbed_official 235:685d5f11838f 225 /* Release Lock */
mbed_official 235:685d5f11838f 226 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 227
mbed_official 235:685d5f11838f 228 /* Return function status */
mbed_official 235:685d5f11838f 229 return HAL_OK;
mbed_official 235:685d5f11838f 230 }
mbed_official 235:685d5f11838f 231
mbed_official 235:685d5f11838f 232 /**
mbed_official 235:685d5f11838f 233 * @brief Initializes the HASH MSP.
mbed_official 235:685d5f11838f 234 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 235 * the configuration information for HASH module
mbed_official 235:685d5f11838f 236 * @retval None
mbed_official 235:685d5f11838f 237 */
mbed_official 235:685d5f11838f 238 __weak void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 239 {
mbed_official 235:685d5f11838f 240 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 241 the HAL_HASH_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 242 */
mbed_official 235:685d5f11838f 243 }
mbed_official 235:685d5f11838f 244
mbed_official 235:685d5f11838f 245 /**
mbed_official 235:685d5f11838f 246 * @brief DeInitializes HASH MSP.
mbed_official 235:685d5f11838f 247 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 248 * the configuration information for HASH module
mbed_official 235:685d5f11838f 249 * @retval None
mbed_official 235:685d5f11838f 250 */
mbed_official 235:685d5f11838f 251 __weak void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 252 {
mbed_official 235:685d5f11838f 253 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 254 the HAL_HASH_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 255 */
mbed_official 235:685d5f11838f 256 }
mbed_official 235:685d5f11838f 257
mbed_official 235:685d5f11838f 258 /**
mbed_official 235:685d5f11838f 259 * @brief Input data transfer complete callback.
mbed_official 235:685d5f11838f 260 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 261 * the configuration information for HASH module
mbed_official 235:685d5f11838f 262 * @retval None
mbed_official 235:685d5f11838f 263 */
mbed_official 235:685d5f11838f 264 __weak void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 265 {
mbed_official 235:685d5f11838f 266 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 267 the HAL_HASH_InCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 268 */
mbed_official 235:685d5f11838f 269 }
mbed_official 235:685d5f11838f 270
mbed_official 235:685d5f11838f 271 /**
mbed_official 235:685d5f11838f 272 * @brief Data transfer Error callback.
mbed_official 235:685d5f11838f 273 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 274 * the configuration information for HASH module
mbed_official 235:685d5f11838f 275 * @retval None
mbed_official 235:685d5f11838f 276 */
mbed_official 235:685d5f11838f 277 __weak void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 278 {
mbed_official 235:685d5f11838f 279 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 280 the HAL_HASH_ErrorCallback could be implemented in the user file
mbed_official 235:685d5f11838f 281 */
mbed_official 235:685d5f11838f 282 }
mbed_official 235:685d5f11838f 283
mbed_official 235:685d5f11838f 284 /**
mbed_official 235:685d5f11838f 285 * @brief Digest computation complete callback. It is used only with interrupt.
mbed_official 235:685d5f11838f 286 * @note This callback is not relevant with DMA.
mbed_official 235:685d5f11838f 287 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 288 * the configuration information for HASH module
mbed_official 235:685d5f11838f 289 * @retval None
mbed_official 235:685d5f11838f 290 */
mbed_official 235:685d5f11838f 291 __weak void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 292 {
mbed_official 235:685d5f11838f 293 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 294 the HAL_HASH_DgstCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 295 */
mbed_official 235:685d5f11838f 296 }
mbed_official 235:685d5f11838f 297
mbed_official 235:685d5f11838f 298 /**
mbed_official 235:685d5f11838f 299 * @}
mbed_official 235:685d5f11838f 300 */
mbed_official 235:685d5f11838f 301
mbed_official 235:685d5f11838f 302 /** @defgroup HASH_Group2 HASH processing functions using polling mode
mbed_official 235:685d5f11838f 303 * @brief processing functions using polling mode
mbed_official 235:685d5f11838f 304 *
mbed_official 235:685d5f11838f 305 @verbatim
mbed_official 235:685d5f11838f 306 ===============================================================================
mbed_official 235:685d5f11838f 307 ##### HASH processing using polling mode functions#####
mbed_official 235:685d5f11838f 308 ===============================================================================
mbed_official 235:685d5f11838f 309 [..] This section provides functions allowing to calculate in polling mode
mbed_official 235:685d5f11838f 310 the hash value using one of the following algorithms:
mbed_official 235:685d5f11838f 311 (+) MD5
mbed_official 235:685d5f11838f 312 (+) SHA1
mbed_official 235:685d5f11838f 313
mbed_official 235:685d5f11838f 314 @endverbatim
mbed_official 235:685d5f11838f 315 * @{
mbed_official 235:685d5f11838f 316 */
mbed_official 235:685d5f11838f 317
mbed_official 235:685d5f11838f 318 /**
mbed_official 235:685d5f11838f 319 * @brief Initializes the HASH peripheral in MD5 mode then processes pInBuffer.
mbed_official 235:685d5f11838f 320 The digest is available in pOutBuffer.
mbed_official 235:685d5f11838f 321 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 322 * the configuration information for HASH module
mbed_official 235:685d5f11838f 323 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 324 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 325 * If the Size is multiple of 64 bytes, appending the input buffer is possible.
mbed_official 235:685d5f11838f 326 * If the Size is not multiple of 64 bytes, the padding is managed by hardware
mbed_official 235:685d5f11838f 327 * and appending the input buffer is no more possible.
mbed_official 235:685d5f11838f 328 * @param pOutBuffer: Pointer to the computed digest. Its size must be 16 bytes.
mbed_official 235:685d5f11838f 329 * @param Timeout: Timeout value
mbed_official 235:685d5f11838f 330 * @retval HAL status
mbed_official 235:685d5f11838f 331 */
mbed_official 235:685d5f11838f 332 HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout)
mbed_official 235:685d5f11838f 333 {
mbed_official 235:685d5f11838f 334 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 335
mbed_official 235:685d5f11838f 336 /* Process Locked */
mbed_official 235:685d5f11838f 337 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 338
mbed_official 235:685d5f11838f 339 /* Change the HASH state */
mbed_official 235:685d5f11838f 340 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 341
mbed_official 235:685d5f11838f 342 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 343 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 344 {
mbed_official 235:685d5f11838f 345 /* Select the MD5 mode and reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 346 the message digest of a new message */
mbed_official 235:685d5f11838f 347 HASH->CR |= HASH_AlgoSelection_MD5 | HASH_CR_INIT;
mbed_official 235:685d5f11838f 348 }
mbed_official 235:685d5f11838f 349
mbed_official 235:685d5f11838f 350 /* Set the phase */
mbed_official 235:685d5f11838f 351 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 352
mbed_official 235:685d5f11838f 353 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 354 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 355
mbed_official 235:685d5f11838f 356 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 357 HASH_WriteData(pInBuffer, Size);
mbed_official 235:685d5f11838f 358
mbed_official 235:685d5f11838f 359 /* Start the digest calculation */
mbed_official 235:685d5f11838f 360 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 361
mbed_official 235:685d5f11838f 362 /* Get tick */
mbed_official 235:685d5f11838f 363 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 364
mbed_official 235:685d5f11838f 365 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 366 {
mbed_official 235:685d5f11838f 367 /* Check for the Timeout */
mbed_official 235:685d5f11838f 368 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 369 {
mbed_official 235:685d5f11838f 370 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 371 {
mbed_official 235:685d5f11838f 372 /* Change state */
mbed_official 235:685d5f11838f 373 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 374
mbed_official 235:685d5f11838f 375 /* Process Unlocked */
mbed_official 235:685d5f11838f 376 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 377
mbed_official 235:685d5f11838f 378 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 379 }
mbed_official 235:685d5f11838f 380 }
mbed_official 235:685d5f11838f 381 }
mbed_official 235:685d5f11838f 382
mbed_official 235:685d5f11838f 383 /* Read the message digest */
mbed_official 235:685d5f11838f 384 HASH_GetDigest(pOutBuffer, 16);
mbed_official 235:685d5f11838f 385
mbed_official 235:685d5f11838f 386 /* Change the HASH state */
mbed_official 235:685d5f11838f 387 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 388
mbed_official 235:685d5f11838f 389 /* Process Unlocked */
mbed_official 235:685d5f11838f 390 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 391
mbed_official 235:685d5f11838f 392 /* Return function status */
mbed_official 235:685d5f11838f 393 return HAL_OK;
mbed_official 235:685d5f11838f 394 }
mbed_official 235:685d5f11838f 395
mbed_official 235:685d5f11838f 396 /**
mbed_official 235:685d5f11838f 397 * @brief Initializes the HASH peripheral in MD5 mode then writes the pInBuffer.
mbed_official 235:685d5f11838f 398 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 399 * the configuration information for HASH module
mbed_official 235:685d5f11838f 400 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 401 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 402 * If the Size is multiple of 64 bytes, appending the input buffer is possible.
mbed_official 235:685d5f11838f 403 * If the Size is not multiple of 64 bytes, the padding is managed by hardware
mbed_official 235:685d5f11838f 404 * and appending the input buffer is no more possible.
mbed_official 235:685d5f11838f 405 * @retval HAL status
mbed_official 235:685d5f11838f 406 */
mbed_official 235:685d5f11838f 407 HAL_StatusTypeDef HAL_HASH_MD5_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 408 {
mbed_official 235:685d5f11838f 409 /* Process Locked */
mbed_official 235:685d5f11838f 410 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 411
mbed_official 235:685d5f11838f 412 /* Change the HASH state */
mbed_official 235:685d5f11838f 413 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 414
mbed_official 235:685d5f11838f 415 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 416 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 417 {
mbed_official 235:685d5f11838f 418 /* Select the MD5 mode and reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 419 the message digest of a new message */
mbed_official 235:685d5f11838f 420 HASH->CR |= HASH_AlgoSelection_MD5 | HASH_CR_INIT;
mbed_official 235:685d5f11838f 421 }
mbed_official 235:685d5f11838f 422
mbed_official 235:685d5f11838f 423 /* Set the phase */
mbed_official 235:685d5f11838f 424 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 425
mbed_official 235:685d5f11838f 426 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 427 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 428
mbed_official 235:685d5f11838f 429 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 430 HASH_WriteData(pInBuffer, Size);
mbed_official 235:685d5f11838f 431
mbed_official 235:685d5f11838f 432 /* Change the HASH state */
mbed_official 235:685d5f11838f 433 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 434
mbed_official 235:685d5f11838f 435 /* Process Unlocked */
mbed_official 235:685d5f11838f 436 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 437
mbed_official 235:685d5f11838f 438 /* Return function status */
mbed_official 235:685d5f11838f 439 return HAL_OK;
mbed_official 235:685d5f11838f 440 }
mbed_official 235:685d5f11838f 441
mbed_official 235:685d5f11838f 442 /**
mbed_official 235:685d5f11838f 443 * @brief Initializes the HASH peripheral in SHA1 mode then processes pInBuffer.
mbed_official 235:685d5f11838f 444 The digest is available in pOutBuffer.
mbed_official 235:685d5f11838f 445 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 446 * the configuration information for HASH module
mbed_official 235:685d5f11838f 447 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 448 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 449 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 450 * @param pOutBuffer: Pointer to the computed digest. Its size must be 20 bytes.
mbed_official 235:685d5f11838f 451 * @param Timeout: Timeout value
mbed_official 235:685d5f11838f 452 * @retval HAL status
mbed_official 235:685d5f11838f 453 */
mbed_official 235:685d5f11838f 454 HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout)
mbed_official 235:685d5f11838f 455 {
mbed_official 235:685d5f11838f 456 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 457
mbed_official 235:685d5f11838f 458 /* Process Locked */
mbed_official 235:685d5f11838f 459 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 460
mbed_official 235:685d5f11838f 461 /* Change the HASH state */
mbed_official 235:685d5f11838f 462 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 463
mbed_official 235:685d5f11838f 464 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 465 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 466 {
mbed_official 235:685d5f11838f 467 /* Select the SHA1 mode and reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 468 the message digest of a new message */
mbed_official 235:685d5f11838f 469 HASH->CR |= HASH_AlgoSelection_SHA1 | HASH_CR_INIT;
mbed_official 235:685d5f11838f 470 }
mbed_official 235:685d5f11838f 471
mbed_official 235:685d5f11838f 472 /* Set the phase */
mbed_official 235:685d5f11838f 473 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 474
mbed_official 235:685d5f11838f 475 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 476 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 477
mbed_official 235:685d5f11838f 478 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 479 HASH_WriteData(pInBuffer, Size);
mbed_official 235:685d5f11838f 480
mbed_official 235:685d5f11838f 481 /* Start the digest calculation */
mbed_official 235:685d5f11838f 482 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 483
mbed_official 235:685d5f11838f 484 /* Get tick */
mbed_official 235:685d5f11838f 485 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 486
mbed_official 235:685d5f11838f 487 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 488 {
mbed_official 235:685d5f11838f 489 /* Check for the Timeout */
mbed_official 235:685d5f11838f 490 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 491 {
mbed_official 235:685d5f11838f 492 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 493 {
mbed_official 235:685d5f11838f 494 /* Change state */
mbed_official 235:685d5f11838f 495 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 496
mbed_official 235:685d5f11838f 497 /* Process Unlocked */
mbed_official 235:685d5f11838f 498 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 499
mbed_official 235:685d5f11838f 500 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 501 }
mbed_official 235:685d5f11838f 502 }
mbed_official 235:685d5f11838f 503 }
mbed_official 235:685d5f11838f 504
mbed_official 235:685d5f11838f 505 /* Read the message digest */
mbed_official 235:685d5f11838f 506 HASH_GetDigest(pOutBuffer, 20);
mbed_official 235:685d5f11838f 507
mbed_official 235:685d5f11838f 508 /* Change the HASH state */
mbed_official 235:685d5f11838f 509 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 510
mbed_official 235:685d5f11838f 511 /* Process Unlocked */
mbed_official 235:685d5f11838f 512 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 513
mbed_official 235:685d5f11838f 514 /* Return function status */
mbed_official 235:685d5f11838f 515 return HAL_OK;
mbed_official 235:685d5f11838f 516 }
mbed_official 235:685d5f11838f 517
mbed_official 235:685d5f11838f 518 /**
mbed_official 235:685d5f11838f 519 * @brief Initializes the HASH peripheral in SHA1 mode then processes pInBuffer.
mbed_official 235:685d5f11838f 520 The digest is available in pOutBuffer.
mbed_official 235:685d5f11838f 521 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 522 * the configuration information for HASH module
mbed_official 235:685d5f11838f 523 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 524 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 525 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 526 * @param pOutBuffer: Pointer to the computed digest. Its size must be 20 bytes.
mbed_official 235:685d5f11838f 527 * @retval HAL status
mbed_official 235:685d5f11838f 528 */
mbed_official 235:685d5f11838f 529 HAL_StatusTypeDef HAL_HASH_SHA1_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 530 {
mbed_official 235:685d5f11838f 531 /* Process Locked */
mbed_official 235:685d5f11838f 532 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 533
mbed_official 235:685d5f11838f 534 /* Change the HASH state */
mbed_official 235:685d5f11838f 535 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 536
mbed_official 235:685d5f11838f 537 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 538 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 539 {
mbed_official 235:685d5f11838f 540 /* Select the SHA1 mode and reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 541 the message digest of a new message */
mbed_official 235:685d5f11838f 542 HASH->CR |= HASH_AlgoSelection_SHA1 | HASH_CR_INIT;
mbed_official 235:685d5f11838f 543 }
mbed_official 235:685d5f11838f 544
mbed_official 235:685d5f11838f 545 /* Set the phase */
mbed_official 235:685d5f11838f 546 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 547
mbed_official 235:685d5f11838f 548 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 549 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 550
mbed_official 235:685d5f11838f 551 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 552 HASH_WriteData(pInBuffer, Size);
mbed_official 235:685d5f11838f 553
mbed_official 235:685d5f11838f 554 /* Change the HASH state */
mbed_official 235:685d5f11838f 555 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 556
mbed_official 235:685d5f11838f 557 /* Process Unlocked */
mbed_official 235:685d5f11838f 558 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 559
mbed_official 235:685d5f11838f 560 /* Return function status */
mbed_official 235:685d5f11838f 561 return HAL_OK;
mbed_official 235:685d5f11838f 562 }
mbed_official 235:685d5f11838f 563
mbed_official 235:685d5f11838f 564 /**
mbed_official 235:685d5f11838f 565 * @}
mbed_official 235:685d5f11838f 566 */
mbed_official 235:685d5f11838f 567
mbed_official 235:685d5f11838f 568 /** @defgroup HASH_Group3 HASH processing functions using interrupt mode
mbed_official 235:685d5f11838f 569 * @brief processing functions using interrupt mode.
mbed_official 235:685d5f11838f 570 *
mbed_official 235:685d5f11838f 571 @verbatim
mbed_official 235:685d5f11838f 572 ===============================================================================
mbed_official 235:685d5f11838f 573 ##### HASH processing using interrupt mode functions #####
mbed_official 235:685d5f11838f 574 ===============================================================================
mbed_official 235:685d5f11838f 575 [..] This section provides functions allowing to calculate in interrupt mode
mbed_official 235:685d5f11838f 576 the hash value using one of the following algorithms:
mbed_official 235:685d5f11838f 577 (+) MD5
mbed_official 235:685d5f11838f 578 (+) SHA1
mbed_official 235:685d5f11838f 579
mbed_official 235:685d5f11838f 580 @endverbatim
mbed_official 235:685d5f11838f 581 * @{
mbed_official 235:685d5f11838f 582 */
mbed_official 235:685d5f11838f 583
mbed_official 235:685d5f11838f 584 /**
mbed_official 235:685d5f11838f 585 * @brief Initializes the HASH peripheral in MD5 mode then processes pInBuffer.
mbed_official 235:685d5f11838f 586 * The digest is available in pOutBuffer.
mbed_official 235:685d5f11838f 587 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 588 * the configuration information for HASH module
mbed_official 235:685d5f11838f 589 * @param pOutBuffer: Pointer to the Output buffer (hashed buffer).
mbed_official 235:685d5f11838f 590 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 591 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 592 * @param pOutBuffer: Pointer to the computed digest. Its size must be 16 bytes.
mbed_official 235:685d5f11838f 593 * @retval HAL status
mbed_official 235:685d5f11838f 594 */
mbed_official 235:685d5f11838f 595 HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer)
mbed_official 235:685d5f11838f 596 {
mbed_official 235:685d5f11838f 597 uint32_t inputaddr;
mbed_official 235:685d5f11838f 598 uint32_t outputaddr;
mbed_official 235:685d5f11838f 599 uint32_t buffercounter;
mbed_official 235:685d5f11838f 600 uint32_t inputcounter;
mbed_official 235:685d5f11838f 601
mbed_official 235:685d5f11838f 602 /* Process Locked */
mbed_official 235:685d5f11838f 603 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 604
mbed_official 235:685d5f11838f 605 if(hhash->HashITCounter == 0)
mbed_official 235:685d5f11838f 606 {
mbed_official 235:685d5f11838f 607 hhash->HashITCounter = 1;
mbed_official 235:685d5f11838f 608 }
mbed_official 235:685d5f11838f 609 else
mbed_official 235:685d5f11838f 610 {
mbed_official 235:685d5f11838f 611 hhash->HashITCounter = 0;
mbed_official 235:685d5f11838f 612 }
mbed_official 235:685d5f11838f 613 if(hhash->State == HAL_HASH_STATE_READY)
mbed_official 235:685d5f11838f 614 {
mbed_official 235:685d5f11838f 615 /* Change the HASH state */
mbed_official 235:685d5f11838f 616 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 617
mbed_official 235:685d5f11838f 618 hhash->HashInCount = Size;
mbed_official 235:685d5f11838f 619 hhash->pHashInBuffPtr = pInBuffer;
mbed_official 235:685d5f11838f 620 hhash->pHashOutBuffPtr = pOutBuffer;
mbed_official 235:685d5f11838f 621
mbed_official 235:685d5f11838f 622 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 623 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 624 {
mbed_official 235:685d5f11838f 625 /* Select the SHA1 mode */
mbed_official 235:685d5f11838f 626 HASH->CR |= HASH_AlgoSelection_MD5;
mbed_official 235:685d5f11838f 627 /* Reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 628 the message digest of a new message */
mbed_official 235:685d5f11838f 629 HASH->CR |= HASH_CR_INIT;
mbed_official 235:685d5f11838f 630 }
mbed_official 235:685d5f11838f 631
mbed_official 235:685d5f11838f 632 /* Set the phase */
mbed_official 235:685d5f11838f 633 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 634
mbed_official 235:685d5f11838f 635 /* Process Unlocked */
mbed_official 235:685d5f11838f 636 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 637
mbed_official 235:685d5f11838f 638 /* Enable Interrupts */
mbed_official 235:685d5f11838f 639 HASH->IMR = (HASH_IT_DINI | HASH_IT_DCI);
mbed_official 235:685d5f11838f 640
mbed_official 235:685d5f11838f 641 /* Return function status */
mbed_official 235:685d5f11838f 642 return HAL_OK;
mbed_official 235:685d5f11838f 643 }
mbed_official 235:685d5f11838f 644 if(__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS))
mbed_official 235:685d5f11838f 645 {
mbed_official 235:685d5f11838f 646 outputaddr = (uint32_t)hhash->pHashOutBuffPtr;
mbed_official 235:685d5f11838f 647 /* Read the Output block from the Output FIFO */
mbed_official 235:685d5f11838f 648 *(uint32_t*)(outputaddr) = __REV(HASH->HR[0]);
mbed_official 235:685d5f11838f 649 outputaddr+=4;
mbed_official 235:685d5f11838f 650 *(uint32_t*)(outputaddr) = __REV(HASH->HR[1]);
mbed_official 235:685d5f11838f 651 outputaddr+=4;
mbed_official 235:685d5f11838f 652 *(uint32_t*)(outputaddr) = __REV(HASH->HR[2]);
mbed_official 235:685d5f11838f 653 outputaddr+=4;
mbed_official 235:685d5f11838f 654 *(uint32_t*)(outputaddr) = __REV(HASH->HR[3]);
mbed_official 235:685d5f11838f 655
mbed_official 235:685d5f11838f 656 if(hhash->HashInCount == 0)
mbed_official 235:685d5f11838f 657 {
mbed_official 235:685d5f11838f 658 /* Disable Interrupts */
mbed_official 235:685d5f11838f 659 HASH->IMR = 0;
mbed_official 235:685d5f11838f 660 /* Change the HASH state */
mbed_official 235:685d5f11838f 661 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 662 /* Call digest computation complete callback */
mbed_official 235:685d5f11838f 663 HAL_HASH_DgstCpltCallback(hhash);
mbed_official 235:685d5f11838f 664 }
mbed_official 235:685d5f11838f 665 }
mbed_official 235:685d5f11838f 666 if(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
mbed_official 235:685d5f11838f 667 {
mbed_official 235:685d5f11838f 668 if(hhash->HashInCount > 64)
mbed_official 235:685d5f11838f 669 {
mbed_official 235:685d5f11838f 670 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
mbed_official 235:685d5f11838f 671 /* Write the Input block in the Data IN register */
mbed_official 235:685d5f11838f 672 for(buffercounter = 0; buffercounter < 64; buffercounter+=4)
mbed_official 235:685d5f11838f 673 {
mbed_official 235:685d5f11838f 674 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 675 }
mbed_official 235:685d5f11838f 676 if(hhash->HashITCounter == 0)
mbed_official 235:685d5f11838f 677 {
mbed_official 235:685d5f11838f 678 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 679
mbed_official 235:685d5f11838f 680 if(hhash->HashInCount >= 68)
mbed_official 235:685d5f11838f 681 {
mbed_official 235:685d5f11838f 682 /* Decrement buffer counter */
mbed_official 235:685d5f11838f 683 hhash->HashInCount -= 68;
mbed_official 235:685d5f11838f 684 hhash->pHashInBuffPtr+= 68;
mbed_official 235:685d5f11838f 685 }
mbed_official 235:685d5f11838f 686 else
mbed_official 235:685d5f11838f 687 {
mbed_official 235:685d5f11838f 688 hhash->HashInCount -= 64;
mbed_official 235:685d5f11838f 689 }
mbed_official 235:685d5f11838f 690 }
mbed_official 235:685d5f11838f 691 else
mbed_official 235:685d5f11838f 692 {
mbed_official 235:685d5f11838f 693 /* Decrement buffer counter */
mbed_official 235:685d5f11838f 694 hhash->HashInCount -= 64;
mbed_official 235:685d5f11838f 695 hhash->pHashInBuffPtr+= 64;
mbed_official 235:685d5f11838f 696 }
mbed_official 235:685d5f11838f 697 }
mbed_official 235:685d5f11838f 698 else
mbed_official 235:685d5f11838f 699 {
mbed_official 235:685d5f11838f 700 /* Get the buffer address */
mbed_official 235:685d5f11838f 701 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
mbed_official 235:685d5f11838f 702 /* Get the buffer counter */
mbed_official 235:685d5f11838f 703 inputcounter = hhash->HashInCount;
mbed_official 235:685d5f11838f 704 /* Disable Interrupts */
mbed_official 235:685d5f11838f 705 HASH->IMR &= ~(HASH_IT_DINI);
mbed_official 235:685d5f11838f 706 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 707 __HAL_HASH_SET_NBVALIDBITS(inputcounter);
mbed_official 235:685d5f11838f 708
mbed_official 235:685d5f11838f 709 if((inputcounter > 4) && (inputcounter%4))
mbed_official 235:685d5f11838f 710 {
mbed_official 235:685d5f11838f 711 inputcounter = (inputcounter+4-inputcounter%4);
mbed_official 235:685d5f11838f 712 }
mbed_official 235:685d5f11838f 713
mbed_official 235:685d5f11838f 714 /* Write the Input block in the Data IN register */
mbed_official 235:685d5f11838f 715 for(buffercounter = 0; buffercounter < inputcounter/4; buffercounter++)
mbed_official 235:685d5f11838f 716 {
mbed_official 235:685d5f11838f 717 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 718 inputaddr+=4;
mbed_official 235:685d5f11838f 719 }
mbed_official 235:685d5f11838f 720 /* Start the digest calculation */
mbed_official 235:685d5f11838f 721 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 722 /* Reset buffer counter */
mbed_official 235:685d5f11838f 723 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 724 }
mbed_official 235:685d5f11838f 725 /* Call Input data transfer complete callback */
mbed_official 235:685d5f11838f 726 HAL_HASH_InCpltCallback(hhash);
mbed_official 235:685d5f11838f 727 }
mbed_official 235:685d5f11838f 728
mbed_official 235:685d5f11838f 729 /* Process Unlocked */
mbed_official 235:685d5f11838f 730 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 731
mbed_official 235:685d5f11838f 732 /* Return function status */
mbed_official 235:685d5f11838f 733 return HAL_OK;
mbed_official 235:685d5f11838f 734 }
mbed_official 235:685d5f11838f 735
mbed_official 235:685d5f11838f 736 /**
mbed_official 235:685d5f11838f 737 * @brief Initializes the HASH peripheral in SHA1 mode then processes pInBuffer.
mbed_official 235:685d5f11838f 738 * The digest is available in pOutBuffer.
mbed_official 235:685d5f11838f 739 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 740 * the configuration information for HASH module
mbed_official 235:685d5f11838f 741 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 742 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 743 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 744 * @param pOutBuffer: Pointer to the computed digest. Its size must be 20 bytes.
mbed_official 235:685d5f11838f 745 * @retval HAL status
mbed_official 235:685d5f11838f 746 */
mbed_official 235:685d5f11838f 747 HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer)
mbed_official 235:685d5f11838f 748 {
mbed_official 235:685d5f11838f 749 uint32_t inputaddr;
mbed_official 235:685d5f11838f 750 uint32_t outputaddr;
mbed_official 235:685d5f11838f 751 uint32_t buffercounter;
mbed_official 235:685d5f11838f 752 uint32_t inputcounter;
mbed_official 235:685d5f11838f 753
mbed_official 235:685d5f11838f 754 /* Process Locked */
mbed_official 235:685d5f11838f 755 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 756
mbed_official 235:685d5f11838f 757 if(hhash->HashITCounter == 0)
mbed_official 235:685d5f11838f 758 {
mbed_official 235:685d5f11838f 759 hhash->HashITCounter = 1;
mbed_official 235:685d5f11838f 760 }
mbed_official 235:685d5f11838f 761 else
mbed_official 235:685d5f11838f 762 {
mbed_official 235:685d5f11838f 763 hhash->HashITCounter = 0;
mbed_official 235:685d5f11838f 764 }
mbed_official 235:685d5f11838f 765 if(hhash->State == HAL_HASH_STATE_READY)
mbed_official 235:685d5f11838f 766 {
mbed_official 235:685d5f11838f 767 /* Change the HASH state */
mbed_official 235:685d5f11838f 768 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 769
mbed_official 235:685d5f11838f 770 hhash->HashInCount = Size;
mbed_official 235:685d5f11838f 771 hhash->pHashInBuffPtr = pInBuffer;
mbed_official 235:685d5f11838f 772 hhash->pHashOutBuffPtr = pOutBuffer;
mbed_official 235:685d5f11838f 773
mbed_official 235:685d5f11838f 774 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 775 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 776 {
mbed_official 235:685d5f11838f 777 /* Select the SHA1 mode */
mbed_official 235:685d5f11838f 778 HASH->CR |= HASH_AlgoSelection_SHA1;
mbed_official 235:685d5f11838f 779 /* Reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 780 the message digest of a new message */
mbed_official 235:685d5f11838f 781 HASH->CR |= HASH_CR_INIT;
mbed_official 235:685d5f11838f 782 }
mbed_official 235:685d5f11838f 783
mbed_official 235:685d5f11838f 784 /* Set the phase */
mbed_official 235:685d5f11838f 785 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 786
mbed_official 235:685d5f11838f 787 /* Process Unlocked */
mbed_official 235:685d5f11838f 788 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 789
mbed_official 235:685d5f11838f 790 /* Enable Interrupts */
mbed_official 235:685d5f11838f 791 HASH->IMR = (HASH_IT_DINI | HASH_IT_DCI);
mbed_official 235:685d5f11838f 792
mbed_official 235:685d5f11838f 793 /* Return function status */
mbed_official 235:685d5f11838f 794 return HAL_OK;
mbed_official 235:685d5f11838f 795 }
mbed_official 235:685d5f11838f 796 if(__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS))
mbed_official 235:685d5f11838f 797 {
mbed_official 235:685d5f11838f 798 outputaddr = (uint32_t)hhash->pHashOutBuffPtr;
mbed_official 235:685d5f11838f 799 /* Read the Output block from the Output FIFO */
mbed_official 235:685d5f11838f 800 *(uint32_t*)(outputaddr) = __REV(HASH->HR[0]);
mbed_official 235:685d5f11838f 801 outputaddr+=4;
mbed_official 235:685d5f11838f 802 *(uint32_t*)(outputaddr) = __REV(HASH->HR[1]);
mbed_official 235:685d5f11838f 803 outputaddr+=4;
mbed_official 235:685d5f11838f 804 *(uint32_t*)(outputaddr) = __REV(HASH->HR[2]);
mbed_official 235:685d5f11838f 805 outputaddr+=4;
mbed_official 235:685d5f11838f 806 *(uint32_t*)(outputaddr) = __REV(HASH->HR[3]);
mbed_official 235:685d5f11838f 807 outputaddr+=4;
mbed_official 235:685d5f11838f 808 *(uint32_t*)(outputaddr) = __REV(HASH->HR[4]);
mbed_official 235:685d5f11838f 809 if(hhash->HashInCount == 0)
mbed_official 235:685d5f11838f 810 {
mbed_official 235:685d5f11838f 811 /* Disable Interrupts */
mbed_official 235:685d5f11838f 812 HASH->IMR = 0;
mbed_official 235:685d5f11838f 813 /* Change the HASH state */
mbed_official 235:685d5f11838f 814 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 815 /* Call digest computation complete callback */
mbed_official 235:685d5f11838f 816 HAL_HASH_DgstCpltCallback(hhash);
mbed_official 235:685d5f11838f 817 }
mbed_official 235:685d5f11838f 818 }
mbed_official 235:685d5f11838f 819 if(__HAL_HASH_GET_FLAG(HASH_FLAG_DINIS))
mbed_official 235:685d5f11838f 820 {
mbed_official 235:685d5f11838f 821 if(hhash->HashInCount > 64)
mbed_official 235:685d5f11838f 822 {
mbed_official 235:685d5f11838f 823 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
mbed_official 235:685d5f11838f 824 /* Write the Input block in the Data IN register */
mbed_official 235:685d5f11838f 825 for(buffercounter = 0; buffercounter < 64; buffercounter+=4)
mbed_official 235:685d5f11838f 826 {
mbed_official 235:685d5f11838f 827 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 828 inputaddr+=4;
mbed_official 235:685d5f11838f 829 }
mbed_official 235:685d5f11838f 830 if(hhash->HashITCounter == 0)
mbed_official 235:685d5f11838f 831 {
mbed_official 235:685d5f11838f 832 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 833
mbed_official 235:685d5f11838f 834 if(hhash->HashInCount >= 68)
mbed_official 235:685d5f11838f 835 {
mbed_official 235:685d5f11838f 836 /* Decrement buffer counter */
mbed_official 235:685d5f11838f 837 hhash->HashInCount -= 68;
mbed_official 235:685d5f11838f 838 hhash->pHashInBuffPtr+= 68;
mbed_official 235:685d5f11838f 839 }
mbed_official 235:685d5f11838f 840 else
mbed_official 235:685d5f11838f 841 {
mbed_official 235:685d5f11838f 842 hhash->HashInCount -= 64;
mbed_official 235:685d5f11838f 843 }
mbed_official 235:685d5f11838f 844 }
mbed_official 235:685d5f11838f 845 else
mbed_official 235:685d5f11838f 846 {
mbed_official 235:685d5f11838f 847 /* Decrement buffer counter */
mbed_official 235:685d5f11838f 848 hhash->HashInCount -= 64;
mbed_official 235:685d5f11838f 849 hhash->pHashInBuffPtr+= 64;
mbed_official 235:685d5f11838f 850 }
mbed_official 235:685d5f11838f 851 }
mbed_official 235:685d5f11838f 852 else
mbed_official 235:685d5f11838f 853 {
mbed_official 235:685d5f11838f 854 /* Get the buffer address */
mbed_official 235:685d5f11838f 855 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
mbed_official 235:685d5f11838f 856 /* Get the buffer counter */
mbed_official 235:685d5f11838f 857 inputcounter = hhash->HashInCount;
mbed_official 235:685d5f11838f 858 /* Disable Interrupts */
mbed_official 235:685d5f11838f 859 HASH->IMR &= ~(HASH_IT_DINI);
mbed_official 235:685d5f11838f 860 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 861 __HAL_HASH_SET_NBVALIDBITS(inputcounter);
mbed_official 235:685d5f11838f 862
mbed_official 235:685d5f11838f 863 if((inputcounter > 4) && (inputcounter%4))
mbed_official 235:685d5f11838f 864 {
mbed_official 235:685d5f11838f 865 inputcounter = (inputcounter+4-inputcounter%4);
mbed_official 235:685d5f11838f 866 }
mbed_official 235:685d5f11838f 867
mbed_official 235:685d5f11838f 868 /* Write the Input block in the Data IN register */
mbed_official 235:685d5f11838f 869 for(buffercounter = 0; buffercounter < inputcounter/4; buffercounter++)
mbed_official 235:685d5f11838f 870 {
mbed_official 235:685d5f11838f 871 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 872 inputaddr+=4;
mbed_official 235:685d5f11838f 873 }
mbed_official 235:685d5f11838f 874 /* Start the digest calculation */
mbed_official 235:685d5f11838f 875 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 876 /* Reset buffer counter */
mbed_official 235:685d5f11838f 877 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 878 }
mbed_official 235:685d5f11838f 879 /* Call Input data transfer complete callback */
mbed_official 235:685d5f11838f 880 HAL_HASH_InCpltCallback(hhash);
mbed_official 235:685d5f11838f 881 }
mbed_official 235:685d5f11838f 882
mbed_official 235:685d5f11838f 883 /* Process Unlocked */
mbed_official 235:685d5f11838f 884 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 885
mbed_official 235:685d5f11838f 886 /* Return function status */
mbed_official 235:685d5f11838f 887 return HAL_OK;
mbed_official 235:685d5f11838f 888 }
mbed_official 235:685d5f11838f 889
mbed_official 235:685d5f11838f 890 /**
mbed_official 235:685d5f11838f 891 * @brief This function handles HASH interrupt request.
mbed_official 235:685d5f11838f 892 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 893 * the configuration information for HASH module
mbed_official 235:685d5f11838f 894 * @retval None
mbed_official 235:685d5f11838f 895 */
mbed_official 235:685d5f11838f 896 void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 897 {
mbed_official 235:685d5f11838f 898 switch(HASH->CR & HASH_CR_ALGO)
mbed_official 235:685d5f11838f 899 {
mbed_official 235:685d5f11838f 900 case HASH_AlgoSelection_MD5:
mbed_official 235:685d5f11838f 901 HAL_HASH_MD5_Start_IT(hhash, NULL, 0, NULL);
mbed_official 235:685d5f11838f 902 break;
mbed_official 235:685d5f11838f 903
mbed_official 235:685d5f11838f 904 case HASH_AlgoSelection_SHA1:
mbed_official 235:685d5f11838f 905 HAL_HASH_SHA1_Start_IT(hhash, NULL, 0, NULL);
mbed_official 235:685d5f11838f 906 break;
mbed_official 235:685d5f11838f 907
mbed_official 235:685d5f11838f 908 default:
mbed_official 235:685d5f11838f 909 break;
mbed_official 235:685d5f11838f 910 }
mbed_official 235:685d5f11838f 911 }
mbed_official 235:685d5f11838f 912
mbed_official 235:685d5f11838f 913 /**
mbed_official 235:685d5f11838f 914 * @}
mbed_official 235:685d5f11838f 915 */
mbed_official 235:685d5f11838f 916
mbed_official 235:685d5f11838f 917 /** @defgroup HASH_Group4 HASH processing functions using DMA mode
mbed_official 235:685d5f11838f 918 * @brief processing functions using DMA mode.
mbed_official 235:685d5f11838f 919 *
mbed_official 235:685d5f11838f 920 @verbatim
mbed_official 235:685d5f11838f 921 ===============================================================================
mbed_official 235:685d5f11838f 922 ##### HASH processing using DMA mode functions #####
mbed_official 235:685d5f11838f 923 ===============================================================================
mbed_official 235:685d5f11838f 924 [..] This section provides functions allowing to calculate in DMA mode
mbed_official 235:685d5f11838f 925 the hash value using one of the following algorithms:
mbed_official 235:685d5f11838f 926 (+) MD5
mbed_official 235:685d5f11838f 927 (+) SHA1
mbed_official 235:685d5f11838f 928
mbed_official 235:685d5f11838f 929 @endverbatim
mbed_official 235:685d5f11838f 930 * @{
mbed_official 235:685d5f11838f 931 */
mbed_official 235:685d5f11838f 932
mbed_official 235:685d5f11838f 933 /**
mbed_official 235:685d5f11838f 934 * @brief Initializes the HASH peripheral in MD5 mode then enables DMA to
mbed_official 235:685d5f11838f 935 control data transfer. Use HAL_HASH_MD5_Finish() to get the digest.
mbed_official 235:685d5f11838f 936 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 937 * the configuration information for HASH module
mbed_official 235:685d5f11838f 938 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 939 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 940 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 941 * @retval HAL status
mbed_official 235:685d5f11838f 942 */
mbed_official 235:685d5f11838f 943 HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 944 {
mbed_official 235:685d5f11838f 945 uint32_t inputaddr = (uint32_t)pInBuffer;
mbed_official 235:685d5f11838f 946
mbed_official 235:685d5f11838f 947 /* Process Locked */
mbed_official 235:685d5f11838f 948 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 949
mbed_official 235:685d5f11838f 950 /* Change the HASH state */
mbed_official 235:685d5f11838f 951 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 952
mbed_official 235:685d5f11838f 953 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 954 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 955 {
mbed_official 235:685d5f11838f 956 /* Select the MD5 mode and reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 957 the message digest of a new message */
mbed_official 235:685d5f11838f 958 HASH->CR |= HASH_AlgoSelection_MD5 | HASH_CR_INIT;
mbed_official 235:685d5f11838f 959 }
mbed_official 235:685d5f11838f 960
mbed_official 235:685d5f11838f 961 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 962 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 963
mbed_official 235:685d5f11838f 964 /* Set the phase */
mbed_official 235:685d5f11838f 965 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 966
mbed_official 235:685d5f11838f 967 /* Set the HASH DMA transfer complete callback */
mbed_official 235:685d5f11838f 968 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
mbed_official 235:685d5f11838f 969 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 970 hhash->hdmain->XferErrorCallback = HASH_DMAError;
mbed_official 235:685d5f11838f 971
mbed_official 235:685d5f11838f 972 /* Enable the DMA In DMA Stream */
mbed_official 235:685d5f11838f 973 HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (Size%4 ? (Size+3)/4:Size/4));
mbed_official 235:685d5f11838f 974
mbed_official 235:685d5f11838f 975 /* Enable DMA requests */
mbed_official 235:685d5f11838f 976 HASH->CR |= (HASH_CR_DMAE);
mbed_official 235:685d5f11838f 977
mbed_official 235:685d5f11838f 978 /* Process Unlocked */
mbed_official 235:685d5f11838f 979 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 980
mbed_official 235:685d5f11838f 981 /* Return function status */
mbed_official 235:685d5f11838f 982 return HAL_OK;
mbed_official 235:685d5f11838f 983 }
mbed_official 235:685d5f11838f 984
mbed_official 235:685d5f11838f 985 /**
mbed_official 235:685d5f11838f 986 * @brief Returns the computed digest in MD5 mode
mbed_official 235:685d5f11838f 987 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 988 * the configuration information for HASH module
mbed_official 235:685d5f11838f 989 * @param pOutBuffer: Pointer to the computed digest. Its size must be 16 bytes.
mbed_official 235:685d5f11838f 990 * @param Timeout: Timeout value
mbed_official 235:685d5f11838f 991 * @retval HAL status
mbed_official 235:685d5f11838f 992 */
mbed_official 235:685d5f11838f 993 HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout)
mbed_official 235:685d5f11838f 994 {
mbed_official 235:685d5f11838f 995 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 996
mbed_official 235:685d5f11838f 997 /* Process Locked */
mbed_official 235:685d5f11838f 998 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 999
mbed_official 235:685d5f11838f 1000 /* Change HASH peripheral state */
mbed_official 235:685d5f11838f 1001 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1002
mbed_official 235:685d5f11838f 1003 /* Get tick */
mbed_official 235:685d5f11838f 1004 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1005
mbed_official 235:685d5f11838f 1006 while(HAL_IS_BIT_CLR(HASH->SR, HASH_FLAG_DCIS))
mbed_official 235:685d5f11838f 1007 {
mbed_official 235:685d5f11838f 1008 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1009 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1010 {
mbed_official 235:685d5f11838f 1011 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1012 {
mbed_official 235:685d5f11838f 1013 /* Change state */
mbed_official 235:685d5f11838f 1014 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1015
mbed_official 235:685d5f11838f 1016 /* Process Unlocked */
mbed_official 235:685d5f11838f 1017 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1018
mbed_official 235:685d5f11838f 1019 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1020 }
mbed_official 235:685d5f11838f 1021 }
mbed_official 235:685d5f11838f 1022 }
mbed_official 235:685d5f11838f 1023
mbed_official 235:685d5f11838f 1024 /* Read the message digest */
mbed_official 235:685d5f11838f 1025 HASH_GetDigest(pOutBuffer, 16);
mbed_official 235:685d5f11838f 1026
mbed_official 235:685d5f11838f 1027 /* Change HASH peripheral state */
mbed_official 235:685d5f11838f 1028 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1029
mbed_official 235:685d5f11838f 1030 /* Process Unlocked */
mbed_official 235:685d5f11838f 1031 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1032
mbed_official 235:685d5f11838f 1033 /* Return function status */
mbed_official 235:685d5f11838f 1034 return HAL_OK;
mbed_official 235:685d5f11838f 1035 }
mbed_official 235:685d5f11838f 1036
mbed_official 235:685d5f11838f 1037 /**
mbed_official 235:685d5f11838f 1038 * @brief Initializes the HASH peripheral in SHA1 mode then enables DMA to
mbed_official 235:685d5f11838f 1039 control data transfer. Use HAL_HASH_SHA1_Finish() to get the digest.
mbed_official 235:685d5f11838f 1040 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1041 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1042 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 1043 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 1044 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 1045 * @retval HAL status
mbed_official 235:685d5f11838f 1046 */
mbed_official 235:685d5f11838f 1047 HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 1048 {
mbed_official 235:685d5f11838f 1049 uint32_t inputaddr = (uint32_t)pInBuffer;
mbed_official 235:685d5f11838f 1050
mbed_official 235:685d5f11838f 1051 /* Process Locked */
mbed_official 235:685d5f11838f 1052 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 1053
mbed_official 235:685d5f11838f 1054 /* Change the HASH state */
mbed_official 235:685d5f11838f 1055 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1056
mbed_official 235:685d5f11838f 1057 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 1058 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 1059 {
mbed_official 235:685d5f11838f 1060 /* Select the SHA1 mode and reset the HASH processor core, so that the HASH will be ready to compute
mbed_official 235:685d5f11838f 1061 the message digest of a new message */
mbed_official 235:685d5f11838f 1062 HASH->CR |= HASH_AlgoSelection_SHA1;
mbed_official 235:685d5f11838f 1063 HASH->CR |= HASH_CR_INIT;
mbed_official 235:685d5f11838f 1064 }
mbed_official 235:685d5f11838f 1065
mbed_official 235:685d5f11838f 1066 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1067 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 1068
mbed_official 235:685d5f11838f 1069 /* Set the phase */
mbed_official 235:685d5f11838f 1070 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 1071
mbed_official 235:685d5f11838f 1072 /* Set the HASH DMA transfer complete callback */
mbed_official 235:685d5f11838f 1073 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
mbed_official 235:685d5f11838f 1074 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 1075 hhash->hdmain->XferErrorCallback = HASH_DMAError;
mbed_official 235:685d5f11838f 1076
mbed_official 235:685d5f11838f 1077 /* Enable the DMA In DMA Stream */
mbed_official 235:685d5f11838f 1078 HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (Size%4 ? (Size+3)/4:Size/4));
mbed_official 235:685d5f11838f 1079
mbed_official 235:685d5f11838f 1080 /* Enable DMA requests */
mbed_official 235:685d5f11838f 1081 HASH->CR |= (HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1082
mbed_official 235:685d5f11838f 1083 /* Process Unlocked */
mbed_official 235:685d5f11838f 1084 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1085
mbed_official 235:685d5f11838f 1086 /* Return function status */
mbed_official 235:685d5f11838f 1087 return HAL_OK;
mbed_official 235:685d5f11838f 1088 }
mbed_official 235:685d5f11838f 1089
mbed_official 235:685d5f11838f 1090 /**
mbed_official 235:685d5f11838f 1091 * @brief Returns the computed digest in SHA1 mode.
mbed_official 235:685d5f11838f 1092 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1093 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1094 * @param pOutBuffer: Pointer to the computed digest. Its size must be 20 bytes.
mbed_official 235:685d5f11838f 1095 * @param Timeout: Timeout value
mbed_official 235:685d5f11838f 1096 * @retval HAL status
mbed_official 235:685d5f11838f 1097 */
mbed_official 235:685d5f11838f 1098 HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout)
mbed_official 235:685d5f11838f 1099 {
mbed_official 235:685d5f11838f 1100 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 1101
mbed_official 235:685d5f11838f 1102 /* Process Locked */
mbed_official 235:685d5f11838f 1103 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 1104
mbed_official 235:685d5f11838f 1105 /* Change HASH peripheral state */
mbed_official 235:685d5f11838f 1106 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1107
mbed_official 235:685d5f11838f 1108 /* Get tick */
mbed_official 235:685d5f11838f 1109 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1110 while(HAL_IS_BIT_CLR(HASH->SR, HASH_FLAG_DCIS))
mbed_official 235:685d5f11838f 1111 {
mbed_official 235:685d5f11838f 1112 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1113 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1114 {
mbed_official 235:685d5f11838f 1115 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1116 {
mbed_official 235:685d5f11838f 1117 /* Change state */
mbed_official 235:685d5f11838f 1118 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1119
mbed_official 235:685d5f11838f 1120 /* Process Unlocked */
mbed_official 235:685d5f11838f 1121 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1122
mbed_official 235:685d5f11838f 1123 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1124 }
mbed_official 235:685d5f11838f 1125 }
mbed_official 235:685d5f11838f 1126 }
mbed_official 235:685d5f11838f 1127
mbed_official 235:685d5f11838f 1128 /* Read the message digest */
mbed_official 235:685d5f11838f 1129 HASH_GetDigest(pOutBuffer, 20);
mbed_official 235:685d5f11838f 1130
mbed_official 235:685d5f11838f 1131 /* Change HASH peripheral state */
mbed_official 235:685d5f11838f 1132 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1133
mbed_official 235:685d5f11838f 1134 /* Process UnLock */
mbed_official 235:685d5f11838f 1135 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1136
mbed_official 235:685d5f11838f 1137 /* Return function status */
mbed_official 235:685d5f11838f 1138 return HAL_OK;
mbed_official 235:685d5f11838f 1139 }
mbed_official 235:685d5f11838f 1140
mbed_official 235:685d5f11838f 1141
mbed_official 235:685d5f11838f 1142 /**
mbed_official 235:685d5f11838f 1143 * @}
mbed_official 235:685d5f11838f 1144 */
mbed_official 235:685d5f11838f 1145
mbed_official 235:685d5f11838f 1146 /** @defgroup HASH_Group5 HASH-MAC (HMAC) processing functions using polling mode
mbed_official 235:685d5f11838f 1147 * @brief HMAC processing functions using polling mode .
mbed_official 235:685d5f11838f 1148 *
mbed_official 235:685d5f11838f 1149 @verbatim
mbed_official 235:685d5f11838f 1150 ===============================================================================
mbed_official 235:685d5f11838f 1151 ##### HMAC processing using polling mode functions #####
mbed_official 235:685d5f11838f 1152 ===============================================================================
mbed_official 235:685d5f11838f 1153 [..] This section provides functions allowing to calculate in polling mode
mbed_official 235:685d5f11838f 1154 the HMAC value using one of the following algorithms:
mbed_official 235:685d5f11838f 1155 (+) MD5
mbed_official 235:685d5f11838f 1156 (+) SHA1
mbed_official 235:685d5f11838f 1157
mbed_official 235:685d5f11838f 1158 @endverbatim
mbed_official 235:685d5f11838f 1159 * @{
mbed_official 235:685d5f11838f 1160 */
mbed_official 235:685d5f11838f 1161
mbed_official 235:685d5f11838f 1162 /**
mbed_official 235:685d5f11838f 1163 * @brief Initializes the HASH peripheral in HMAC MD5 mode
mbed_official 235:685d5f11838f 1164 * then processes pInBuffer. The digest is available in pOutBuffer
mbed_official 235:685d5f11838f 1165 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1166 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1167 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 1168 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 1169 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 1170 * @param pOutBuffer: Pointer to the computed digest. Its size must be 20 bytes.
mbed_official 235:685d5f11838f 1171 * @param Timeout: Timeout value
mbed_official 235:685d5f11838f 1172 * @retval HAL status
mbed_official 235:685d5f11838f 1173 */
mbed_official 235:685d5f11838f 1174 HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout)
mbed_official 235:685d5f11838f 1175 {
mbed_official 235:685d5f11838f 1176 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 1177
mbed_official 235:685d5f11838f 1178 /* Process Locked */
mbed_official 235:685d5f11838f 1179 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 1180
mbed_official 235:685d5f11838f 1181 /* Change the HASH state */
mbed_official 235:685d5f11838f 1182 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1183
mbed_official 235:685d5f11838f 1184 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 1185 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 1186 {
mbed_official 235:685d5f11838f 1187 /* Check if key size is greater than 64 bytes */
mbed_official 235:685d5f11838f 1188 if(hhash->Init.KeySize > 64)
mbed_official 235:685d5f11838f 1189 {
mbed_official 235:685d5f11838f 1190 /* Select the HMAC MD5 mode */
mbed_official 235:685d5f11838f 1191 HASH->CR |= (HASH_AlgoSelection_MD5 | HASH_AlgoMode_HMAC | HASH_HMACKeyType_LongKey | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1192 }
mbed_official 235:685d5f11838f 1193 else
mbed_official 235:685d5f11838f 1194 {
mbed_official 235:685d5f11838f 1195 /* Select the HMAC MD5 mode */
mbed_official 235:685d5f11838f 1196 HASH->CR |= (HASH_AlgoSelection_MD5 | HASH_AlgoMode_HMAC | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1197 }
mbed_official 235:685d5f11838f 1198 }
mbed_official 235:685d5f11838f 1199
mbed_official 235:685d5f11838f 1200 /* Set the phase */
mbed_official 235:685d5f11838f 1201 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 1202
mbed_official 235:685d5f11838f 1203 /************************** STEP 1 ******************************************/
mbed_official 235:685d5f11838f 1204 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1205 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1206
mbed_official 235:685d5f11838f 1207 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 1208 HASH_WriteData(hhash->Init.pKey, hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1209
mbed_official 235:685d5f11838f 1210 /* Start the digest calculation */
mbed_official 235:685d5f11838f 1211 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 1212
mbed_official 235:685d5f11838f 1213 /* Get tick */
mbed_official 235:685d5f11838f 1214 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1215
mbed_official 235:685d5f11838f 1216 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 1217 {
mbed_official 235:685d5f11838f 1218 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1219 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1220 {
mbed_official 235:685d5f11838f 1221 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1222 {
mbed_official 235:685d5f11838f 1223 /* Change state */
mbed_official 235:685d5f11838f 1224 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1225
mbed_official 235:685d5f11838f 1226 /* Process Unlocked */
mbed_official 235:685d5f11838f 1227 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1228
mbed_official 235:685d5f11838f 1229 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1230 }
mbed_official 235:685d5f11838f 1231 }
mbed_official 235:685d5f11838f 1232 }
mbed_official 235:685d5f11838f 1233 /************************** STEP 2 ******************************************/
mbed_official 235:685d5f11838f 1234 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1235 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 1236
mbed_official 235:685d5f11838f 1237 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 1238 HASH_WriteData(pInBuffer, Size);
mbed_official 235:685d5f11838f 1239
mbed_official 235:685d5f11838f 1240 /* Start the digest calculation */
mbed_official 235:685d5f11838f 1241 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 1242
mbed_official 235:685d5f11838f 1243 /* Get tick */
mbed_official 235:685d5f11838f 1244 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1245
mbed_official 235:685d5f11838f 1246 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 1247 {
mbed_official 235:685d5f11838f 1248 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1249 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1250 {
mbed_official 235:685d5f11838f 1251 if((HAL_GetTick() - tickstart ) > Timeout)
mbed_official 235:685d5f11838f 1252 {
mbed_official 235:685d5f11838f 1253 /* Change state */
mbed_official 235:685d5f11838f 1254 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1255
mbed_official 235:685d5f11838f 1256 /* Process Unlocked */
mbed_official 235:685d5f11838f 1257 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1258
mbed_official 235:685d5f11838f 1259 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1260 }
mbed_official 235:685d5f11838f 1261 }
mbed_official 235:685d5f11838f 1262 }
mbed_official 235:685d5f11838f 1263 /************************** STEP 3 ******************************************/
mbed_official 235:685d5f11838f 1264 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1265 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1266
mbed_official 235:685d5f11838f 1267 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 1268 HASH_WriteData(hhash->Init.pKey, hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1269
mbed_official 235:685d5f11838f 1270 /* Start the digest calculation */
mbed_official 235:685d5f11838f 1271 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 1272
mbed_official 235:685d5f11838f 1273 /* Get tick */
mbed_official 235:685d5f11838f 1274 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1275
mbed_official 235:685d5f11838f 1276 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 1277 {
mbed_official 235:685d5f11838f 1278 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1279 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1280 {
mbed_official 235:685d5f11838f 1281 if((HAL_GetTick() - tickstart ) > Timeout)
mbed_official 235:685d5f11838f 1282 {
mbed_official 235:685d5f11838f 1283 /* Change state */
mbed_official 235:685d5f11838f 1284 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1285
mbed_official 235:685d5f11838f 1286 /* Process Unlocked */
mbed_official 235:685d5f11838f 1287 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1288
mbed_official 235:685d5f11838f 1289 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1290 }
mbed_official 235:685d5f11838f 1291 }
mbed_official 235:685d5f11838f 1292 }
mbed_official 235:685d5f11838f 1293
mbed_official 235:685d5f11838f 1294 /* Read the message digest */
mbed_official 235:685d5f11838f 1295 HASH_GetDigest(pOutBuffer, 16);
mbed_official 235:685d5f11838f 1296
mbed_official 235:685d5f11838f 1297 /* Change the HASH state */
mbed_official 235:685d5f11838f 1298 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1299
mbed_official 235:685d5f11838f 1300 /* Process Unlocked */
mbed_official 235:685d5f11838f 1301 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1302
mbed_official 235:685d5f11838f 1303 /* Return function status */
mbed_official 235:685d5f11838f 1304 return HAL_OK;
mbed_official 235:685d5f11838f 1305 }
mbed_official 235:685d5f11838f 1306
mbed_official 235:685d5f11838f 1307 /**
mbed_official 235:685d5f11838f 1308 * @brief Initializes the HASH peripheral in HMAC SHA1 mode
mbed_official 235:685d5f11838f 1309 * then processes pInBuffer. The digest is available in pOutBuffer.
mbed_official 235:685d5f11838f 1310 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1311 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1312 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 1313 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 1314 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 1315 * @param pOutBuffer: Pointer to the computed digest. Its size must be 20 bytes.
mbed_official 235:685d5f11838f 1316 * @param Timeout: Timeout value
mbed_official 235:685d5f11838f 1317 * @retval HAL status
mbed_official 235:685d5f11838f 1318 */
mbed_official 235:685d5f11838f 1319 HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout)
mbed_official 235:685d5f11838f 1320 {
mbed_official 235:685d5f11838f 1321 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 1322
mbed_official 235:685d5f11838f 1323 /* Process Locked */
mbed_official 235:685d5f11838f 1324 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 1325
mbed_official 235:685d5f11838f 1326 /* Change the HASH state */
mbed_official 235:685d5f11838f 1327 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1328
mbed_official 235:685d5f11838f 1329 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 1330 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 1331 {
mbed_official 235:685d5f11838f 1332 /* Check if key size is greater than 64 bytes */
mbed_official 235:685d5f11838f 1333 if(hhash->Init.KeySize > 64)
mbed_official 235:685d5f11838f 1334 {
mbed_official 235:685d5f11838f 1335 /* Select the HMAC SHA1 mode */
mbed_official 235:685d5f11838f 1336 HASH->CR |= (HASH_AlgoSelection_SHA1 | HASH_AlgoMode_HMAC | HASH_HMACKeyType_LongKey | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1337 }
mbed_official 235:685d5f11838f 1338 else
mbed_official 235:685d5f11838f 1339 {
mbed_official 235:685d5f11838f 1340 /* Select the HMAC SHA1 mode */
mbed_official 235:685d5f11838f 1341 HASH->CR |= (HASH_AlgoSelection_SHA1 | HASH_AlgoMode_HMAC | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1342 }
mbed_official 235:685d5f11838f 1343 }
mbed_official 235:685d5f11838f 1344
mbed_official 235:685d5f11838f 1345 /* Set the phase */
mbed_official 235:685d5f11838f 1346 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 1347
mbed_official 235:685d5f11838f 1348 /************************** STEP 1 ******************************************/
mbed_official 235:685d5f11838f 1349 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1350 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1351
mbed_official 235:685d5f11838f 1352 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 1353 HASH_WriteData(hhash->Init.pKey, hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1354
mbed_official 235:685d5f11838f 1355 /* Start the digest calculation */
mbed_official 235:685d5f11838f 1356 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 1357
mbed_official 235:685d5f11838f 1358 /* Get tick */
mbed_official 235:685d5f11838f 1359 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1360
mbed_official 235:685d5f11838f 1361 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 1362 {
mbed_official 235:685d5f11838f 1363 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1364 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1365 {
mbed_official 235:685d5f11838f 1366 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1367 {
mbed_official 235:685d5f11838f 1368 /* Change state */
mbed_official 235:685d5f11838f 1369 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1370
mbed_official 235:685d5f11838f 1371 /* Process Unlocked */
mbed_official 235:685d5f11838f 1372 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1373
mbed_official 235:685d5f11838f 1374 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1375 }
mbed_official 235:685d5f11838f 1376 }
mbed_official 235:685d5f11838f 1377 }
mbed_official 235:685d5f11838f 1378 /************************** STEP 2 ******************************************/
mbed_official 235:685d5f11838f 1379 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1380 __HAL_HASH_SET_NBVALIDBITS(Size);
mbed_official 235:685d5f11838f 1381
mbed_official 235:685d5f11838f 1382 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 1383 HASH_WriteData(pInBuffer, Size);
mbed_official 235:685d5f11838f 1384
mbed_official 235:685d5f11838f 1385 /* Start the digest calculation */
mbed_official 235:685d5f11838f 1386 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 1387
mbed_official 235:685d5f11838f 1388 /* Get tick */
mbed_official 235:685d5f11838f 1389 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1390
mbed_official 235:685d5f11838f 1391 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 1392 {
mbed_official 235:685d5f11838f 1393 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1394 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1395 {
mbed_official 235:685d5f11838f 1396 if((HAL_GetTick() - tickstart ) > Timeout)
mbed_official 235:685d5f11838f 1397 {
mbed_official 235:685d5f11838f 1398 /* Change state */
mbed_official 235:685d5f11838f 1399 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1400
mbed_official 235:685d5f11838f 1401 /* Process Unlocked */
mbed_official 235:685d5f11838f 1402 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1403
mbed_official 235:685d5f11838f 1404 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1405 }
mbed_official 235:685d5f11838f 1406 }
mbed_official 235:685d5f11838f 1407 }
mbed_official 235:685d5f11838f 1408 /************************** STEP 3 ******************************************/
mbed_official 235:685d5f11838f 1409 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1410 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1411
mbed_official 235:685d5f11838f 1412 /* Write input buffer in data register */
mbed_official 235:685d5f11838f 1413 HASH_WriteData(hhash->Init.pKey, hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1414
mbed_official 235:685d5f11838f 1415 /* Start the digest calculation */
mbed_official 235:685d5f11838f 1416 __HAL_HASH_START_DIGEST();
mbed_official 235:685d5f11838f 1417
mbed_official 235:685d5f11838f 1418 /* Get tick */
mbed_official 235:685d5f11838f 1419 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1420
mbed_official 235:685d5f11838f 1421 while(HAL_IS_BIT_SET(HASH->SR, HASH_FLAG_BUSY))
mbed_official 235:685d5f11838f 1422 {
mbed_official 235:685d5f11838f 1423 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1424 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1425 {
mbed_official 235:685d5f11838f 1426 if((HAL_GetTick() - tickstart ) > Timeout)
mbed_official 235:685d5f11838f 1427 {
mbed_official 235:685d5f11838f 1428 /* Change state */
mbed_official 235:685d5f11838f 1429 hhash->State = HAL_HASH_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1430
mbed_official 235:685d5f11838f 1431 /* Process Unlocked */
mbed_official 235:685d5f11838f 1432 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1433
mbed_official 235:685d5f11838f 1434 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1435 }
mbed_official 235:685d5f11838f 1436 }
mbed_official 235:685d5f11838f 1437 }
mbed_official 235:685d5f11838f 1438 /* Read the message digest */
mbed_official 235:685d5f11838f 1439 HASH_GetDigest(pOutBuffer, 20);
mbed_official 235:685d5f11838f 1440
mbed_official 235:685d5f11838f 1441 /* Change the HASH state */
mbed_official 235:685d5f11838f 1442 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1443
mbed_official 235:685d5f11838f 1444 /* Process Unlocked */
mbed_official 235:685d5f11838f 1445 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1446
mbed_official 235:685d5f11838f 1447 /* Return function status */
mbed_official 235:685d5f11838f 1448 return HAL_OK;
mbed_official 235:685d5f11838f 1449 }
mbed_official 235:685d5f11838f 1450
mbed_official 235:685d5f11838f 1451 /**
mbed_official 235:685d5f11838f 1452 * @}
mbed_official 235:685d5f11838f 1453 */
mbed_official 235:685d5f11838f 1454
mbed_official 235:685d5f11838f 1455 /** @defgroup HASH_Group6 HASH-MAC (HMAC) processing functions using DMA mode
mbed_official 235:685d5f11838f 1456 * @brief HMAC processing functions using DMA mode .
mbed_official 235:685d5f11838f 1457 *
mbed_official 235:685d5f11838f 1458 @verbatim
mbed_official 235:685d5f11838f 1459 ===============================================================================
mbed_official 235:685d5f11838f 1460 ##### HMAC processing using DMA mode functions #####
mbed_official 235:685d5f11838f 1461 ===============================================================================
mbed_official 235:685d5f11838f 1462 [..] This section provides functions allowing to calculate in DMA mode
mbed_official 235:685d5f11838f 1463 the HMAC value using one of the following algorithms:
mbed_official 235:685d5f11838f 1464 (+) MD5
mbed_official 235:685d5f11838f 1465 (+) SHA1
mbed_official 235:685d5f11838f 1466
mbed_official 235:685d5f11838f 1467 @endverbatim
mbed_official 235:685d5f11838f 1468 * @{
mbed_official 235:685d5f11838f 1469 */
mbed_official 235:685d5f11838f 1470
mbed_official 235:685d5f11838f 1471 /**
mbed_official 235:685d5f11838f 1472 * @brief Initializes the HASH peripheral in HMAC MD5 mode
mbed_official 235:685d5f11838f 1473 * then enables DMA to control data transfer.
mbed_official 235:685d5f11838f 1474 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1475 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1476 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 1477 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 1478 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 1479 * @retval HAL status
mbed_official 235:685d5f11838f 1480 */
mbed_official 235:685d5f11838f 1481 HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 1482 {
mbed_official 235:685d5f11838f 1483 uint32_t inputaddr = 0;
mbed_official 235:685d5f11838f 1484
mbed_official 235:685d5f11838f 1485 /* Process Locked */
mbed_official 235:685d5f11838f 1486 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 1487
mbed_official 235:685d5f11838f 1488 /* Change the HASH state */
mbed_official 235:685d5f11838f 1489 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1490
mbed_official 235:685d5f11838f 1491 /* Save buffer pointer and size in handle */
mbed_official 235:685d5f11838f 1492 hhash->pHashInBuffPtr = pInBuffer;
mbed_official 235:685d5f11838f 1493 hhash->HashBuffSize = Size;
mbed_official 235:685d5f11838f 1494 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 1495
mbed_official 235:685d5f11838f 1496 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 1497 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 1498 {
mbed_official 235:685d5f11838f 1499 /* Check if key size is greater than 64 bytes */
mbed_official 235:685d5f11838f 1500 if(hhash->Init.KeySize > 64)
mbed_official 235:685d5f11838f 1501 {
mbed_official 235:685d5f11838f 1502 /* Select the HMAC MD5 mode */
mbed_official 235:685d5f11838f 1503 HASH->CR |= (HASH_AlgoSelection_MD5 | HASH_AlgoMode_HMAC | HASH_HMACKeyType_LongKey | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1504 }
mbed_official 235:685d5f11838f 1505 else
mbed_official 235:685d5f11838f 1506 {
mbed_official 235:685d5f11838f 1507 /* Select the HMAC MD5 mode */
mbed_official 235:685d5f11838f 1508 HASH->CR |= (HASH_AlgoSelection_MD5 | HASH_AlgoMode_HMAC | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1509 }
mbed_official 235:685d5f11838f 1510 }
mbed_official 235:685d5f11838f 1511
mbed_official 235:685d5f11838f 1512 /* Set the phase */
mbed_official 235:685d5f11838f 1513 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 1514
mbed_official 235:685d5f11838f 1515 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1516 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1517
mbed_official 235:685d5f11838f 1518 /* Get the key address */
mbed_official 235:685d5f11838f 1519 inputaddr = (uint32_t)(hhash->Init.pKey);
mbed_official 235:685d5f11838f 1520
mbed_official 235:685d5f11838f 1521 /* Set the HASH DMA transfer complete callback */
mbed_official 235:685d5f11838f 1522 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
mbed_official 235:685d5f11838f 1523 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 1524 hhash->hdmain->XferErrorCallback = HASH_DMAError;
mbed_official 235:685d5f11838f 1525
mbed_official 235:685d5f11838f 1526 /* Enable the DMA In DMA Stream */
mbed_official 235:685d5f11838f 1527 HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (hhash->Init.KeySize%4 ? (hhash->Init.KeySize+3)/4:hhash->Init.KeySize/4));
mbed_official 235:685d5f11838f 1528 /* Enable DMA requests */
mbed_official 235:685d5f11838f 1529 HASH->CR |= (HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1530
mbed_official 235:685d5f11838f 1531 /* Process Unlocked */
mbed_official 235:685d5f11838f 1532 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1533
mbed_official 235:685d5f11838f 1534 /* Return function status */
mbed_official 235:685d5f11838f 1535 return HAL_OK;
mbed_official 235:685d5f11838f 1536 }
mbed_official 235:685d5f11838f 1537
mbed_official 235:685d5f11838f 1538 /**
mbed_official 235:685d5f11838f 1539 * @brief Initializes the HASH peripheral in HMAC SHA1 mode
mbed_official 235:685d5f11838f 1540 * then enables DMA to control data transfer.
mbed_official 235:685d5f11838f 1541 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1542 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1543 * @param pInBuffer: Pointer to the input buffer (buffer to be hashed).
mbed_official 235:685d5f11838f 1544 * @param Size: Length of the input buffer in bytes.
mbed_official 235:685d5f11838f 1545 * If the Size is not multiple of 64 bytes, the padding is managed by hardware.
mbed_official 235:685d5f11838f 1546 * @retval HAL status
mbed_official 235:685d5f11838f 1547 */
mbed_official 235:685d5f11838f 1548 HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 1549 {
mbed_official 235:685d5f11838f 1550 uint32_t inputaddr = 0;
mbed_official 235:685d5f11838f 1551
mbed_official 235:685d5f11838f 1552 /* Process Locked */
mbed_official 235:685d5f11838f 1553 __HAL_LOCK(hhash);
mbed_official 235:685d5f11838f 1554
mbed_official 235:685d5f11838f 1555 /* Change the HASH state */
mbed_official 235:685d5f11838f 1556 hhash->State = HAL_HASH_STATE_BUSY;
mbed_official 235:685d5f11838f 1557
mbed_official 235:685d5f11838f 1558 /* Save buffer pointer and size in handle */
mbed_official 235:685d5f11838f 1559 hhash->pHashInBuffPtr = pInBuffer;
mbed_official 235:685d5f11838f 1560 hhash->HashBuffSize = Size;
mbed_official 235:685d5f11838f 1561 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 1562
mbed_official 235:685d5f11838f 1563 /* Check if initialization phase has already been performed */
mbed_official 235:685d5f11838f 1564 if(hhash->Phase == HAL_HASH_PHASE_READY)
mbed_official 235:685d5f11838f 1565 {
mbed_official 235:685d5f11838f 1566 /* Check if key size is greater than 64 bytes */
mbed_official 235:685d5f11838f 1567 if(hhash->Init.KeySize > 64)
mbed_official 235:685d5f11838f 1568 {
mbed_official 235:685d5f11838f 1569 /* Select the HMAC SHA1 mode */
mbed_official 235:685d5f11838f 1570 HASH->CR |= (HASH_AlgoSelection_SHA1 | HASH_AlgoMode_HMAC | HASH_HMACKeyType_LongKey | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1571 }
mbed_official 235:685d5f11838f 1572 else
mbed_official 235:685d5f11838f 1573 {
mbed_official 235:685d5f11838f 1574 /* Select the HMAC SHA1 mode */
mbed_official 235:685d5f11838f 1575 HASH->CR |= (HASH_AlgoSelection_SHA1 | HASH_AlgoMode_HMAC | HASH_CR_INIT);
mbed_official 235:685d5f11838f 1576 }
mbed_official 235:685d5f11838f 1577 }
mbed_official 235:685d5f11838f 1578
mbed_official 235:685d5f11838f 1579 /* Set the phase */
mbed_official 235:685d5f11838f 1580 hhash->Phase = HAL_HASH_PHASE_PROCESS;
mbed_official 235:685d5f11838f 1581
mbed_official 235:685d5f11838f 1582 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1583 __HAL_HASH_SET_NBVALIDBITS(hhash->Init.KeySize);
mbed_official 235:685d5f11838f 1584
mbed_official 235:685d5f11838f 1585 /* Get the key address */
mbed_official 235:685d5f11838f 1586 inputaddr = (uint32_t)(hhash->Init.pKey);
mbed_official 235:685d5f11838f 1587
mbed_official 235:685d5f11838f 1588 /* Set the HASH DMA transfer complete callback */
mbed_official 235:685d5f11838f 1589 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
mbed_official 235:685d5f11838f 1590 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 1591 hhash->hdmain->XferErrorCallback = HASH_DMAError;
mbed_official 235:685d5f11838f 1592
mbed_official 235:685d5f11838f 1593 /* Enable the DMA In DMA Stream */
mbed_official 235:685d5f11838f 1594 HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (hhash->Init.KeySize%4 ? (hhash->Init.KeySize+3)/4:hhash->Init.KeySize/4));
mbed_official 235:685d5f11838f 1595 /* Enable DMA requests */
mbed_official 235:685d5f11838f 1596 HASH->CR |= (HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1597
mbed_official 235:685d5f11838f 1598 /* Process Unlocked */
mbed_official 235:685d5f11838f 1599 __HAL_UNLOCK(hhash);
mbed_official 235:685d5f11838f 1600
mbed_official 235:685d5f11838f 1601 /* Return function status */
mbed_official 235:685d5f11838f 1602 return HAL_OK;
mbed_official 235:685d5f11838f 1603 }
mbed_official 235:685d5f11838f 1604
mbed_official 235:685d5f11838f 1605 /**
mbed_official 235:685d5f11838f 1606 * @}
mbed_official 235:685d5f11838f 1607 */
mbed_official 235:685d5f11838f 1608
mbed_official 235:685d5f11838f 1609 /** @defgroup HASH_Group7 Peripheral State functions
mbed_official 235:685d5f11838f 1610 * @brief Peripheral State functions.
mbed_official 235:685d5f11838f 1611 *
mbed_official 235:685d5f11838f 1612 @verbatim
mbed_official 235:685d5f11838f 1613 ===============================================================================
mbed_official 235:685d5f11838f 1614 ##### Peripheral State functions #####
mbed_official 235:685d5f11838f 1615 ===============================================================================
mbed_official 235:685d5f11838f 1616 [..]
mbed_official 235:685d5f11838f 1617 This subsection permits to get in run-time the status of the peripheral.
mbed_official 235:685d5f11838f 1618
mbed_official 235:685d5f11838f 1619 @endverbatim
mbed_official 235:685d5f11838f 1620 * @{
mbed_official 235:685d5f11838f 1621 */
mbed_official 235:685d5f11838f 1622
mbed_official 235:685d5f11838f 1623 /**
mbed_official 235:685d5f11838f 1624 * @brief return the HASH state
mbed_official 235:685d5f11838f 1625 * @param hhash: pointer to a HASH_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1626 * the configuration information for HASH module
mbed_official 235:685d5f11838f 1627 * @retval HAL state
mbed_official 235:685d5f11838f 1628 */
mbed_official 235:685d5f11838f 1629 HAL_HASH_STATETypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash)
mbed_official 235:685d5f11838f 1630 {
mbed_official 235:685d5f11838f 1631 return hhash->State;
mbed_official 235:685d5f11838f 1632 }
mbed_official 235:685d5f11838f 1633
mbed_official 235:685d5f11838f 1634 /**
mbed_official 235:685d5f11838f 1635 * @}
mbed_official 235:685d5f11838f 1636 */
mbed_official 235:685d5f11838f 1637
mbed_official 235:685d5f11838f 1638 /**
mbed_official 235:685d5f11838f 1639 * @brief DMA HASH Input Data complete callback.
mbed_official 235:685d5f11838f 1640 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1641 * @retval None
mbed_official 235:685d5f11838f 1642 */
mbed_official 235:685d5f11838f 1643 static void HASH_DMAXferCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1644 {
mbed_official 235:685d5f11838f 1645 HASH_HandleTypeDef* hhash = ( HASH_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1646 uint32_t inputaddr = 0;
mbed_official 235:685d5f11838f 1647 uint32_t buffersize = 0;
mbed_official 235:685d5f11838f 1648
mbed_official 235:685d5f11838f 1649 if((HASH->CR & HASH_CR_MODE) != HASH_CR_MODE)
mbed_official 235:685d5f11838f 1650 {
mbed_official 235:685d5f11838f 1651 /* Disable the DMA transfer */
mbed_official 235:685d5f11838f 1652 HASH->CR &= (uint32_t)(~HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1653
mbed_official 235:685d5f11838f 1654 /* Change HASH peripheral state */
mbed_official 235:685d5f11838f 1655 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1656
mbed_official 235:685d5f11838f 1657 /* Call Input data transfer complete callback */
mbed_official 235:685d5f11838f 1658 HAL_HASH_InCpltCallback(hhash);
mbed_official 235:685d5f11838f 1659 }
mbed_official 235:685d5f11838f 1660 else
mbed_official 235:685d5f11838f 1661 {
mbed_official 235:685d5f11838f 1662 /* Increment Interrupt counter */
mbed_official 235:685d5f11838f 1663 hhash->HashInCount++;
mbed_official 235:685d5f11838f 1664 /* Disable the DMA transfer before starting the next transfer */
mbed_official 235:685d5f11838f 1665 HASH->CR &= (uint32_t)(~HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1666
mbed_official 235:685d5f11838f 1667 if(hhash->HashInCount <= 2)
mbed_official 235:685d5f11838f 1668 {
mbed_official 235:685d5f11838f 1669 /* In case HashInCount = 1, set the DMA to transfer data to HASH DIN register */
mbed_official 235:685d5f11838f 1670 if(hhash->HashInCount == 1)
mbed_official 235:685d5f11838f 1671 {
mbed_official 235:685d5f11838f 1672 inputaddr = (uint32_t)hhash->pHashInBuffPtr;
mbed_official 235:685d5f11838f 1673 buffersize = hhash->HashBuffSize;
mbed_official 235:685d5f11838f 1674 }
mbed_official 235:685d5f11838f 1675 /* In case HashInCount = 2, set the DMA to transfer key to HASH DIN register */
mbed_official 235:685d5f11838f 1676 else if(hhash->HashInCount == 2)
mbed_official 235:685d5f11838f 1677 {
mbed_official 235:685d5f11838f 1678 inputaddr = (uint32_t)hhash->Init.pKey;
mbed_official 235:685d5f11838f 1679 buffersize = hhash->Init.KeySize;
mbed_official 235:685d5f11838f 1680 }
mbed_official 235:685d5f11838f 1681 /* Configure the number of valid bits in last word of the message */
mbed_official 235:685d5f11838f 1682 HASH->STR |= 8 * (buffersize % 4);
mbed_official 235:685d5f11838f 1683
mbed_official 235:685d5f11838f 1684 /* Set the HASH DMA transfer complete */
mbed_official 235:685d5f11838f 1685 hhash->hdmain->XferCpltCallback = HASH_DMAXferCplt;
mbed_official 235:685d5f11838f 1686
mbed_official 235:685d5f11838f 1687 /* Enable the DMA In DMA Stream */
mbed_official 235:685d5f11838f 1688 HAL_DMA_Start_IT(hhash->hdmain, inputaddr, (uint32_t)&HASH->DIN, (buffersize%4 ? (buffersize+3)/4:buffersize/4));
mbed_official 235:685d5f11838f 1689
mbed_official 235:685d5f11838f 1690 /* Enable DMA requests */
mbed_official 235:685d5f11838f 1691 HASH->CR |= (HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1692 }
mbed_official 235:685d5f11838f 1693 else
mbed_official 235:685d5f11838f 1694 {
mbed_official 235:685d5f11838f 1695 /* Disable the DMA transfer */
mbed_official 235:685d5f11838f 1696 HASH->CR &= (uint32_t)(~HASH_CR_DMAE);
mbed_official 235:685d5f11838f 1697
mbed_official 235:685d5f11838f 1698 /* Reset the InCount */
mbed_official 235:685d5f11838f 1699 hhash->HashInCount = 0;
mbed_official 235:685d5f11838f 1700
mbed_official 235:685d5f11838f 1701 /* Change HASH peripheral state */
mbed_official 235:685d5f11838f 1702 hhash->State = HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1703
mbed_official 235:685d5f11838f 1704 /* Call Input data transfer complete callback */
mbed_official 235:685d5f11838f 1705 HAL_HASH_InCpltCallback(hhash);
mbed_official 235:685d5f11838f 1706 }
mbed_official 235:685d5f11838f 1707 }
mbed_official 235:685d5f11838f 1708 }
mbed_official 235:685d5f11838f 1709
mbed_official 235:685d5f11838f 1710 /**
mbed_official 235:685d5f11838f 1711 * @brief DMA HASH communication error callback.
mbed_official 235:685d5f11838f 1712 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1713 * @retval None
mbed_official 235:685d5f11838f 1714 */
mbed_official 235:685d5f11838f 1715 static void HASH_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1716 {
mbed_official 235:685d5f11838f 1717 HASH_HandleTypeDef* hhash = ( HASH_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1718 hhash->State= HAL_HASH_STATE_READY;
mbed_official 235:685d5f11838f 1719 HAL_HASH_ErrorCallback(hhash);
mbed_official 235:685d5f11838f 1720 }
mbed_official 235:685d5f11838f 1721
mbed_official 235:685d5f11838f 1722 /**
mbed_official 235:685d5f11838f 1723 * @brief Writes the input buffer in data register.
mbed_official 235:685d5f11838f 1724 * @param pInBuffer: Pointer to input buffer
mbed_official 235:685d5f11838f 1725 * @param Size: The size of input buffer
mbed_official 235:685d5f11838f 1726 * @retval None
mbed_official 235:685d5f11838f 1727 */
mbed_official 235:685d5f11838f 1728 static void HASH_WriteData(uint8_t *pInBuffer, uint32_t Size)
mbed_official 235:685d5f11838f 1729 {
mbed_official 235:685d5f11838f 1730 uint32_t buffercounter;
mbed_official 235:685d5f11838f 1731 uint32_t inputaddr = (uint32_t) pInBuffer;
mbed_official 235:685d5f11838f 1732
mbed_official 235:685d5f11838f 1733 for(buffercounter = 0; buffercounter < Size; buffercounter+=4)
mbed_official 235:685d5f11838f 1734 {
mbed_official 235:685d5f11838f 1735 HASH->DIN = *(uint32_t*)inputaddr;
mbed_official 235:685d5f11838f 1736 inputaddr+=4;
mbed_official 235:685d5f11838f 1737 }
mbed_official 235:685d5f11838f 1738 }
mbed_official 235:685d5f11838f 1739
mbed_official 235:685d5f11838f 1740 /**
mbed_official 235:685d5f11838f 1741 * @brief Provides the message digest result.
mbed_official 235:685d5f11838f 1742 * @param pMsgDigest: Pointer to the message digest
mbed_official 235:685d5f11838f 1743 * @param Size: The size of the message digest in bytes
mbed_official 235:685d5f11838f 1744 * @retval None
mbed_official 235:685d5f11838f 1745 */
mbed_official 235:685d5f11838f 1746 static void HASH_GetDigest(uint8_t *pMsgDigest, uint8_t Size)
mbed_official 235:685d5f11838f 1747 {
mbed_official 235:685d5f11838f 1748 uint32_t msgdigest = (uint32_t)pMsgDigest;
mbed_official 235:685d5f11838f 1749
mbed_official 235:685d5f11838f 1750 switch(Size)
mbed_official 235:685d5f11838f 1751 {
mbed_official 235:685d5f11838f 1752 case 16:
mbed_official 235:685d5f11838f 1753 /* Read the message digest */
mbed_official 235:685d5f11838f 1754 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
mbed_official 235:685d5f11838f 1755 msgdigest+=4;
mbed_official 235:685d5f11838f 1756 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
mbed_official 235:685d5f11838f 1757 msgdigest+=4;
mbed_official 235:685d5f11838f 1758 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
mbed_official 235:685d5f11838f 1759 msgdigest+=4;
mbed_official 235:685d5f11838f 1760 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
mbed_official 235:685d5f11838f 1761 break;
mbed_official 235:685d5f11838f 1762 case 20:
mbed_official 235:685d5f11838f 1763 /* Read the message digest */
mbed_official 235:685d5f11838f 1764 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
mbed_official 235:685d5f11838f 1765 msgdigest+=4;
mbed_official 235:685d5f11838f 1766 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
mbed_official 235:685d5f11838f 1767 msgdigest+=4;
mbed_official 235:685d5f11838f 1768 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
mbed_official 235:685d5f11838f 1769 msgdigest+=4;
mbed_official 235:685d5f11838f 1770 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
mbed_official 235:685d5f11838f 1771 msgdigest+=4;
mbed_official 235:685d5f11838f 1772 *(uint32_t*)(msgdigest) = __REV(HASH->HR[4]);
mbed_official 235:685d5f11838f 1773 break;
mbed_official 235:685d5f11838f 1774 case 28:
mbed_official 235:685d5f11838f 1775 /* Read the message digest */
mbed_official 235:685d5f11838f 1776 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
mbed_official 235:685d5f11838f 1777 msgdigest+=4;
mbed_official 235:685d5f11838f 1778 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
mbed_official 235:685d5f11838f 1779 msgdigest+=4;
mbed_official 235:685d5f11838f 1780 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
mbed_official 235:685d5f11838f 1781 msgdigest+=4;
mbed_official 235:685d5f11838f 1782 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
mbed_official 235:685d5f11838f 1783 msgdigest+=4;
mbed_official 235:685d5f11838f 1784 *(uint32_t*)(msgdigest) = __REV(HASH->HR[4]);
mbed_official 235:685d5f11838f 1785 msgdigest+=4;
mbed_official 235:685d5f11838f 1786 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
mbed_official 235:685d5f11838f 1787 msgdigest+=4;
mbed_official 235:685d5f11838f 1788 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
mbed_official 235:685d5f11838f 1789 break;
mbed_official 235:685d5f11838f 1790 case 32:
mbed_official 235:685d5f11838f 1791 /* Read the message digest */
mbed_official 235:685d5f11838f 1792 *(uint32_t*)(msgdigest) = __REV(HASH->HR[0]);
mbed_official 235:685d5f11838f 1793 msgdigest+=4;
mbed_official 235:685d5f11838f 1794 *(uint32_t*)(msgdigest) = __REV(HASH->HR[1]);
mbed_official 235:685d5f11838f 1795 msgdigest+=4;
mbed_official 235:685d5f11838f 1796 *(uint32_t*)(msgdigest) = __REV(HASH->HR[2]);
mbed_official 235:685d5f11838f 1797 msgdigest+=4;
mbed_official 235:685d5f11838f 1798 *(uint32_t*)(msgdigest) = __REV(HASH->HR[3]);
mbed_official 235:685d5f11838f 1799 msgdigest+=4;
mbed_official 235:685d5f11838f 1800 *(uint32_t*)(msgdigest) = __REV(HASH->HR[4]);
mbed_official 235:685d5f11838f 1801 msgdigest+=4;
mbed_official 235:685d5f11838f 1802 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[5]);
mbed_official 235:685d5f11838f 1803 msgdigest+=4;
mbed_official 235:685d5f11838f 1804 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[6]);
mbed_official 235:685d5f11838f 1805 msgdigest+=4;
mbed_official 235:685d5f11838f 1806 *(uint32_t*)(msgdigest) = __REV(HASH_DIGEST->HR[7]);
mbed_official 235:685d5f11838f 1807 break;
mbed_official 235:685d5f11838f 1808 default:
mbed_official 235:685d5f11838f 1809 break;
mbed_official 235:685d5f11838f 1810 }
mbed_official 235:685d5f11838f 1811 }
mbed_official 235:685d5f11838f 1812
mbed_official 235:685d5f11838f 1813 /**
mbed_official 235:685d5f11838f 1814 * @}
mbed_official 235:685d5f11838f 1815 */
mbed_official 235:685d5f11838f 1816 #endif /* STM32F415xx || STM32F417xx || STM32F437xx || STM32F439xx */
mbed_official 235:685d5f11838f 1817 #endif /* HAL_HASH_MODULE_ENABLED */
mbed_official 235:685d5f11838f 1818 /**
mbed_official 235:685d5f11838f 1819 * @}
mbed_official 235:685d5f11838f 1820 */
mbed_official 235:685d5f11838f 1821
mbed_official 235:685d5f11838f 1822 /**
mbed_official 235:685d5f11838f 1823 * @}
mbed_official 235:685d5f11838f 1824 */
mbed_official 235:685d5f11838f 1825
mbed_official 235:685d5f11838f 1826 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/