fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32l4xx_hal_cryp.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.0.0
bogdanm 0:9b334a45a8ff 6 * @date 26-June-2015
bogdanm 0:9b334a45a8ff 7 * @brief CRYP HAL module driver.
bogdanm 0:9b334a45a8ff 8 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 9 * functionalities of the Cryptography (CRYP) peripheral:
bogdanm 0:9b334a45a8ff 10 * + Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 11 * + Processing functions using polling mode
bogdanm 0:9b334a45a8ff 12 * + Processing functions using interrupt mode
bogdanm 0:9b334a45a8ff 13 * + Processing functions using DMA mode
bogdanm 0:9b334a45a8ff 14 * + Peripheral State functions
bogdanm 0:9b334a45a8ff 15 *
bogdanm 0:9b334a45a8ff 16 @verbatim
bogdanm 0:9b334a45a8ff 17 ==============================================================================
bogdanm 0:9b334a45a8ff 18 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 19 ==============================================================================
bogdanm 0:9b334a45a8ff 20 [..]
bogdanm 0:9b334a45a8ff 21 The CRYP HAL driver can be used as follows:
bogdanm 0:9b334a45a8ff 22
bogdanm 0:9b334a45a8ff 23 (#)Initialize the CRYP low level resources by implementing the HAL_CRYP_MspInit():
bogdanm 0:9b334a45a8ff 24 (++) Enable the CRYP interface clock using __HAL_RCC_AES_CLK_ENABLE()
bogdanm 0:9b334a45a8ff 25 (++) In case of using interrupts (e.g. HAL_CRYP_AES_IT())
bogdanm 0:9b334a45a8ff 26 (+++) Configure the CRYP interrupt priority using HAL_NVIC_SetPriority()
bogdanm 0:9b334a45a8ff 27 (+++) Enable the AES IRQ handler using HAL_NVIC_EnableIRQ()
bogdanm 0:9b334a45a8ff 28 (+++) In AES IRQ handler, call HAL_CRYP_IRQHandler()
bogdanm 0:9b334a45a8ff 29 (++) In case of using DMA to control data transfer (e.g. HAL_CRYPEx_AES_DMA())
bogdanm 0:9b334a45a8ff 30 (+++) Enable the DMA2 interface clock using
bogdanm 0:9b334a45a8ff 31 __HAL_RCC_DMA2_CLK_ENABLE()
bogdanm 0:9b334a45a8ff 32 (+++) Configure and enable two DMA channels one for managing data transfer from
bogdanm 0:9b334a45a8ff 33 memory to peripheral (input channel) and another channel for managing data
bogdanm 0:9b334a45a8ff 34 transfer from peripheral to memory (output channel)
bogdanm 0:9b334a45a8ff 35 (+++) Associate the initialized DMA handle to the CRYP DMA handle
bogdanm 0:9b334a45a8ff 36 using __HAL_LINKDMA()
bogdanm 0:9b334a45a8ff 37 (+++) Configure the priority and enable the NVIC for the transfer complete
bogdanm 0:9b334a45a8ff 38 interrupt on the two DMA channels. The output channel should have higher
bogdanm 0:9b334a45a8ff 39 priority than the input channel.
bogdanm 0:9b334a45a8ff 40 Resort to HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ()
bogdanm 0:9b334a45a8ff 41
bogdanm 0:9b334a45a8ff 42 (#)Initialize the CRYP HAL using HAL_CRYP_Init(). This function configures:
bogdanm 0:9b334a45a8ff 43 (++) The data type: 1-bit, 8-bit, 16-bit and 32-bit
bogdanm 0:9b334a45a8ff 44 (++) The AES operating mode (encryption, key derivation and/or decryption)
bogdanm 0:9b334a45a8ff 45 (++) The AES chaining mode (ECB, CBC, CTR, GCM, GMAC, CMAC)
bogdanm 0:9b334a45a8ff 46 (++) The encryption/decryption key if so required
bogdanm 0:9b334a45a8ff 47 (++) The initialization vector or nonce if applicable (not used in ECB mode).
bogdanm 0:9b334a45a8ff 48
bogdanm 0:9b334a45a8ff 49 (#)Three processing (encryption/decryption) functions are available:
bogdanm 0:9b334a45a8ff 50 (++) Polling mode: encryption and decryption APIs are blocking functions
bogdanm 0:9b334a45a8ff 51 i.e. they process the data and wait till the processing is finished
bogdanm 0:9b334a45a8ff 52 (++) Interrupt mode: encryption and decryption APIs are not blocking functions
bogdanm 0:9b334a45a8ff 53 i.e. they process the data under interrupt
bogdanm 0:9b334a45a8ff 54 (++) DMA mode: encryption and decryption APIs are not blocking functions
bogdanm 0:9b334a45a8ff 55 i.e. the data transfer is ensured by DMA
bogdanm 0:9b334a45a8ff 56
bogdanm 0:9b334a45a8ff 57 (#)Call HAL_CRYP_DeInit() to deinitialize the CRYP peripheral.
bogdanm 0:9b334a45a8ff 58
bogdanm 0:9b334a45a8ff 59 @endverbatim
bogdanm 0:9b334a45a8ff 60 ******************************************************************************
bogdanm 0:9b334a45a8ff 61 * @attention
bogdanm 0:9b334a45a8ff 62 *
bogdanm 0:9b334a45a8ff 63 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 64 *
bogdanm 0:9b334a45a8ff 65 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 66 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 67 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 68 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 69 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 70 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 71 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 72 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 73 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 74 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 75 *
bogdanm 0:9b334a45a8ff 76 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 77 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 78 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 79 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 80 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 81 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 82 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 83 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 84 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 85 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 86 *
bogdanm 0:9b334a45a8ff 87 ******************************************************************************
bogdanm 0:9b334a45a8ff 88 */
bogdanm 0:9b334a45a8ff 89
bogdanm 0:9b334a45a8ff 90 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 91 #include "stm32l4xx_hal.h"
bogdanm 0:9b334a45a8ff 92
bogdanm 0:9b334a45a8ff 93 #ifdef HAL_CRYP_MODULE_ENABLED
bogdanm 0:9b334a45a8ff 94
bogdanm 0:9b334a45a8ff 95 #if defined(STM32L485xx) || defined(STM32L486xx)
bogdanm 0:9b334a45a8ff 96
bogdanm 0:9b334a45a8ff 97 /** @addtogroup STM32L4xx_HAL_Driver
bogdanm 0:9b334a45a8ff 98 * @{
bogdanm 0:9b334a45a8ff 99 */
bogdanm 0:9b334a45a8ff 100
bogdanm 0:9b334a45a8ff 101 /** @defgroup CRYP CRYP
bogdanm 0:9b334a45a8ff 102 * @brief CRYP HAL module driver.
bogdanm 0:9b334a45a8ff 103 * @{
bogdanm 0:9b334a45a8ff 104 */
bogdanm 0:9b334a45a8ff 105
bogdanm 0:9b334a45a8ff 106
bogdanm 0:9b334a45a8ff 107
bogdanm 0:9b334a45a8ff 108 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 109 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 110 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 111 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 112 /* Private functions --------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 113
bogdanm 0:9b334a45a8ff 114 /** @defgroup CRYP_Private_Functions CRYP Private Functions
bogdanm 0:9b334a45a8ff 115 * @{
bogdanm 0:9b334a45a8ff 116 */
bogdanm 0:9b334a45a8ff 117
bogdanm 0:9b334a45a8ff 118 static HAL_StatusTypeDef CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp);
bogdanm 0:9b334a45a8ff 119 static HAL_StatusTypeDef CRYP_SetKey(CRYP_HandleTypeDef *hcryp);
bogdanm 0:9b334a45a8ff 120 static HAL_StatusTypeDef CRYP_AES_IT(CRYP_HandleTypeDef *hcryp);
bogdanm 0:9b334a45a8ff 121
bogdanm 0:9b334a45a8ff 122 /**
bogdanm 0:9b334a45a8ff 123 * @}
bogdanm 0:9b334a45a8ff 124 */
bogdanm 0:9b334a45a8ff 125
bogdanm 0:9b334a45a8ff 126 /* Exported functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 127
bogdanm 0:9b334a45a8ff 128 /** @defgroup CRYP_Exported_Functions CRYP Exported Functions
bogdanm 0:9b334a45a8ff 129 * @{
bogdanm 0:9b334a45a8ff 130 */
bogdanm 0:9b334a45a8ff 131
bogdanm 0:9b334a45a8ff 132 /** @defgroup CRYP_Group1 Initialization and deinitialization functions
bogdanm 0:9b334a45a8ff 133 * @brief Initialization and Configuration functions.
bogdanm 0:9b334a45a8ff 134 *
bogdanm 0:9b334a45a8ff 135 @verbatim
bogdanm 0:9b334a45a8ff 136 ==============================================================================
bogdanm 0:9b334a45a8ff 137 ##### Initialization and deinitialization functions #####
bogdanm 0:9b334a45a8ff 138 ==============================================================================
bogdanm 0:9b334a45a8ff 139 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 140 (+) Initialize the CRYP according to the specified parameters
bogdanm 0:9b334a45a8ff 141 in the CRYP_InitTypeDef and creates the associated handle
bogdanm 0:9b334a45a8ff 142 (+) DeInitialize the CRYP peripheral
bogdanm 0:9b334a45a8ff 143 (+) Initialize the CRYP MSP (MCU Specific Package)
bogdanm 0:9b334a45a8ff 144 (+) DeInitialize the CRC MSP
bogdanm 0:9b334a45a8ff 145
bogdanm 0:9b334a45a8ff 146 @endverbatim
bogdanm 0:9b334a45a8ff 147 * @{
bogdanm 0:9b334a45a8ff 148 */
bogdanm 0:9b334a45a8ff 149
bogdanm 0:9b334a45a8ff 150 /**
bogdanm 0:9b334a45a8ff 151 * @brief Initialize the CRYP according to the specified
bogdanm 0:9b334a45a8ff 152 * parameters in the CRYP_InitTypeDef and initialize the associated handle.
bogdanm 0:9b334a45a8ff 153 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 154 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 155 * @retval HAL status
bogdanm 0:9b334a45a8ff 156 */
bogdanm 0:9b334a45a8ff 157 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 158 {
bogdanm 0:9b334a45a8ff 159 /* Check the CRYP handle allocation */
bogdanm 0:9b334a45a8ff 160 if(hcryp == NULL)
bogdanm 0:9b334a45a8ff 161 {
bogdanm 0:9b334a45a8ff 162 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 163 }
bogdanm 0:9b334a45a8ff 164
bogdanm 0:9b334a45a8ff 165 /* Check the instance */
bogdanm 0:9b334a45a8ff 166 assert_param(IS_AES_ALL_INSTANCE(hcryp->Instance));
bogdanm 0:9b334a45a8ff 167
bogdanm 0:9b334a45a8ff 168 /* Check the parameters */
bogdanm 0:9b334a45a8ff 169 assert_param(IS_CRYP_KEYSIZE(hcryp->Init.KeySize));
bogdanm 0:9b334a45a8ff 170 assert_param(IS_CRYP_DATATYPE(hcryp->Init.DataType));
bogdanm 0:9b334a45a8ff 171 assert_param(IS_CRYP_ALGOMODE(hcryp->Init.OperatingMode));
bogdanm 0:9b334a45a8ff 172 /* ChainingMode parameter is irrelevant when mode is set to Key derivation */
bogdanm 0:9b334a45a8ff 173 if (hcryp->Init.OperatingMode != CRYP_ALGOMODE_KEYDERIVATION)
bogdanm 0:9b334a45a8ff 174 {
bogdanm 0:9b334a45a8ff 175 assert_param(IS_CRYP_CHAINMODE(hcryp->Init.ChainingMode));
bogdanm 0:9b334a45a8ff 176 }
bogdanm 0:9b334a45a8ff 177 assert_param(IS_CRYP_WRITE(hcryp->Init.KeyWriteFlag));
bogdanm 0:9b334a45a8ff 178
bogdanm 0:9b334a45a8ff 179 /*========================================================*/
bogdanm 0:9b334a45a8ff 180 /* Check the proper operating/chaining modes combinations */
bogdanm 0:9b334a45a8ff 181 /*========================================================*/
bogdanm 0:9b334a45a8ff 182 /* Check the proper chaining when the operating mode is key derivation and decryption */
bogdanm 0:9b334a45a8ff 183 if ((hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION_DECRYPT) &&\
bogdanm 0:9b334a45a8ff 184 ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CTR) \
bogdanm 0:9b334a45a8ff 185 || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC) \
bogdanm 0:9b334a45a8ff 186 || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)))
bogdanm 0:9b334a45a8ff 187 {
bogdanm 0:9b334a45a8ff 188 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 189 }
bogdanm 0:9b334a45a8ff 190 /* Check that key derivation is not set in CMAC mode */
bogdanm 0:9b334a45a8ff 191 if ((hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION)
bogdanm 0:9b334a45a8ff 192 && (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC))
bogdanm 0:9b334a45a8ff 193 {
bogdanm 0:9b334a45a8ff 194 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 195 }
bogdanm 0:9b334a45a8ff 196
bogdanm 0:9b334a45a8ff 197
bogdanm 0:9b334a45a8ff 198 /*================*/
bogdanm 0:9b334a45a8ff 199 /* Initialization */
bogdanm 0:9b334a45a8ff 200 /*================*/
bogdanm 0:9b334a45a8ff 201 /* Initialization start */
bogdanm 0:9b334a45a8ff 202 if(hcryp->State == HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 203 {
bogdanm 0:9b334a45a8ff 204 /* Allocate lock resource and initialize it */
bogdanm 0:9b334a45a8ff 205 hcryp->Lock = HAL_UNLOCKED;
bogdanm 0:9b334a45a8ff 206
bogdanm 0:9b334a45a8ff 207 /* Init the low level hardware */
bogdanm 0:9b334a45a8ff 208 HAL_CRYP_MspInit(hcryp);
bogdanm 0:9b334a45a8ff 209 }
bogdanm 0:9b334a45a8ff 210
bogdanm 0:9b334a45a8ff 211 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 212 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 213
bogdanm 0:9b334a45a8ff 214 /* Disable the Peripheral */
bogdanm 0:9b334a45a8ff 215 __HAL_CRYP_DISABLE();
bogdanm 0:9b334a45a8ff 216
bogdanm 0:9b334a45a8ff 217 /*=============================================================*/
bogdanm 0:9b334a45a8ff 218 /* AES initialization common to all operating modes */
bogdanm 0:9b334a45a8ff 219 /*=============================================================*/
bogdanm 0:9b334a45a8ff 220 /* Set the Key size selection */
bogdanm 0:9b334a45a8ff 221 MODIFY_REG(hcryp->Instance->CR, AES_CR_KEYSIZE, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 222
bogdanm 0:9b334a45a8ff 223 /* Set the default CRYP phase when this parameter is not used.
bogdanm 0:9b334a45a8ff 224 Phase is updated below in case of GCM/GMAC/CMAC setting. */
bogdanm 0:9b334a45a8ff 225 hcryp->Phase = HAL_CRYP_PHASE_NOT_USED;
bogdanm 0:9b334a45a8ff 226
bogdanm 0:9b334a45a8ff 227
bogdanm 0:9b334a45a8ff 228
bogdanm 0:9b334a45a8ff 229 /*=============================================================*/
bogdanm 0:9b334a45a8ff 230 /* Carry on the initialization based on the AES operating mode */
bogdanm 0:9b334a45a8ff 231 /*=============================================================*/
bogdanm 0:9b334a45a8ff 232 /* Key derivation */
bogdanm 0:9b334a45a8ff 233 if (hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION)
bogdanm 0:9b334a45a8ff 234 {
bogdanm 0:9b334a45a8ff 235 MODIFY_REG(hcryp->Instance->CR, AES_CR_MODE, CRYP_ALGOMODE_KEYDERIVATION);
bogdanm 0:9b334a45a8ff 236
bogdanm 0:9b334a45a8ff 237 /* Configure the Key registers */
bogdanm 0:9b334a45a8ff 238 if (CRYP_SetKey(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 239 {
bogdanm 0:9b334a45a8ff 240 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 241 }
bogdanm 0:9b334a45a8ff 242 }
bogdanm 0:9b334a45a8ff 243 else
bogdanm 0:9b334a45a8ff 244 /* Encryption / Decryption (with or without key derivation) / authentication */
bogdanm 0:9b334a45a8ff 245 {
bogdanm 0:9b334a45a8ff 246 /* Set data type, operating and chaining modes.
bogdanm 0:9b334a45a8ff 247 In case of GCM or GMAC, data type is forced to 0b00 */
bogdanm 0:9b334a45a8ff 248 if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
bogdanm 0:9b334a45a8ff 249 {
bogdanm 0:9b334a45a8ff 250 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE|AES_CR_MODE|AES_CR_CHMOD, hcryp->Init.OperatingMode|hcryp->Init.ChainingMode);
bogdanm 0:9b334a45a8ff 251 }
bogdanm 0:9b334a45a8ff 252 else
bogdanm 0:9b334a45a8ff 253 {
bogdanm 0:9b334a45a8ff 254 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE|AES_CR_MODE|AES_CR_CHMOD, hcryp->Init.DataType|hcryp->Init.OperatingMode|hcryp->Init.ChainingMode);
bogdanm 0:9b334a45a8ff 255 }
bogdanm 0:9b334a45a8ff 256
bogdanm 0:9b334a45a8ff 257
bogdanm 0:9b334a45a8ff 258 /* Specify the encryption/decryption phase in case of Galois counter mode (GCM),
bogdanm 0:9b334a45a8ff 259 Galois message authentication code (GMAC) or cipher message authentication code (CMAC) */
bogdanm 0:9b334a45a8ff 260 if ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
bogdanm 0:9b334a45a8ff 261 || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC))
bogdanm 0:9b334a45a8ff 262 {
bogdanm 0:9b334a45a8ff 263 MODIFY_REG(hcryp->Instance->CR, AES_CR_GCMPH, hcryp->Init.GCMCMACPhase);
bogdanm 0:9b334a45a8ff 264 hcryp->Phase = HAL_CRYP_PHASE_START;
bogdanm 0:9b334a45a8ff 265 }
bogdanm 0:9b334a45a8ff 266
bogdanm 0:9b334a45a8ff 267
bogdanm 0:9b334a45a8ff 268 /* Configure the Key registers if no need to bypass this step */
bogdanm 0:9b334a45a8ff 269 if (hcryp->Init.KeyWriteFlag == CRYP_KEY_WRITE_ENABLE)
bogdanm 0:9b334a45a8ff 270 {
bogdanm 0:9b334a45a8ff 271 if (CRYP_SetKey(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 272 {
bogdanm 0:9b334a45a8ff 273 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 274 }
bogdanm 0:9b334a45a8ff 275 }
bogdanm 0:9b334a45a8ff 276
bogdanm 0:9b334a45a8ff 277 /* If applicable, configure the Initialization Vector */
bogdanm 0:9b334a45a8ff 278 if (hcryp->Init.ChainingMode != CRYP_CHAINMODE_AES_ECB)
bogdanm 0:9b334a45a8ff 279 {
bogdanm 0:9b334a45a8ff 280 if (CRYP_SetInitVector(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 281 {
bogdanm 0:9b334a45a8ff 282 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 283 }
bogdanm 0:9b334a45a8ff 284 }
bogdanm 0:9b334a45a8ff 285 }
bogdanm 0:9b334a45a8ff 286
bogdanm 0:9b334a45a8ff 287 /* Reset CrypInCount and CrypOutCount */
bogdanm 0:9b334a45a8ff 288 hcryp->CrypInCount = 0;
bogdanm 0:9b334a45a8ff 289 hcryp->CrypOutCount = 0;
bogdanm 0:9b334a45a8ff 290
bogdanm 0:9b334a45a8ff 291 /* Reset ErrorCode field */
bogdanm 0:9b334a45a8ff 292 hcryp->ErrorCode = HAL_CRYP_ERROR_NONE;
bogdanm 0:9b334a45a8ff 293
bogdanm 0:9b334a45a8ff 294 /* Reset Mode suspension request */
bogdanm 0:9b334a45a8ff 295 hcryp->SuspendRequest = HAL_CRYP_SUSPEND_NONE;
bogdanm 0:9b334a45a8ff 296
bogdanm 0:9b334a45a8ff 297 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 298 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 299
bogdanm 0:9b334a45a8ff 300 /* Enable the Peripheral */
bogdanm 0:9b334a45a8ff 301 __HAL_CRYP_ENABLE();
bogdanm 0:9b334a45a8ff 302
bogdanm 0:9b334a45a8ff 303 /* Return function status */
bogdanm 0:9b334a45a8ff 304 return HAL_OK;
bogdanm 0:9b334a45a8ff 305 }
bogdanm 0:9b334a45a8ff 306
bogdanm 0:9b334a45a8ff 307 /**
bogdanm 0:9b334a45a8ff 308 * @brief DeInitialize the CRYP peripheral.
bogdanm 0:9b334a45a8ff 309 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 310 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 311 * @retval HAL status
bogdanm 0:9b334a45a8ff 312 */
bogdanm 0:9b334a45a8ff 313 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 314 {
bogdanm 0:9b334a45a8ff 315 /* Check the CRYP handle allocation */
bogdanm 0:9b334a45a8ff 316 if(hcryp == NULL)
bogdanm 0:9b334a45a8ff 317 {
bogdanm 0:9b334a45a8ff 318 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 319 }
bogdanm 0:9b334a45a8ff 320
bogdanm 0:9b334a45a8ff 321 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 322 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 323
bogdanm 0:9b334a45a8ff 324 /* Set the default CRYP phase */
bogdanm 0:9b334a45a8ff 325 hcryp->Phase = HAL_CRYP_PHASE_READY;
bogdanm 0:9b334a45a8ff 326
bogdanm 0:9b334a45a8ff 327 /* Reset CrypInCount and CrypOutCount */
bogdanm 0:9b334a45a8ff 328 hcryp->CrypInCount = 0;
bogdanm 0:9b334a45a8ff 329 hcryp->CrypOutCount = 0;
bogdanm 0:9b334a45a8ff 330
bogdanm 0:9b334a45a8ff 331 /* Disable the CRYP Peripheral Clock */
bogdanm 0:9b334a45a8ff 332 __HAL_CRYP_DISABLE();
bogdanm 0:9b334a45a8ff 333
bogdanm 0:9b334a45a8ff 334 /* DeInit the low level hardware: CLOCK, NVIC.*/
bogdanm 0:9b334a45a8ff 335 HAL_CRYP_MspDeInit(hcryp);
bogdanm 0:9b334a45a8ff 336
bogdanm 0:9b334a45a8ff 337 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 338 hcryp->State = HAL_CRYP_STATE_RESET;
bogdanm 0:9b334a45a8ff 339
bogdanm 0:9b334a45a8ff 340 /* Release Lock */
bogdanm 0:9b334a45a8ff 341 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 342
bogdanm 0:9b334a45a8ff 343 /* Return function status */
bogdanm 0:9b334a45a8ff 344 return HAL_OK;
bogdanm 0:9b334a45a8ff 345 }
bogdanm 0:9b334a45a8ff 346
bogdanm 0:9b334a45a8ff 347 /**
bogdanm 0:9b334a45a8ff 348 * @brief Initialize the CRYP MSP.
bogdanm 0:9b334a45a8ff 349 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 350 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 351 * @retval None
bogdanm 0:9b334a45a8ff 352 */
bogdanm 0:9b334a45a8ff 353 __weak void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 354 {
bogdanm 0:9b334a45a8ff 355 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 356 the HAL_CRYP_MspInit can be implemented in the user file
bogdanm 0:9b334a45a8ff 357 */
bogdanm 0:9b334a45a8ff 358 }
bogdanm 0:9b334a45a8ff 359
bogdanm 0:9b334a45a8ff 360 /**
bogdanm 0:9b334a45a8ff 361 * @brief DeInitialize CRYP MSP.
bogdanm 0:9b334a45a8ff 362 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 363 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 364 * @retval None
bogdanm 0:9b334a45a8ff 365 */
bogdanm 0:9b334a45a8ff 366 __weak void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 367 {
bogdanm 0:9b334a45a8ff 368 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 369 the HAL_CRYP_MspDeInit can be implemented in the user file
bogdanm 0:9b334a45a8ff 370 */
bogdanm 0:9b334a45a8ff 371 }
bogdanm 0:9b334a45a8ff 372
bogdanm 0:9b334a45a8ff 373 /**
bogdanm 0:9b334a45a8ff 374 * @}
bogdanm 0:9b334a45a8ff 375 */
bogdanm 0:9b334a45a8ff 376
bogdanm 0:9b334a45a8ff 377 /** @defgroup CRYP_Group2 AES processing functions
bogdanm 0:9b334a45a8ff 378 * @brief Processing functions.
bogdanm 0:9b334a45a8ff 379 *
bogdanm 0:9b334a45a8ff 380 @verbatim
bogdanm 0:9b334a45a8ff 381 ==============================================================================
bogdanm 0:9b334a45a8ff 382 ##### AES processing functions #####
bogdanm 0:9b334a45a8ff 383 ==============================================================================
bogdanm 0:9b334a45a8ff 384 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 385 (+) Encrypt plaintext using AES algorithm in different chaining modes
bogdanm 0:9b334a45a8ff 386 (+) Decrypt cyphertext using AES algorithm in different chaining modes
bogdanm 0:9b334a45a8ff 387 [..] Three processing functions are available:
bogdanm 0:9b334a45a8ff 388 (+) Polling mode
bogdanm 0:9b334a45a8ff 389 (+) Interrupt mode
bogdanm 0:9b334a45a8ff 390 (+) DMA mode
bogdanm 0:9b334a45a8ff 391
bogdanm 0:9b334a45a8ff 392 @endverbatim
bogdanm 0:9b334a45a8ff 393 * @{
bogdanm 0:9b334a45a8ff 394 */
bogdanm 0:9b334a45a8ff 395
bogdanm 0:9b334a45a8ff 396
bogdanm 0:9b334a45a8ff 397 /**
bogdanm 0:9b334a45a8ff 398 * @brief Encrypt pPlainData in AES ECB encryption mode. The cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 399 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 400 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 401 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 402 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 403 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 404 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 405 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 406 * resort to generic HAL_CRYPEx_AES() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 407 * @retval HAL status
bogdanm 0:9b334a45a8ff 408 */
bogdanm 0:9b334a45a8ff 409 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 410 {
bogdanm 0:9b334a45a8ff 411 /* Re-initialize AES IP with proper parameters */
bogdanm 0:9b334a45a8ff 412 if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 413 {
bogdanm 0:9b334a45a8ff 414 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 415 }
bogdanm 0:9b334a45a8ff 416 hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
bogdanm 0:9b334a45a8ff 417 hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
bogdanm 0:9b334a45a8ff 418 hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
bogdanm 0:9b334a45a8ff 419 if (HAL_CRYP_Init(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 420 {
bogdanm 0:9b334a45a8ff 421 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 422 }
bogdanm 0:9b334a45a8ff 423
bogdanm 0:9b334a45a8ff 424 return HAL_CRYPEx_AES(hcryp, pPlainData, Size, pCypherData, Timeout);
bogdanm 0:9b334a45a8ff 425 }
bogdanm 0:9b334a45a8ff 426
bogdanm 0:9b334a45a8ff 427
bogdanm 0:9b334a45a8ff 428 /**
bogdanm 0:9b334a45a8ff 429 * @brief Encrypt pPlainData in AES CBC encryption mode with key derivation. The cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 430 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 431 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 432 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 433 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 434 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 435 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 436 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 437 * resort to generic HAL_CRYPEx_AES() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 438 * @retval HAL status
bogdanm 0:9b334a45a8ff 439 */
bogdanm 0:9b334a45a8ff 440 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 441 {
bogdanm 0:9b334a45a8ff 442 /* Re-initialize AES IP with proper parameters */
bogdanm 0:9b334a45a8ff 443 if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 444 {
bogdanm 0:9b334a45a8ff 445 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 446 }
bogdanm 0:9b334a45a8ff 447 hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
bogdanm 0:9b334a45a8ff 448 hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
bogdanm 0:9b334a45a8ff 449 hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
bogdanm 0:9b334a45a8ff 450 if (HAL_CRYP_Init(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 451 {
bogdanm 0:9b334a45a8ff 452 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 453 }
bogdanm 0:9b334a45a8ff 454
bogdanm 0:9b334a45a8ff 455 return HAL_CRYPEx_AES(hcryp, pPlainData, Size, pCypherData, Timeout);
bogdanm 0:9b334a45a8ff 456 }
bogdanm 0:9b334a45a8ff 457
bogdanm 0:9b334a45a8ff 458
bogdanm 0:9b334a45a8ff 459 /**
bogdanm 0:9b334a45a8ff 460 * @brief Encrypt pPlainData in AES CTR encryption mode. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 461 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 462 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 463 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 464 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 465 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 466 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 467 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 468 * resort to generic HAL_CRYPEx_AES() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 469 * @retval HAL status
bogdanm 0:9b334a45a8ff 470 */
bogdanm 0:9b334a45a8ff 471 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 472 {
bogdanm 0:9b334a45a8ff 473 /* Re-initialize AES IP with proper parameters */
bogdanm 0:9b334a45a8ff 474 if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 475 {
bogdanm 0:9b334a45a8ff 476 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 477 }
bogdanm 0:9b334a45a8ff 478 hcryp->Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
bogdanm 0:9b334a45a8ff 479 hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
bogdanm 0:9b334a45a8ff 480 hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
bogdanm 0:9b334a45a8ff 481 if (HAL_CRYP_Init(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 482 {
bogdanm 0:9b334a45a8ff 483 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 484 }
bogdanm 0:9b334a45a8ff 485
bogdanm 0:9b334a45a8ff 486 return HAL_CRYPEx_AES(hcryp, pPlainData, Size, pCypherData, Timeout);
bogdanm 0:9b334a45a8ff 487 }
bogdanm 0:9b334a45a8ff 488
bogdanm 0:9b334a45a8ff 489 /**
bogdanm 0:9b334a45a8ff 490 * @brief Decrypt pCypherData in AES ECB decryption mode with key derivation,
bogdanm 0:9b334a45a8ff 491 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 492 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 493 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 494 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 495 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 496 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 497 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 498 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 499 * resort to generic HAL_CRYPEx_AES() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 500 * @retval HAL status
bogdanm 0:9b334a45a8ff 501 */
bogdanm 0:9b334a45a8ff 502 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 503 {
bogdanm 0:9b334a45a8ff 504 /* Re-initialize AES IP with proper parameters */
bogdanm 0:9b334a45a8ff 505 if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 506 {
bogdanm 0:9b334a45a8ff 507 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 508 }
bogdanm 0:9b334a45a8ff 509 hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
bogdanm 0:9b334a45a8ff 510 hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
bogdanm 0:9b334a45a8ff 511 hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
bogdanm 0:9b334a45a8ff 512 if (HAL_CRYP_Init(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 513 {
bogdanm 0:9b334a45a8ff 514 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 515 }
bogdanm 0:9b334a45a8ff 516
bogdanm 0:9b334a45a8ff 517 return HAL_CRYPEx_AES(hcryp, pCypherData, Size, pPlainData, Timeout);
bogdanm 0:9b334a45a8ff 518 }
bogdanm 0:9b334a45a8ff 519
bogdanm 0:9b334a45a8ff 520 /**
bogdanm 0:9b334a45a8ff 521 * @brief Decrypt pCypherData in AES ECB decryption mode with key derivation,
bogdanm 0:9b334a45a8ff 522 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 523 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 524 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 525 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 526 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 527 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 528 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 529 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 530 * resort to generic HAL_CRYPEx_AES() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 531 * @retval HAL status
bogdanm 0:9b334a45a8ff 532 */
bogdanm 0:9b334a45a8ff 533 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 534 {
bogdanm 0:9b334a45a8ff 535 /* Re-initialize AES IP with proper parameters */
bogdanm 0:9b334a45a8ff 536 if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 537 {
bogdanm 0:9b334a45a8ff 538 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 539 }
bogdanm 0:9b334a45a8ff 540 hcryp->Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
bogdanm 0:9b334a45a8ff 541 hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
bogdanm 0:9b334a45a8ff 542 hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
bogdanm 0:9b334a45a8ff 543 if (HAL_CRYP_Init(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 544 {
bogdanm 0:9b334a45a8ff 545 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 546 }
bogdanm 0:9b334a45a8ff 547
bogdanm 0:9b334a45a8ff 548 return HAL_CRYPEx_AES(hcryp, pCypherData, Size, pPlainData, Timeout);
bogdanm 0:9b334a45a8ff 549 }
bogdanm 0:9b334a45a8ff 550
bogdanm 0:9b334a45a8ff 551 /**
bogdanm 0:9b334a45a8ff 552 * @brief Decrypt pCypherData in AES CTR decryption mode,
bogdanm 0:9b334a45a8ff 553 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 554 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 555 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 556 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 557 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 558 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 559 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 560 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 561 * resort to generic HAL_CRYPEx_AES() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 562 * @retval HAL status
bogdanm 0:9b334a45a8ff 563 */
bogdanm 0:9b334a45a8ff 564 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 565 {
bogdanm 0:9b334a45a8ff 566 /* Re-initialize AES IP with proper parameters */
bogdanm 0:9b334a45a8ff 567 if (HAL_CRYP_DeInit(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 568 {
bogdanm 0:9b334a45a8ff 569 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 570 }
bogdanm 0:9b334a45a8ff 571 hcryp->Init.OperatingMode = CRYP_ALGOMODE_DECRYPT;
bogdanm 0:9b334a45a8ff 572 hcryp->Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
bogdanm 0:9b334a45a8ff 573 hcryp->Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
bogdanm 0:9b334a45a8ff 574 if (HAL_CRYP_Init(hcryp) != HAL_OK)
bogdanm 0:9b334a45a8ff 575 {
bogdanm 0:9b334a45a8ff 576 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 577 }
bogdanm 0:9b334a45a8ff 578
bogdanm 0:9b334a45a8ff 579 return HAL_CRYPEx_AES(hcryp, pCypherData, Size, pPlainData, Timeout);
bogdanm 0:9b334a45a8ff 580 }
bogdanm 0:9b334a45a8ff 581
bogdanm 0:9b334a45a8ff 582 /**
bogdanm 0:9b334a45a8ff 583 * @brief Encrypt pPlainData in AES ECB encryption mode using Interrupt,
bogdanm 0:9b334a45a8ff 584 * the cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 585 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 586 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 587 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 588 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 589 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 590 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 591 * resort to generic HAL_CRYPEx_AES_IT() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 592 * @retval HAL status
bogdanm 0:9b334a45a8ff 593 */
bogdanm 0:9b334a45a8ff 594 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 595 {
bogdanm 0:9b334a45a8ff 596 return HAL_CRYPEx_AES_IT(hcryp, pPlainData, Size, pCypherData);
bogdanm 0:9b334a45a8ff 597 }
bogdanm 0:9b334a45a8ff 598
bogdanm 0:9b334a45a8ff 599 /**
bogdanm 0:9b334a45a8ff 600 * @brief Encrypt pPlainData in AES CBC encryption mode using Interrupt,
bogdanm 0:9b334a45a8ff 601 * the cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 602 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 603 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 604 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 605 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 606 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 607 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 608 * resort to generic HAL_CRYPEx_AES_IT() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 609 * @retval HAL status
bogdanm 0:9b334a45a8ff 610 */
bogdanm 0:9b334a45a8ff 611 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 612 {
bogdanm 0:9b334a45a8ff 613 return HAL_CRYPEx_AES_IT(hcryp, pPlainData, Size, pCypherData);
bogdanm 0:9b334a45a8ff 614 }
bogdanm 0:9b334a45a8ff 615
bogdanm 0:9b334a45a8ff 616
bogdanm 0:9b334a45a8ff 617 /**
bogdanm 0:9b334a45a8ff 618 * @brief Encrypt pPlainData in AES CTR encryption mode using Interrupt,
bogdanm 0:9b334a45a8ff 619 * the cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 620 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 621 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 622 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 623 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 624 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 625 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 626 * resort to generic HAL_CRYPEx_AES_IT() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 627 * @retval HAL status
bogdanm 0:9b334a45a8ff 628 */
bogdanm 0:9b334a45a8ff 629 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 630 {
bogdanm 0:9b334a45a8ff 631 return HAL_CRYPEx_AES_IT(hcryp, pPlainData, Size, pCypherData);
bogdanm 0:9b334a45a8ff 632 }
bogdanm 0:9b334a45a8ff 633
bogdanm 0:9b334a45a8ff 634 /**
bogdanm 0:9b334a45a8ff 635 * @brief Decrypt pCypherData in AES ECB decryption mode using Interrupt,
bogdanm 0:9b334a45a8ff 636 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 637 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 638 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 639 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 640 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 641 * @param pPlainData: Pointer to the plaintext buffer.
bogdanm 0:9b334a45a8ff 642 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 643 * resort to generic HAL_CRYPEx_AES_IT() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 644 * @retval HAL status
bogdanm 0:9b334a45a8ff 645 */
bogdanm 0:9b334a45a8ff 646 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 647 {
bogdanm 0:9b334a45a8ff 648 return HAL_CRYPEx_AES_IT(hcryp, pCypherData, Size, pPlainData);
bogdanm 0:9b334a45a8ff 649 }
bogdanm 0:9b334a45a8ff 650
bogdanm 0:9b334a45a8ff 651 /**
bogdanm 0:9b334a45a8ff 652 * @brief Decrypt pCypherData in AES CBC decryption mode using Interrupt,
bogdanm 0:9b334a45a8ff 653 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 654 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 655 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 656 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 657 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 658 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 659 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 660 * resort to generic HAL_CRYPEx_AES_IT() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 661 * @retval HAL status
bogdanm 0:9b334a45a8ff 662 */
bogdanm 0:9b334a45a8ff 663 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 664 {
bogdanm 0:9b334a45a8ff 665 return HAL_CRYPEx_AES_IT(hcryp, pCypherData, Size, pPlainData);
bogdanm 0:9b334a45a8ff 666 }
bogdanm 0:9b334a45a8ff 667
bogdanm 0:9b334a45a8ff 668 /**
bogdanm 0:9b334a45a8ff 669 * @brief Decrypt pCypherData in AES CTR decryption mode using Interrupt,
bogdanm 0:9b334a45a8ff 670 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 671 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 672 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 673 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 674 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 675 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 676 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 677 * resort to generic HAL_CRYPEx_AES_IT() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 678 * @retval HAL status
bogdanm 0:9b334a45a8ff 679 */
bogdanm 0:9b334a45a8ff 680 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 681 {
bogdanm 0:9b334a45a8ff 682 return HAL_CRYPEx_AES_IT(hcryp, pCypherData, Size, pPlainData);
bogdanm 0:9b334a45a8ff 683 }
bogdanm 0:9b334a45a8ff 684
bogdanm 0:9b334a45a8ff 685 /**
bogdanm 0:9b334a45a8ff 686 * @brief Encrypt pPlainData in AES ECB encryption mode using DMA,
bogdanm 0:9b334a45a8ff 687 * the cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 688 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 689 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 690 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 691 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 692 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 693 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 694 * resort to generic HAL_CRYPEx_AES_DMA() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 695 * @retval HAL status
bogdanm 0:9b334a45a8ff 696 */
bogdanm 0:9b334a45a8ff 697 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 698 {
bogdanm 0:9b334a45a8ff 699 return HAL_CRYPEx_AES_DMA(hcryp, pPlainData, Size, pCypherData);
bogdanm 0:9b334a45a8ff 700 }
bogdanm 0:9b334a45a8ff 701
bogdanm 0:9b334a45a8ff 702
bogdanm 0:9b334a45a8ff 703
bogdanm 0:9b334a45a8ff 704 /**
bogdanm 0:9b334a45a8ff 705 * @brief Encrypt pPlainData in AES CBC encryption mode using DMA,
bogdanm 0:9b334a45a8ff 706 * the cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 707 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 708 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 709 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 710 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 711 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 712 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 713 * resort to generic HAL_CRYPEx_AES_DMA() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 714 * @retval HAL status
bogdanm 0:9b334a45a8ff 715 */
bogdanm 0:9b334a45a8ff 716 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 717 {
bogdanm 0:9b334a45a8ff 718 return HAL_CRYPEx_AES_DMA(hcryp, pPlainData, Size, pCypherData);
bogdanm 0:9b334a45a8ff 719 }
bogdanm 0:9b334a45a8ff 720
bogdanm 0:9b334a45a8ff 721 /**
bogdanm 0:9b334a45a8ff 722 * @brief Encrypt pPlainData in AES CTR encryption mode using DMA,
bogdanm 0:9b334a45a8ff 723 * the cypher data are available in pCypherData.
bogdanm 0:9b334a45a8ff 724 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 725 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 726 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 727 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 728 * @param pCypherData: Pointer to the cyphertext buffer.
bogdanm 0:9b334a45a8ff 729 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 730 * resort to generic HAL_CRYPEx_AES_DMA() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 731 * @retval HAL status
bogdanm 0:9b334a45a8ff 732 */
bogdanm 0:9b334a45a8ff 733 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 734 {
bogdanm 0:9b334a45a8ff 735 return HAL_CRYPEx_AES_DMA(hcryp, pPlainData, Size, pCypherData);
bogdanm 0:9b334a45a8ff 736 }
bogdanm 0:9b334a45a8ff 737
bogdanm 0:9b334a45a8ff 738 /**
bogdanm 0:9b334a45a8ff 739 * @brief Decrypt pCypherData in AES ECB decryption mode using DMA,
bogdanm 0:9b334a45a8ff 740 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 741 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 742 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 743 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 744 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 745 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 746 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 747 * resort to generic HAL_CRYPEx_AES_DMA() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 748 * @retval HAL status
bogdanm 0:9b334a45a8ff 749 */
bogdanm 0:9b334a45a8ff 750 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 751 {
bogdanm 0:9b334a45a8ff 752 return HAL_CRYPEx_AES_DMA(hcryp, pCypherData, Size, pPlainData);
bogdanm 0:9b334a45a8ff 753 }
bogdanm 0:9b334a45a8ff 754
bogdanm 0:9b334a45a8ff 755 /**
bogdanm 0:9b334a45a8ff 756 * @brief Decrypt pCypherData in AES CBC decryption mode using DMA,
bogdanm 0:9b334a45a8ff 757 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 758 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 759 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 760 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 761 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 762 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 763 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 764 * resort to generic HAL_CRYPEx_AES_DMA() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 765 * @retval HAL status
bogdanm 0:9b334a45a8ff 766 */
bogdanm 0:9b334a45a8ff 767 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 768 {
bogdanm 0:9b334a45a8ff 769 return HAL_CRYPEx_AES_DMA(hcryp, pCypherData, Size, pPlainData);
bogdanm 0:9b334a45a8ff 770 }
bogdanm 0:9b334a45a8ff 771
bogdanm 0:9b334a45a8ff 772 /**
bogdanm 0:9b334a45a8ff 773 * @brief Decrypt pCypherData in AES CTR decryption mode using DMA,
bogdanm 0:9b334a45a8ff 774 * the decyphered data are available in pPlainData.
bogdanm 0:9b334a45a8ff 775 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 776 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 777 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 778 * @param Size: Length of the plaintext buffer in bytes, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 779 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 780 * @note This API is provided only to maintain compatibility with legacy software. Users should directly
bogdanm 0:9b334a45a8ff 781 * resort to generic HAL_CRYPEx_AES_DMA() API instead (usage recommended).
bogdanm 0:9b334a45a8ff 782 * @retval HAL status
bogdanm 0:9b334a45a8ff 783 */
bogdanm 0:9b334a45a8ff 784 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 785 {
bogdanm 0:9b334a45a8ff 786 return HAL_CRYPEx_AES_DMA(hcryp, pCypherData, Size, pPlainData);
bogdanm 0:9b334a45a8ff 787 }
bogdanm 0:9b334a45a8ff 788
bogdanm 0:9b334a45a8ff 789
bogdanm 0:9b334a45a8ff 790 /**
bogdanm 0:9b334a45a8ff 791 * @}
bogdanm 0:9b334a45a8ff 792 */
bogdanm 0:9b334a45a8ff 793
bogdanm 0:9b334a45a8ff 794 /** @defgroup CRYP_Group3 Callback functions
bogdanm 0:9b334a45a8ff 795 * @brief Callback functions.
bogdanm 0:9b334a45a8ff 796 *
bogdanm 0:9b334a45a8ff 797 @verbatim
bogdanm 0:9b334a45a8ff 798 ==============================================================================
bogdanm 0:9b334a45a8ff 799 ##### Callback functions #####
bogdanm 0:9b334a45a8ff 800 ==============================================================================
bogdanm 0:9b334a45a8ff 801 [..] This section provides Interruption and DMA callback functions:
bogdanm 0:9b334a45a8ff 802 (+) DMA Input data transfer complete
bogdanm 0:9b334a45a8ff 803 (+) DMA Output data transfer complete
bogdanm 0:9b334a45a8ff 804 (+) DMA or Interrupt error
bogdanm 0:9b334a45a8ff 805
bogdanm 0:9b334a45a8ff 806 @endverbatim
bogdanm 0:9b334a45a8ff 807 * @{
bogdanm 0:9b334a45a8ff 808 */
bogdanm 0:9b334a45a8ff 809
bogdanm 0:9b334a45a8ff 810 /**
bogdanm 0:9b334a45a8ff 811 * @brief CRYP error callback.
bogdanm 0:9b334a45a8ff 812 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 813 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 814 * @retval None
bogdanm 0:9b334a45a8ff 815 */
bogdanm 0:9b334a45a8ff 816 __weak void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 817 {
bogdanm 0:9b334a45a8ff 818 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 819 the HAL_CRYP_ErrorCallback can be implemented in the user file
bogdanm 0:9b334a45a8ff 820 */
bogdanm 0:9b334a45a8ff 821 }
bogdanm 0:9b334a45a8ff 822
bogdanm 0:9b334a45a8ff 823 /**
bogdanm 0:9b334a45a8ff 824 * @brief Input DMA transfer complete callback.
bogdanm 0:9b334a45a8ff 825 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 826 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 827 * @retval None
bogdanm 0:9b334a45a8ff 828 */
bogdanm 0:9b334a45a8ff 829 __weak void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 830 {
bogdanm 0:9b334a45a8ff 831 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 832 the HAL_CRYP_InCpltCallback can be implemented in the user file
bogdanm 0:9b334a45a8ff 833 */
bogdanm 0:9b334a45a8ff 834 }
bogdanm 0:9b334a45a8ff 835
bogdanm 0:9b334a45a8ff 836 /**
bogdanm 0:9b334a45a8ff 837 * @brief Output DMA transfer complete callback.
bogdanm 0:9b334a45a8ff 838 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 839 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 840 * @retval None
bogdanm 0:9b334a45a8ff 841 */
bogdanm 0:9b334a45a8ff 842 __weak void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 843 {
bogdanm 0:9b334a45a8ff 844 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 845 the HAL_CRYP_OutCpltCallback can be implemented in the user file
bogdanm 0:9b334a45a8ff 846 */
bogdanm 0:9b334a45a8ff 847 }
bogdanm 0:9b334a45a8ff 848
bogdanm 0:9b334a45a8ff 849 /**
bogdanm 0:9b334a45a8ff 850 * @}
bogdanm 0:9b334a45a8ff 851 */
bogdanm 0:9b334a45a8ff 852
bogdanm 0:9b334a45a8ff 853 /** @defgroup CRYP_Group4 CRYP IRQ handler
bogdanm 0:9b334a45a8ff 854 * @brief AES IRQ handler.
bogdanm 0:9b334a45a8ff 855 *
bogdanm 0:9b334a45a8ff 856 @verbatim
bogdanm 0:9b334a45a8ff 857 ==============================================================================
bogdanm 0:9b334a45a8ff 858 ##### AES IRQ handler management #####
bogdanm 0:9b334a45a8ff 859 ==============================================================================
bogdanm 0:9b334a45a8ff 860 [..] This section provides AES IRQ handler function.
bogdanm 0:9b334a45a8ff 861
bogdanm 0:9b334a45a8ff 862 @endverbatim
bogdanm 0:9b334a45a8ff 863 * @{
bogdanm 0:9b334a45a8ff 864 */
bogdanm 0:9b334a45a8ff 865
bogdanm 0:9b334a45a8ff 866 /**
bogdanm 0:9b334a45a8ff 867 * @brief Handle AES interrupt request.
bogdanm 0:9b334a45a8ff 868 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 869 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 870 * @retval None
bogdanm 0:9b334a45a8ff 871 */
bogdanm 0:9b334a45a8ff 872 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 873 {
bogdanm 0:9b334a45a8ff 874 /* Check if error occurred */
bogdanm 0:9b334a45a8ff 875 if (__HAL_CRYP_GET_IT_SOURCE(CRYP_IT_ERRIE) != RESET)
bogdanm 0:9b334a45a8ff 876 {
bogdanm 0:9b334a45a8ff 877 /* If Write Error occurred */
bogdanm 0:9b334a45a8ff 878 if (__HAL_CRYP_GET_FLAG(CRYP_IT_WRERR) != RESET)
bogdanm 0:9b334a45a8ff 879 {
bogdanm 0:9b334a45a8ff 880 hcryp->ErrorCode |= HAL_CRYP_WRITE_ERROR;
bogdanm 0:9b334a45a8ff 881 hcryp->State = HAL_CRYP_STATE_ERROR;
bogdanm 0:9b334a45a8ff 882 }
bogdanm 0:9b334a45a8ff 883 /* If Read Error occurred */
bogdanm 0:9b334a45a8ff 884 if (__HAL_CRYP_GET_FLAG(CRYP_IT_RDERR) != RESET)
bogdanm 0:9b334a45a8ff 885 {
bogdanm 0:9b334a45a8ff 886 hcryp->ErrorCode |= HAL_CRYP_READ_ERROR;
bogdanm 0:9b334a45a8ff 887 hcryp->State = HAL_CRYP_STATE_ERROR;
bogdanm 0:9b334a45a8ff 888 }
bogdanm 0:9b334a45a8ff 889
bogdanm 0:9b334a45a8ff 890 /* If an error has been reported */
bogdanm 0:9b334a45a8ff 891 if (hcryp->State == HAL_CRYP_STATE_ERROR)
bogdanm 0:9b334a45a8ff 892 {
bogdanm 0:9b334a45a8ff 893 /* Disable Error and Computation Complete Interrupts */
bogdanm 0:9b334a45a8ff 894 __HAL_CRYP_DISABLE_IT(CRYP_IT_CCFIE|CRYP_IT_ERRIE);
bogdanm 0:9b334a45a8ff 895 /* Clear all Interrupt flags */
bogdanm 0:9b334a45a8ff 896 __HAL_CRYP_CLEAR_FLAG(CRYP_ERR_CLEAR|CRYP_CCF_CLEAR);
bogdanm 0:9b334a45a8ff 897
bogdanm 0:9b334a45a8ff 898 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 899 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 900
bogdanm 0:9b334a45a8ff 901 HAL_CRYP_ErrorCallback(hcryp);
bogdanm 0:9b334a45a8ff 902
bogdanm 0:9b334a45a8ff 903 return;
bogdanm 0:9b334a45a8ff 904 }
bogdanm 0:9b334a45a8ff 905 }
bogdanm 0:9b334a45a8ff 906
bogdanm 0:9b334a45a8ff 907 /* Check if computation complete interrupt is enabled
bogdanm 0:9b334a45a8ff 908 and if the computation complete flag is raised */
bogdanm 0:9b334a45a8ff 909 if((__HAL_CRYP_GET_FLAG(CRYP_IT_CCF) != RESET) && (__HAL_CRYP_GET_IT_SOURCE(CRYP_IT_CCFIE) != RESET))
bogdanm 0:9b334a45a8ff 910 {
bogdanm 0:9b334a45a8ff 911 if ((hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_GCM_GMAC)
bogdanm 0:9b334a45a8ff 912 || (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC))
bogdanm 0:9b334a45a8ff 913 {
bogdanm 0:9b334a45a8ff 914 /* To ensure proper suspension requests management, CCF flag
bogdanm 0:9b334a45a8ff 915 is reset in CRYP_AES_Auth_IT() according to the current
bogdanm 0:9b334a45a8ff 916 phase under handling */
bogdanm 0:9b334a45a8ff 917 CRYP_AES_Auth_IT(hcryp);
bogdanm 0:9b334a45a8ff 918 }
bogdanm 0:9b334a45a8ff 919 else
bogdanm 0:9b334a45a8ff 920 {
bogdanm 0:9b334a45a8ff 921 /* Clear Computation Complete Flag */
bogdanm 0:9b334a45a8ff 922 __HAL_CRYP_CLEAR_FLAG(CRYP_CCF_CLEAR);
bogdanm 0:9b334a45a8ff 923 CRYP_AES_IT(hcryp);
bogdanm 0:9b334a45a8ff 924 }
bogdanm 0:9b334a45a8ff 925 }
bogdanm 0:9b334a45a8ff 926 }
bogdanm 0:9b334a45a8ff 927
bogdanm 0:9b334a45a8ff 928 /**
bogdanm 0:9b334a45a8ff 929 * @}
bogdanm 0:9b334a45a8ff 930 */
bogdanm 0:9b334a45a8ff 931
bogdanm 0:9b334a45a8ff 932 /** @defgroup CRYP_Group5 Peripheral State functions
bogdanm 0:9b334a45a8ff 933 * @brief Peripheral State functions.
bogdanm 0:9b334a45a8ff 934 *
bogdanm 0:9b334a45a8ff 935 @verbatim
bogdanm 0:9b334a45a8ff 936 ==============================================================================
bogdanm 0:9b334a45a8ff 937 ##### Peripheral State functions #####
bogdanm 0:9b334a45a8ff 938 ==============================================================================
bogdanm 0:9b334a45a8ff 939 [..]
bogdanm 0:9b334a45a8ff 940 This subsection permits to get in run-time the status of the peripheral.
bogdanm 0:9b334a45a8ff 941
bogdanm 0:9b334a45a8ff 942 @endverbatim
bogdanm 0:9b334a45a8ff 943 * @{
bogdanm 0:9b334a45a8ff 944 */
bogdanm 0:9b334a45a8ff 945
bogdanm 0:9b334a45a8ff 946 /**
bogdanm 0:9b334a45a8ff 947 * @brief Return the CRYP handle state.
bogdanm 0:9b334a45a8ff 948 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 949 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 950 * @retval HAL state
bogdanm 0:9b334a45a8ff 951 */
bogdanm 0:9b334a45a8ff 952 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 953 {
bogdanm 0:9b334a45a8ff 954 /* Return CRYP handle state */
bogdanm 0:9b334a45a8ff 955 return hcryp->State;
bogdanm 0:9b334a45a8ff 956 }
bogdanm 0:9b334a45a8ff 957
bogdanm 0:9b334a45a8ff 958 /**
bogdanm 0:9b334a45a8ff 959 * @brief Return the CRYP peripheral error.
bogdanm 0:9b334a45a8ff 960 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 961 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 962 * @note The returned error is a bit-map combination of possible errors
bogdanm 0:9b334a45a8ff 963 * @retval Error bit-map
bogdanm 0:9b334a45a8ff 964 */
bogdanm 0:9b334a45a8ff 965 uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 966 {
bogdanm 0:9b334a45a8ff 967 return hcryp->ErrorCode;
bogdanm 0:9b334a45a8ff 968 }
bogdanm 0:9b334a45a8ff 969
bogdanm 0:9b334a45a8ff 970 /**
bogdanm 0:9b334a45a8ff 971 * @}
bogdanm 0:9b334a45a8ff 972 */
bogdanm 0:9b334a45a8ff 973
bogdanm 0:9b334a45a8ff 974 /**
bogdanm 0:9b334a45a8ff 975 * @}
bogdanm 0:9b334a45a8ff 976 */
bogdanm 0:9b334a45a8ff 977
bogdanm 0:9b334a45a8ff 978 /** @addtogroup CRYP_Private_Functions
bogdanm 0:9b334a45a8ff 979 * @{
bogdanm 0:9b334a45a8ff 980 */
bogdanm 0:9b334a45a8ff 981
bogdanm 0:9b334a45a8ff 982
bogdanm 0:9b334a45a8ff 983 /**
bogdanm 0:9b334a45a8ff 984 * @brief Write the Key in KeyRx registers.
bogdanm 0:9b334a45a8ff 985 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 986 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 987 * @retval HAL status
bogdanm 0:9b334a45a8ff 988 */
bogdanm 0:9b334a45a8ff 989 static HAL_StatusTypeDef CRYP_SetKey(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 990 {
bogdanm 0:9b334a45a8ff 991 uint32_t keyaddr = 0x0;
bogdanm 0:9b334a45a8ff 992
bogdanm 0:9b334a45a8ff 993 if (hcryp->Init.pKey == NULL)
bogdanm 0:9b334a45a8ff 994 {
bogdanm 0:9b334a45a8ff 995 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 996 }
bogdanm 0:9b334a45a8ff 997
bogdanm 0:9b334a45a8ff 998 keyaddr = (uint32_t)(hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 999
bogdanm 0:9b334a45a8ff 1000 if (hcryp->Init.KeySize == CRYP_KEYSIZE_256B)
bogdanm 0:9b334a45a8ff 1001 {
bogdanm 0:9b334a45a8ff 1002 hcryp->Instance->KEYR7 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1003 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1004 hcryp->Instance->KEYR6 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1005 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1006 hcryp->Instance->KEYR5 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1007 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1008 hcryp->Instance->KEYR4 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1009 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1010 }
bogdanm 0:9b334a45a8ff 1011
bogdanm 0:9b334a45a8ff 1012 hcryp->Instance->KEYR3 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1013 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1014 hcryp->Instance->KEYR2 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1015 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1016 hcryp->Instance->KEYR1 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1017 keyaddr+=4;
bogdanm 0:9b334a45a8ff 1018 hcryp->Instance->KEYR0 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 1019
bogdanm 0:9b334a45a8ff 1020 return HAL_OK;
bogdanm 0:9b334a45a8ff 1021 }
bogdanm 0:9b334a45a8ff 1022
bogdanm 0:9b334a45a8ff 1023 /**
bogdanm 0:9b334a45a8ff 1024 * @brief Write the InitVector/InitCounter in IVRx registers.
bogdanm 0:9b334a45a8ff 1025 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1026 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1027 * @retval HAL status
bogdanm 0:9b334a45a8ff 1028 */
bogdanm 0:9b334a45a8ff 1029 static HAL_StatusTypeDef CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1030 {
bogdanm 0:9b334a45a8ff 1031 uint32_t ivaddr = 0x0;
bogdanm 0:9b334a45a8ff 1032
bogdanm 0:9b334a45a8ff 1033 if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)
bogdanm 0:9b334a45a8ff 1034 {
bogdanm 0:9b334a45a8ff 1035 hcryp->Instance->IVR3 = 0;
bogdanm 0:9b334a45a8ff 1036 hcryp->Instance->IVR2 = 0;
bogdanm 0:9b334a45a8ff 1037 hcryp->Instance->IVR1 = 0;
bogdanm 0:9b334a45a8ff 1038 hcryp->Instance->IVR0 = 0;
bogdanm 0:9b334a45a8ff 1039 }
bogdanm 0:9b334a45a8ff 1040 else
bogdanm 0:9b334a45a8ff 1041 {
bogdanm 0:9b334a45a8ff 1042 if (hcryp->Init.pInitVect == NULL)
bogdanm 0:9b334a45a8ff 1043 {
bogdanm 0:9b334a45a8ff 1044 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1045 }
bogdanm 0:9b334a45a8ff 1046
bogdanm 0:9b334a45a8ff 1047 ivaddr = (uint32_t)(hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1048
bogdanm 0:9b334a45a8ff 1049 hcryp->Instance->IVR3 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 1050 ivaddr+=4;
bogdanm 0:9b334a45a8ff 1051 hcryp->Instance->IVR2 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 1052 ivaddr+=4;
bogdanm 0:9b334a45a8ff 1053 hcryp->Instance->IVR1 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 1054 ivaddr+=4;
bogdanm 0:9b334a45a8ff 1055 hcryp->Instance->IVR0 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 1056 }
bogdanm 0:9b334a45a8ff 1057 return HAL_OK;
bogdanm 0:9b334a45a8ff 1058 }
bogdanm 0:9b334a45a8ff 1059
bogdanm 0:9b334a45a8ff 1060
bogdanm 0:9b334a45a8ff 1061
bogdanm 0:9b334a45a8ff 1062 /**
bogdanm 0:9b334a45a8ff 1063 * @brief Handle CRYP block input/output data handling under interruption.
bogdanm 0:9b334a45a8ff 1064 * @note The function is called under interruption only, once
bogdanm 0:9b334a45a8ff 1065 * interruptions have been enabled by HAL_CRYPEx_AES_IT().
bogdanm 0:9b334a45a8ff 1066 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1067 * the configuration information for CRYP module.
bogdanm 0:9b334a45a8ff 1068 * @retval HAL status
bogdanm 0:9b334a45a8ff 1069 */
bogdanm 0:9b334a45a8ff 1070 static HAL_StatusTypeDef CRYP_AES_IT(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1071 {
bogdanm 0:9b334a45a8ff 1072 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 1073 uint32_t outputaddr = 0;
bogdanm 0:9b334a45a8ff 1074
bogdanm 0:9b334a45a8ff 1075 if(hcryp->State == HAL_CRYP_STATE_BUSY)
bogdanm 0:9b334a45a8ff 1076 {
bogdanm 0:9b334a45a8ff 1077 if (hcryp->Init.OperatingMode != CRYP_ALGOMODE_KEYDERIVATION)
bogdanm 0:9b334a45a8ff 1078 {
bogdanm 0:9b334a45a8ff 1079 /* Get the output data address */
bogdanm 0:9b334a45a8ff 1080 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1081
bogdanm 0:9b334a45a8ff 1082 /* Read the last available output block from the Data Output Register */
bogdanm 0:9b334a45a8ff 1083 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1084 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1085 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1086 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1087 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1088 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1089 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1090 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1091 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1092
bogdanm 0:9b334a45a8ff 1093 }
bogdanm 0:9b334a45a8ff 1094 else
bogdanm 0:9b334a45a8ff 1095 {
bogdanm 0:9b334a45a8ff 1096 /* Read the derived key from the Key registers */
bogdanm 0:9b334a45a8ff 1097 if (hcryp->Init.KeySize == CRYP_KEYSIZE_256B)
bogdanm 0:9b334a45a8ff 1098 {
bogdanm 0:9b334a45a8ff 1099 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR7);
bogdanm 0:9b334a45a8ff 1100 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1101 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR6);
bogdanm 0:9b334a45a8ff 1102 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1103 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR5);
bogdanm 0:9b334a45a8ff 1104 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1105 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR4);
bogdanm 0:9b334a45a8ff 1106 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1107 }
bogdanm 0:9b334a45a8ff 1108
bogdanm 0:9b334a45a8ff 1109 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR3);
bogdanm 0:9b334a45a8ff 1110 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1111 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR2);
bogdanm 0:9b334a45a8ff 1112 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1113 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR1);
bogdanm 0:9b334a45a8ff 1114 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1115 *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR0);
bogdanm 0:9b334a45a8ff 1116 }
bogdanm 0:9b334a45a8ff 1117
bogdanm 0:9b334a45a8ff 1118 /* In case of ciphering or deciphering, check if all output text has been retrieved;
bogdanm 0:9b334a45a8ff 1119 In case of key derivation, stop right there */
bogdanm 0:9b334a45a8ff 1120 if ((hcryp->CrypOutCount == 0) || (hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION))
bogdanm 0:9b334a45a8ff 1121 {
bogdanm 0:9b334a45a8ff 1122 /* Disable Computation Complete Flag and Errors Interrupts */
bogdanm 0:9b334a45a8ff 1123 __HAL_CRYP_DISABLE_IT(CRYP_IT_CCFIE|CRYP_IT_ERRIE);
bogdanm 0:9b334a45a8ff 1124 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1125 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1126
bogdanm 0:9b334a45a8ff 1127 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1128 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1129
bogdanm 0:9b334a45a8ff 1130 /* Call computation complete callback */
bogdanm 0:9b334a45a8ff 1131 HAL_CRYPEx_ComputationCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1132
bogdanm 0:9b334a45a8ff 1133 return HAL_OK;
bogdanm 0:9b334a45a8ff 1134 }
bogdanm 0:9b334a45a8ff 1135 /* If suspension flag has been raised, suspend processing */
bogdanm 0:9b334a45a8ff 1136 else if (hcryp->SuspendRequest == HAL_CRYP_SUSPEND)
bogdanm 0:9b334a45a8ff 1137 {
bogdanm 0:9b334a45a8ff 1138 /* reset ModeSuspend */
bogdanm 0:9b334a45a8ff 1139 hcryp->SuspendRequest = HAL_CRYP_SUSPEND_NONE;
bogdanm 0:9b334a45a8ff 1140
bogdanm 0:9b334a45a8ff 1141 /* Disable Computation Complete Flag and Errors Interrupts */
bogdanm 0:9b334a45a8ff 1142 __HAL_CRYP_DISABLE_IT(CRYP_IT_CCFIE|CRYP_IT_ERRIE);
bogdanm 0:9b334a45a8ff 1143 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1144 hcryp->State = HAL_CRYP_STATE_SUSPENDED;
bogdanm 0:9b334a45a8ff 1145
bogdanm 0:9b334a45a8ff 1146 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1147 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1148
bogdanm 0:9b334a45a8ff 1149 return HAL_OK;
bogdanm 0:9b334a45a8ff 1150 }
bogdanm 0:9b334a45a8ff 1151 else /* Process the rest of input data */
bogdanm 0:9b334a45a8ff 1152 {
bogdanm 0:9b334a45a8ff 1153 /* Get the Intput data address */
bogdanm 0:9b334a45a8ff 1154 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1155
bogdanm 0:9b334a45a8ff 1156 /* Increment/decrement instance pointer/counter */
bogdanm 0:9b334a45a8ff 1157 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1158 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1159
bogdanm 0:9b334a45a8ff 1160 /* Write the next input block in the Data Input register */
bogdanm 0:9b334a45a8ff 1161 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1162 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1163 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1164 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1165 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1166 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1167 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1168
bogdanm 0:9b334a45a8ff 1169 return HAL_OK;
bogdanm 0:9b334a45a8ff 1170 }
bogdanm 0:9b334a45a8ff 1171 }
bogdanm 0:9b334a45a8ff 1172 else
bogdanm 0:9b334a45a8ff 1173 {
bogdanm 0:9b334a45a8ff 1174 return HAL_BUSY;
bogdanm 0:9b334a45a8ff 1175 }
bogdanm 0:9b334a45a8ff 1176 }
bogdanm 0:9b334a45a8ff 1177
bogdanm 0:9b334a45a8ff 1178
bogdanm 0:9b334a45a8ff 1179
bogdanm 0:9b334a45a8ff 1180
bogdanm 0:9b334a45a8ff 1181 /**
bogdanm 0:9b334a45a8ff 1182 * @}
bogdanm 0:9b334a45a8ff 1183 */
bogdanm 0:9b334a45a8ff 1184
bogdanm 0:9b334a45a8ff 1185
bogdanm 0:9b334a45a8ff 1186
bogdanm 0:9b334a45a8ff 1187 /**
bogdanm 0:9b334a45a8ff 1188 * @}
bogdanm 0:9b334a45a8ff 1189 */
bogdanm 0:9b334a45a8ff 1190
bogdanm 0:9b334a45a8ff 1191 /**
bogdanm 0:9b334a45a8ff 1192 * @}
bogdanm 0:9b334a45a8ff 1193 */
bogdanm 0:9b334a45a8ff 1194
bogdanm 0:9b334a45a8ff 1195 #endif /* defined(STM32L485xx) || defined(STM32L486xx) */
bogdanm 0:9b334a45a8ff 1196
bogdanm 0:9b334a45a8ff 1197 #endif /* HAL_CRYP_MODULE_ENABLED */
bogdanm 0:9b334a45a8ff 1198
bogdanm 0:9b334a45a8ff 1199 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/