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
Child:
113:b3775bf36a83
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 stm32l0xx_hal_cryp.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.2.0
bogdanm 0:9b334a45a8ff 6 * @date 06-February-2015
bogdanm 0:9b334a45a8ff 7 * @brief CRYP HAL module driver.
bogdanm 0:9b334a45a8ff 8 *
bogdanm 0:9b334a45a8ff 9 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 10 * functionalities of the Cryptography (CRYP) peripheral:
bogdanm 0:9b334a45a8ff 11 * + Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 12 * + Processing functions by algorithm using polling mode
bogdanm 0:9b334a45a8ff 13 * + Processing functions by algorithm using interrupt mode
bogdanm 0:9b334a45a8ff 14 * + Processing functions by algorithm using DMA mode
bogdanm 0:9b334a45a8ff 15 * + Peripheral State functions
bogdanm 0:9b334a45a8ff 16 *
bogdanm 0:9b334a45a8ff 17 @verbatim
bogdanm 0:9b334a45a8ff 18 ==============================================================================
bogdanm 0:9b334a45a8ff 19 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 20 ==============================================================================
bogdanm 0:9b334a45a8ff 21 [..]
bogdanm 0:9b334a45a8ff 22 The CRYP HAL driver can be used as follows:
bogdanm 0:9b334a45a8ff 23
bogdanm 0:9b334a45a8ff 24 (#)Initialize the CRYP low level resources by implementing the HAL_CRYP_MspInit():
bogdanm 0:9b334a45a8ff 25 (##) Enable the CRYP interface clock using __HAL_RCC_AES_CLK_ENABLE()
bogdanm 0:9b334a45a8ff 26 (##) In case of using interrupts (e.g. HAL_CRYP_AESECB_Encrypt_IT())
bogdanm 0:9b334a45a8ff 27 (+) Configure the CRYP interrupt priority using HAL_NVIC_SetPriority()
bogdanm 0:9b334a45a8ff 28 (+) Enable the CRYP IRQ handler using HAL_NVIC_EnableIRQ()
bogdanm 0:9b334a45a8ff 29 (+) In CRYP IRQ handler, call HAL_CRYP_IRQHandler()
bogdanm 0:9b334a45a8ff 30 (##) In case of using DMA to control data transfer (e.g. HAL_CRYP_AESECB_Encrypt_DMA())
bogdanm 0:9b334a45a8ff 31 (+) Enable the DMA1 interface clock using
bogdanm 0:9b334a45a8ff 32 (++) __HAL_RCC_DMA1_CLK_ENABLE()
bogdanm 0:9b334a45a8ff 33 (+) Configure and enable two DMA Channels one for managing data transfer from
bogdanm 0:9b334a45a8ff 34 memory to peripheral (input channel) and another channel for managing data
bogdanm 0:9b334a45a8ff 35 transfer from peripheral to memory (output channel)
bogdanm 0:9b334a45a8ff 36 (+) Associate the initialized DMA handle to the CRYP DMA handle
bogdanm 0:9b334a45a8ff 37 using __HAL_LINKDMA()
bogdanm 0:9b334a45a8ff 38 (+) Configure the priority and enable the NVIC for the transfer complete
bogdanm 0:9b334a45a8ff 39 interrupt on the two DMA Streams. The output stream should have higher
bogdanm 0:9b334a45a8ff 40 priority than the input stream.
bogdanm 0:9b334a45a8ff 41 (++) HAL_NVIC_SetPriority()
bogdanm 0:9b334a45a8ff 42 (++) HAL_NVIC_EnableIRQ()
bogdanm 0:9b334a45a8ff 43
bogdanm 0:9b334a45a8ff 44 (#)Initialize the CRYP HAL using HAL_CRYP_Init(). This function configures mainly:
bogdanm 0:9b334a45a8ff 45 (##) The data type: 1-bit, 8-bit, 16-bit and 32-bit
bogdanm 0:9b334a45a8ff 46 (##) The encryption/decryption key.
bogdanm 0:9b334a45a8ff 47 (##) The initialization vector (counter). It is not used 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 e.g. HAL_CRYP_AESCBC_Encrypt()
bogdanm 0:9b334a45a8ff 53 (##) Interrupt mode: encryption and decryption APIs are not blocking functions
bogdanm 0:9b334a45a8ff 54 i.e. they process the data under interrupt
bogdanm 0:9b334a45a8ff 55 e.g. HAL_CRYP_AESCBC_Encrypt_IT()
bogdanm 0:9b334a45a8ff 56 (##) DMA mode: encryption and decryption APIs are not blocking functions
bogdanm 0:9b334a45a8ff 57 i.e. the data transfer is ensured by DMA
bogdanm 0:9b334a45a8ff 58 e.g. HAL_CRYP_AESCBC_Encrypt_DMA()
bogdanm 0:9b334a45a8ff 59
bogdanm 0:9b334a45a8ff 60 (#)When the processing function is called for the first time after HAL_CRYP_Init()
bogdanm 0:9b334a45a8ff 61 the CRYP peripheral is initialized and processes the buffer in input.
bogdanm 0:9b334a45a8ff 62 At second call, the processing function performs an append of the already
bogdanm 0:9b334a45a8ff 63 processed buffer.
bogdanm 0:9b334a45a8ff 64 When a new data block is to be processed, call HAL_CRYP_Init() then the
bogdanm 0:9b334a45a8ff 65 processing function.
bogdanm 0:9b334a45a8ff 66
bogdanm 0:9b334a45a8ff 67 (#)Call HAL_CRYP_DeInit() to deinitialize the CRYP peripheral.
bogdanm 0:9b334a45a8ff 68
bogdanm 0:9b334a45a8ff 69 @endverbatim
bogdanm 0:9b334a45a8ff 70 ******************************************************************************
bogdanm 0:9b334a45a8ff 71 * @attention
bogdanm 0:9b334a45a8ff 72 *
bogdanm 0:9b334a45a8ff 73 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 74 *
bogdanm 0:9b334a45a8ff 75 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 76 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 77 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 78 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 79 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 80 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 81 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 82 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 83 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 84 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 85 *
bogdanm 0:9b334a45a8ff 86 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 87 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 88 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 89 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 90 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 91 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 92 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 93 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 94 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 95 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 96 *
bogdanm 0:9b334a45a8ff 97 ******************************************************************************
bogdanm 0:9b334a45a8ff 98 */
bogdanm 0:9b334a45a8ff 99
bogdanm 0:9b334a45a8ff 100 #if defined (STM32L041xx) || defined (STM32L061xx) || defined (STM32L062xx) || defined (STM32L063xx) || (STM32L081xx) || defined (STM32L082xx) || defined (STM32L083xx)
bogdanm 0:9b334a45a8ff 101 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 102 #include "stm32l0xx_hal.h"
bogdanm 0:9b334a45a8ff 103
bogdanm 0:9b334a45a8ff 104 #ifdef HAL_CRYP_MODULE_ENABLED
bogdanm 0:9b334a45a8ff 105 /** @addtogroup STM32L0xx_HAL_Driver
bogdanm 0:9b334a45a8ff 106 * @{
bogdanm 0:9b334a45a8ff 107 */
bogdanm 0:9b334a45a8ff 108
bogdanm 0:9b334a45a8ff 109 /** @defgroup CRYP CRYP
bogdanm 0:9b334a45a8ff 110 * @brief CRYP HAL module driver.
bogdanm 0:9b334a45a8ff 111 * @{
bogdanm 0:9b334a45a8ff 112 */
bogdanm 0:9b334a45a8ff 113
bogdanm 0:9b334a45a8ff 114
bogdanm 0:9b334a45a8ff 115 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 116 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 117
bogdanm 0:9b334a45a8ff 118 /** @defgroup CRYP_Private_Defines CRYP Private Defines
bogdanm 0:9b334a45a8ff 119 * @{
bogdanm 0:9b334a45a8ff 120 */
bogdanm 0:9b334a45a8ff 121
bogdanm 0:9b334a45a8ff 122 #define CRYP_ALGO_CHAIN_MASK (AES_CR_MODE | AES_CR_CHMOD)
bogdanm 0:9b334a45a8ff 123
bogdanm 0:9b334a45a8ff 124 /**
bogdanm 0:9b334a45a8ff 125 * @}
bogdanm 0:9b334a45a8ff 126 */
bogdanm 0:9b334a45a8ff 127
bogdanm 0:9b334a45a8ff 128 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 129 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 130 /* Private function prototypes -----------------------------------------------*/
bogdanm 0:9b334a45a8ff 131
bogdanm 0:9b334a45a8ff 132 /** @defgroup CRYP_Private_Functions CRYP Private Functions
bogdanm 0:9b334a45a8ff 133 * @{
bogdanm 0:9b334a45a8ff 134 */
bogdanm 0:9b334a45a8ff 135
bogdanm 0:9b334a45a8ff 136 static HAL_StatusTypeDef CRYP_EncryptDecrypt_IT(CRYP_HandleTypeDef *hcryp);
bogdanm 0:9b334a45a8ff 137 static void CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp, uint8_t *InitVector);
bogdanm 0:9b334a45a8ff 138 static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint8_t *Key);
bogdanm 0:9b334a45a8ff 139 static HAL_StatusTypeDef CRYP_ProcessData(CRYP_HandleTypeDef *hcryp, uint8_t* Input, uint16_t Ilength, uint8_t* Output, uint32_t Timeout);
bogdanm 0:9b334a45a8ff 140 static void CRYP_DMAInCplt(DMA_HandleTypeDef *hdma);
bogdanm 0:9b334a45a8ff 141 static void CRYP_DMAOutCplt(DMA_HandleTypeDef *hdma);
bogdanm 0:9b334a45a8ff 142 static void CRYP_DMAError(DMA_HandleTypeDef *hdma);
bogdanm 0:9b334a45a8ff 143 static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr);
bogdanm 0:9b334a45a8ff 144
bogdanm 0:9b334a45a8ff 145 /**
bogdanm 0:9b334a45a8ff 146 * @}
bogdanm 0:9b334a45a8ff 147 */
bogdanm 0:9b334a45a8ff 148
bogdanm 0:9b334a45a8ff 149 /* Private functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 150
bogdanm 0:9b334a45a8ff 151 /** @defgroup CRYP_Exported_Functions CRYP Exported Functions
bogdanm 0:9b334a45a8ff 152 * @{
bogdanm 0:9b334a45a8ff 153 */
bogdanm 0:9b334a45a8ff 154
bogdanm 0:9b334a45a8ff 155 /** @defgroup CRYP_Exported_Functions_Group1 Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 156 * @brief Initialization and Configuration functions.
bogdanm 0:9b334a45a8ff 157 *
bogdanm 0:9b334a45a8ff 158 @verbatim
bogdanm 0:9b334a45a8ff 159 ==============================================================================
bogdanm 0:9b334a45a8ff 160 ##### Initialization and de-initialization functions #####
bogdanm 0:9b334a45a8ff 161 ==============================================================================
bogdanm 0:9b334a45a8ff 162 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 163 (+) Initialize the CRYP according to the specified parameters
bogdanm 0:9b334a45a8ff 164 in the CRYP_InitTypeDef and creates the associated handle
bogdanm 0:9b334a45a8ff 165 (+) DeInitialize the CRYP peripheral
bogdanm 0:9b334a45a8ff 166 (+) Initialize the CRYP MSP
bogdanm 0:9b334a45a8ff 167 (+) DeInitialize CRYP MSP
bogdanm 0:9b334a45a8ff 168
bogdanm 0:9b334a45a8ff 169 @endverbatim
bogdanm 0:9b334a45a8ff 170 * @{
bogdanm 0:9b334a45a8ff 171 */
bogdanm 0:9b334a45a8ff 172
bogdanm 0:9b334a45a8ff 173 /**
bogdanm 0:9b334a45a8ff 174 * @brief Initializes the CRYP according to the specified
bogdanm 0:9b334a45a8ff 175 * parameters in the CRYP_InitTypeDef and creates the associated handle.
bogdanm 0:9b334a45a8ff 176 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 177 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 178 * @retval HAL status
bogdanm 0:9b334a45a8ff 179 */
bogdanm 0:9b334a45a8ff 180 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 181 {
bogdanm 0:9b334a45a8ff 182 /* Check the CRYP handle allocation */
bogdanm 0:9b334a45a8ff 183 if(hcryp == NULL)
bogdanm 0:9b334a45a8ff 184 {
bogdanm 0:9b334a45a8ff 185 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 186 }
bogdanm 0:9b334a45a8ff 187
bogdanm 0:9b334a45a8ff 188 /* Check the parameters */
bogdanm 0:9b334a45a8ff 189 assert_param(IS_AES_ALL_INSTANCE(hcryp->Instance));
bogdanm 0:9b334a45a8ff 190 assert_param(IS_CRYP_DATATYPE(hcryp->Init.DataType));
bogdanm 0:9b334a45a8ff 191
bogdanm 0:9b334a45a8ff 192 if(hcryp->State == HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 193 {
bogdanm 0:9b334a45a8ff 194 /* Allocate lock resource and initialize it */
bogdanm 0:9b334a45a8ff 195 hcryp->Lock = HAL_UNLOCKED;
bogdanm 0:9b334a45a8ff 196
bogdanm 0:9b334a45a8ff 197 /* Init the low level hardware */
bogdanm 0:9b334a45a8ff 198 HAL_CRYP_MspInit(hcryp);
bogdanm 0:9b334a45a8ff 199 }
bogdanm 0:9b334a45a8ff 200
bogdanm 0:9b334a45a8ff 201 /* Check if AES already enabled */
bogdanm 0:9b334a45a8ff 202 if (HAL_IS_BIT_CLR(hcryp->Instance->CR, AES_CR_EN))
bogdanm 0:9b334a45a8ff 203 {
bogdanm 0:9b334a45a8ff 204 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 205 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 206
bogdanm 0:9b334a45a8ff 207 /* Set the data type*/
bogdanm 0:9b334a45a8ff 208 MODIFY_REG(hcryp->Instance->CR, AES_CR_DATATYPE, hcryp->Init.DataType);
bogdanm 0:9b334a45a8ff 209
bogdanm 0:9b334a45a8ff 210 /* Reset CrypInCount and CrypOutCount */
bogdanm 0:9b334a45a8ff 211 hcryp->CrypInCount = 0;
bogdanm 0:9b334a45a8ff 212 hcryp->CrypOutCount = 0;
bogdanm 0:9b334a45a8ff 213
bogdanm 0:9b334a45a8ff 214 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 215 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 216
bogdanm 0:9b334a45a8ff 217 /* Set the default CRYP phase */
bogdanm 0:9b334a45a8ff 218 hcryp->Phase = HAL_CRYP_PHASE_READY;
bogdanm 0:9b334a45a8ff 219
bogdanm 0:9b334a45a8ff 220 /* Return function status */
bogdanm 0:9b334a45a8ff 221 return HAL_OK;
bogdanm 0:9b334a45a8ff 222 }
bogdanm 0:9b334a45a8ff 223 else
bogdanm 0:9b334a45a8ff 224 {
bogdanm 0:9b334a45a8ff 225 /* The Datatype selection must be changed if the AES is disabled. Writing these bits while the AES is */
bogdanm 0:9b334a45a8ff 226 /* enabled is forbidden to avoid unpredictable AES behavior.*/
bogdanm 0:9b334a45a8ff 227
bogdanm 0:9b334a45a8ff 228 /* Return function status */
bogdanm 0:9b334a45a8ff 229 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 230 }
bogdanm 0:9b334a45a8ff 231
bogdanm 0:9b334a45a8ff 232 }
bogdanm 0:9b334a45a8ff 233
bogdanm 0:9b334a45a8ff 234 /**
bogdanm 0:9b334a45a8ff 235 * @brief DeInitializes the CRYP peripheral.
bogdanm 0:9b334a45a8ff 236 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 237 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 238 * @retval HAL status
bogdanm 0:9b334a45a8ff 239 */
bogdanm 0:9b334a45a8ff 240 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 241 {
bogdanm 0:9b334a45a8ff 242 /* Check the CRYP handle allocation */
bogdanm 0:9b334a45a8ff 243 if(hcryp == NULL)
bogdanm 0:9b334a45a8ff 244 {
bogdanm 0:9b334a45a8ff 245 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 246 }
bogdanm 0:9b334a45a8ff 247
bogdanm 0:9b334a45a8ff 248 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 249 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 250
bogdanm 0:9b334a45a8ff 251 /* Set the default CRYP phase */
bogdanm 0:9b334a45a8ff 252 hcryp->Phase = HAL_CRYP_PHASE_READY;
bogdanm 0:9b334a45a8ff 253
bogdanm 0:9b334a45a8ff 254 /* Reset CrypInCount and CrypOutCount */
bogdanm 0:9b334a45a8ff 255 hcryp->CrypInCount = 0;
bogdanm 0:9b334a45a8ff 256 hcryp->CrypOutCount = 0;
bogdanm 0:9b334a45a8ff 257
bogdanm 0:9b334a45a8ff 258 /* Disable the CRYP Peripheral Clock */
bogdanm 0:9b334a45a8ff 259 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 260
bogdanm 0:9b334a45a8ff 261 /* DeInit the low level hardware: CLOCK, NVIC.*/
bogdanm 0:9b334a45a8ff 262 HAL_CRYP_MspDeInit(hcryp);
bogdanm 0:9b334a45a8ff 263
bogdanm 0:9b334a45a8ff 264 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 265 hcryp->State = HAL_CRYP_STATE_RESET;
bogdanm 0:9b334a45a8ff 266
bogdanm 0:9b334a45a8ff 267 /* Release Lock */
bogdanm 0:9b334a45a8ff 268 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 269
bogdanm 0:9b334a45a8ff 270 /* Return function status */
bogdanm 0:9b334a45a8ff 271 return HAL_OK;
bogdanm 0:9b334a45a8ff 272 }
bogdanm 0:9b334a45a8ff 273
bogdanm 0:9b334a45a8ff 274 /**
bogdanm 0:9b334a45a8ff 275 * @brief Initializes the CRYP MSP.
bogdanm 0:9b334a45a8ff 276 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 277 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 278 * @retval None
bogdanm 0:9b334a45a8ff 279 */
bogdanm 0:9b334a45a8ff 280 __weak void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 281 {
bogdanm 0:9b334a45a8ff 282 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 283 the HAL_CRYP_MspInit can be implemented in the user file */
bogdanm 0:9b334a45a8ff 284 }
bogdanm 0:9b334a45a8ff 285
bogdanm 0:9b334a45a8ff 286 /**
bogdanm 0:9b334a45a8ff 287 * @brief DeInitializes CRYP MSP.
bogdanm 0:9b334a45a8ff 288 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 289 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 290 * @retval None
bogdanm 0:9b334a45a8ff 291 */
bogdanm 0:9b334a45a8ff 292 __weak void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 293 {
bogdanm 0:9b334a45a8ff 294 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 295 the HAL_CRYP_MspDeInit can be implemented in the user file */
bogdanm 0:9b334a45a8ff 296 }
bogdanm 0:9b334a45a8ff 297
bogdanm 0:9b334a45a8ff 298 /**
bogdanm 0:9b334a45a8ff 299 * @}
bogdanm 0:9b334a45a8ff 300 */
bogdanm 0:9b334a45a8ff 301
bogdanm 0:9b334a45a8ff 302 /** @defgroup CRYP_Exported_Functions_Group2 AES processing functions
bogdanm 0:9b334a45a8ff 303 * @brief processing functions.
bogdanm 0:9b334a45a8ff 304 *
bogdanm 0:9b334a45a8ff 305 @verbatim
bogdanm 0:9b334a45a8ff 306 ==============================================================================
bogdanm 0:9b334a45a8ff 307 ##### AES processing functions #####
bogdanm 0:9b334a45a8ff 308 ==============================================================================
bogdanm 0:9b334a45a8ff 309 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 310 (+) Encrypt plaintext using AES algorithm in different chaining modes
bogdanm 0:9b334a45a8ff 311 (+) Decrypt cyphertext using AES algorithm in different chaining modes
bogdanm 0:9b334a45a8ff 312 [..] Three processing functions are available:
bogdanm 0:9b334a45a8ff 313 (+) Polling mode
bogdanm 0:9b334a45a8ff 314 (+) Interrupt mode
bogdanm 0:9b334a45a8ff 315 (+) DMA mode
bogdanm 0:9b334a45a8ff 316
bogdanm 0:9b334a45a8ff 317 @endverbatim
bogdanm 0:9b334a45a8ff 318 * @{
bogdanm 0:9b334a45a8ff 319 */
bogdanm 0:9b334a45a8ff 320
bogdanm 0:9b334a45a8ff 321 /**
bogdanm 0:9b334a45a8ff 322 * @brief Initializes the CRYP peripheral in AES ECB encryption mode
bogdanm 0:9b334a45a8ff 323 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 324 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 325 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 326 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 327 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 328 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 329 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 330 * @retval HAL status
bogdanm 0:9b334a45a8ff 331 */
bogdanm 0:9b334a45a8ff 332 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 333 {
bogdanm 0:9b334a45a8ff 334 /* Process Locked */
bogdanm 0:9b334a45a8ff 335 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 336
bogdanm 0:9b334a45a8ff 337 /* Check that data aligned on u32 and Size multiple of 16*/
bogdanm 0:9b334a45a8ff 338 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 339 {
bogdanm 0:9b334a45a8ff 340 /* Process Locked */
bogdanm 0:9b334a45a8ff 341 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 342
bogdanm 0:9b334a45a8ff 343 /* Return function status */
bogdanm 0:9b334a45a8ff 344 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 345 }
bogdanm 0:9b334a45a8ff 346
bogdanm 0:9b334a45a8ff 347 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 348 if(hcryp->State != HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 349 {
bogdanm 0:9b334a45a8ff 350 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 351 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 352
bogdanm 0:9b334a45a8ff 353 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 354 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 355 {
bogdanm 0:9b334a45a8ff 356 /* Set the key */
bogdanm 0:9b334a45a8ff 357 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 358
bogdanm 0:9b334a45a8ff 359 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 360 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 361
bogdanm 0:9b334a45a8ff 362 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 363 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT);
bogdanm 0:9b334a45a8ff 364
bogdanm 0:9b334a45a8ff 365 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 366 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 367
bogdanm 0:9b334a45a8ff 368 /* Set the phase */
bogdanm 0:9b334a45a8ff 369 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 370 }
bogdanm 0:9b334a45a8ff 371
bogdanm 0:9b334a45a8ff 372 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 373 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 374 {
bogdanm 0:9b334a45a8ff 375 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 376 }
bogdanm 0:9b334a45a8ff 377
bogdanm 0:9b334a45a8ff 378 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 379 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 380
bogdanm 0:9b334a45a8ff 381 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 382 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 383
bogdanm 0:9b334a45a8ff 384 /* Return function status */
bogdanm 0:9b334a45a8ff 385 return HAL_OK;
bogdanm 0:9b334a45a8ff 386 }
bogdanm 0:9b334a45a8ff 387 else
bogdanm 0:9b334a45a8ff 388 {
bogdanm 0:9b334a45a8ff 389 /* Process Locked */
bogdanm 0:9b334a45a8ff 390 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 391
bogdanm 0:9b334a45a8ff 392 /* Return function status */
bogdanm 0:9b334a45a8ff 393 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 394 }
bogdanm 0:9b334a45a8ff 395 }
bogdanm 0:9b334a45a8ff 396
bogdanm 0:9b334a45a8ff 397 /**
bogdanm 0:9b334a45a8ff 398 * @brief Initializes the CRYP peripheral in AES CBC encryption mode
bogdanm 0:9b334a45a8ff 399 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 400 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 401 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 402 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 403 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 404 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 405 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 406 * @retval HAL status
bogdanm 0:9b334a45a8ff 407 */
bogdanm 0:9b334a45a8ff 408 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 409 {
bogdanm 0:9b334a45a8ff 410 /* Process Locked */
bogdanm 0:9b334a45a8ff 411 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 412
bogdanm 0:9b334a45a8ff 413 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 414 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 415 {
bogdanm 0:9b334a45a8ff 416 /* Process Locked */
bogdanm 0:9b334a45a8ff 417 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 418
bogdanm 0:9b334a45a8ff 419 /* Return function status */
bogdanm 0:9b334a45a8ff 420 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 421 }
bogdanm 0:9b334a45a8ff 422
bogdanm 0:9b334a45a8ff 423 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 424 if(hcryp->State != HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 425 {
bogdanm 0:9b334a45a8ff 426 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 427 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 428
bogdanm 0:9b334a45a8ff 429 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 430 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 431 {
bogdanm 0:9b334a45a8ff 432 /* Set the key */
bogdanm 0:9b334a45a8ff 433 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 434
bogdanm 0:9b334a45a8ff 435 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 436 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 437
bogdanm 0:9b334a45a8ff 438 /* Set the CRYP peripheral in AES CBC mode */
bogdanm 0:9b334a45a8ff 439 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT);
bogdanm 0:9b334a45a8ff 440
bogdanm 0:9b334a45a8ff 441 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 442 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 443
bogdanm 0:9b334a45a8ff 444 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 445 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 446
bogdanm 0:9b334a45a8ff 447 /* Set the phase */
bogdanm 0:9b334a45a8ff 448 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 449 }
bogdanm 0:9b334a45a8ff 450
bogdanm 0:9b334a45a8ff 451 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 452 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 453 {
bogdanm 0:9b334a45a8ff 454 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 455 }
bogdanm 0:9b334a45a8ff 456
bogdanm 0:9b334a45a8ff 457 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 458 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 459
bogdanm 0:9b334a45a8ff 460 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 461 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 462
bogdanm 0:9b334a45a8ff 463 /* Return function status */
bogdanm 0:9b334a45a8ff 464 return HAL_OK;
bogdanm 0:9b334a45a8ff 465 }
bogdanm 0:9b334a45a8ff 466 else
bogdanm 0:9b334a45a8ff 467 {
bogdanm 0:9b334a45a8ff 468 /* Process Locked */
bogdanm 0:9b334a45a8ff 469 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 470
bogdanm 0:9b334a45a8ff 471 /* Return function status */
bogdanm 0:9b334a45a8ff 472 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 473 }
bogdanm 0:9b334a45a8ff 474 }
bogdanm 0:9b334a45a8ff 475
bogdanm 0:9b334a45a8ff 476 /**
bogdanm 0:9b334a45a8ff 477 * @brief Initializes the CRYP peripheral in AES CTR encryption mode
bogdanm 0:9b334a45a8ff 478 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 479 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 480 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 481 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 482 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 483 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 484 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 485 * @retval HAL status
bogdanm 0:9b334a45a8ff 486 */
bogdanm 0:9b334a45a8ff 487 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 488 {
bogdanm 0:9b334a45a8ff 489 /* Process Locked */
bogdanm 0:9b334a45a8ff 490 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 491
bogdanm 0:9b334a45a8ff 492 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 493 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 494 {
bogdanm 0:9b334a45a8ff 495 /* Process Locked */
bogdanm 0:9b334a45a8ff 496 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 497
bogdanm 0:9b334a45a8ff 498 /* Return function status */
bogdanm 0:9b334a45a8ff 499 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 500 }
bogdanm 0:9b334a45a8ff 501
bogdanm 0:9b334a45a8ff 502 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 503 if(hcryp->State != HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 504 {
bogdanm 0:9b334a45a8ff 505 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 506 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 507
bogdanm 0:9b334a45a8ff 508 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 509 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 510 {
bogdanm 0:9b334a45a8ff 511 /* Set the key */
bogdanm 0:9b334a45a8ff 512 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 513
bogdanm 0:9b334a45a8ff 514 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 515 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 516
bogdanm 0:9b334a45a8ff 517 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 518 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT);
bogdanm 0:9b334a45a8ff 519
bogdanm 0:9b334a45a8ff 520 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 521 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 522
bogdanm 0:9b334a45a8ff 523 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 524 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 525
bogdanm 0:9b334a45a8ff 526 /* Set the phase */
bogdanm 0:9b334a45a8ff 527 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 528 }
bogdanm 0:9b334a45a8ff 529
bogdanm 0:9b334a45a8ff 530 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 531 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 532 {
bogdanm 0:9b334a45a8ff 533 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 534 }
bogdanm 0:9b334a45a8ff 535
bogdanm 0:9b334a45a8ff 536 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 537 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 538
bogdanm 0:9b334a45a8ff 539 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 540 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 541
bogdanm 0:9b334a45a8ff 542 /* Return function status */
bogdanm 0:9b334a45a8ff 543 return HAL_OK;
bogdanm 0:9b334a45a8ff 544 }
bogdanm 0:9b334a45a8ff 545 else
bogdanm 0:9b334a45a8ff 546 {
bogdanm 0:9b334a45a8ff 547 /* Release Lock */
bogdanm 0:9b334a45a8ff 548 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 549
bogdanm 0:9b334a45a8ff 550 /* Return function status */
bogdanm 0:9b334a45a8ff 551 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 552 }
bogdanm 0:9b334a45a8ff 553 }
bogdanm 0:9b334a45a8ff 554
bogdanm 0:9b334a45a8ff 555 /**
bogdanm 0:9b334a45a8ff 556 * @brief Initializes the CRYP peripheral in AES ECB decryption mode
bogdanm 0:9b334a45a8ff 557 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 558 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 559 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 560 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 561 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 562 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 563 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 564 * @retval HAL status
bogdanm 0:9b334a45a8ff 565 */
bogdanm 0:9b334a45a8ff 566 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 567 {
bogdanm 0:9b334a45a8ff 568 /* Process Locked */
bogdanm 0:9b334a45a8ff 569 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 570
bogdanm 0:9b334a45a8ff 571 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 572 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 573 {
bogdanm 0:9b334a45a8ff 574 /* Process Locked */
bogdanm 0:9b334a45a8ff 575 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 576
bogdanm 0:9b334a45a8ff 577 /* Return function status */
bogdanm 0:9b334a45a8ff 578 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 579 }
bogdanm 0:9b334a45a8ff 580
bogdanm 0:9b334a45a8ff 581 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 582 if(hcryp->State != HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 583 {
bogdanm 0:9b334a45a8ff 584 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 585 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 586
bogdanm 0:9b334a45a8ff 587 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 588 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 589 {
bogdanm 0:9b334a45a8ff 590 /* Set the key */
bogdanm 0:9b334a45a8ff 591 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 592
bogdanm 0:9b334a45a8ff 593 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 594 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 595
bogdanm 0:9b334a45a8ff 596 /* Set the CRYP peripheral in AES ECB decryption mode (with key derivation) */
bogdanm 0:9b334a45a8ff 597 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB_KEYDERDECRYPT);
bogdanm 0:9b334a45a8ff 598
bogdanm 0:9b334a45a8ff 599 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 600 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 601
bogdanm 0:9b334a45a8ff 602 /* Set the phase */
bogdanm 0:9b334a45a8ff 603 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 604 }
bogdanm 0:9b334a45a8ff 605
bogdanm 0:9b334a45a8ff 606 /* Write Cypher Data and Get Plain Data */
bogdanm 0:9b334a45a8ff 607 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 608 {
bogdanm 0:9b334a45a8ff 609 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 610 }
bogdanm 0:9b334a45a8ff 611
bogdanm 0:9b334a45a8ff 612 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 613 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 614
bogdanm 0:9b334a45a8ff 615 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 616 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 617
bogdanm 0:9b334a45a8ff 618 /* Return function status */
bogdanm 0:9b334a45a8ff 619 return HAL_OK;
bogdanm 0:9b334a45a8ff 620 }
bogdanm 0:9b334a45a8ff 621 else
bogdanm 0:9b334a45a8ff 622 {
bogdanm 0:9b334a45a8ff 623 /* Release Lock */
bogdanm 0:9b334a45a8ff 624 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 625
bogdanm 0:9b334a45a8ff 626 /* Return function status */
bogdanm 0:9b334a45a8ff 627 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 628 }
bogdanm 0:9b334a45a8ff 629 }
bogdanm 0:9b334a45a8ff 630
bogdanm 0:9b334a45a8ff 631 /**
bogdanm 0:9b334a45a8ff 632 * @brief Initializes the CRYP peripheral in AES ECB decryption mode
bogdanm 0:9b334a45a8ff 633 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 634 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 635 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 636 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 637 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 638 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 639 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 640 * @retval HAL status
bogdanm 0:9b334a45a8ff 641 */
bogdanm 0:9b334a45a8ff 642 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 643 {
bogdanm 0:9b334a45a8ff 644 /* Process Locked */
bogdanm 0:9b334a45a8ff 645 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 646
bogdanm 0:9b334a45a8ff 647 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 648 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 649 {
bogdanm 0:9b334a45a8ff 650 /* Process Locked */
bogdanm 0:9b334a45a8ff 651 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 652
bogdanm 0:9b334a45a8ff 653 /* Return function status */
bogdanm 0:9b334a45a8ff 654 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 655 }
bogdanm 0:9b334a45a8ff 656
bogdanm 0:9b334a45a8ff 657 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 658 if(hcryp->State != HAL_CRYP_STATE_RESET)
bogdanm 0:9b334a45a8ff 659 {
bogdanm 0:9b334a45a8ff 660 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 661 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 662
bogdanm 0:9b334a45a8ff 663 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 664 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 665 {
bogdanm 0:9b334a45a8ff 666 /* Set the key */
bogdanm 0:9b334a45a8ff 667 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 668
bogdanm 0:9b334a45a8ff 669 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 670 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 671
bogdanm 0:9b334a45a8ff 672 /* Set the CRYP peripheral in AES CBC decryption mode (with key derivation) */
bogdanm 0:9b334a45a8ff 673 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC_KEYDERDECRYPT);
bogdanm 0:9b334a45a8ff 674
bogdanm 0:9b334a45a8ff 675 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 676 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 677
bogdanm 0:9b334a45a8ff 678 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 679 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 680
bogdanm 0:9b334a45a8ff 681 /* Set the phase */
bogdanm 0:9b334a45a8ff 682 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 683 }
bogdanm 0:9b334a45a8ff 684
bogdanm 0:9b334a45a8ff 685 /* Write Cypher Data and Get Plain Data */
bogdanm 0:9b334a45a8ff 686 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 687 {
bogdanm 0:9b334a45a8ff 688 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 689 }
bogdanm 0:9b334a45a8ff 690
bogdanm 0:9b334a45a8ff 691 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 692 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 693
bogdanm 0:9b334a45a8ff 694 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 695 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 696
bogdanm 0:9b334a45a8ff 697 /* Return function status */
bogdanm 0:9b334a45a8ff 698 return HAL_OK;
bogdanm 0:9b334a45a8ff 699 }
bogdanm 0:9b334a45a8ff 700 else
bogdanm 0:9b334a45a8ff 701 {
bogdanm 0:9b334a45a8ff 702 /* Release Lock */
bogdanm 0:9b334a45a8ff 703 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 704
bogdanm 0:9b334a45a8ff 705 /* Return function status */
bogdanm 0:9b334a45a8ff 706 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 707 }
bogdanm 0:9b334a45a8ff 708 }
bogdanm 0:9b334a45a8ff 709
bogdanm 0:9b334a45a8ff 710 /**
bogdanm 0:9b334a45a8ff 711 * @brief Initializes the CRYP peripheral in AES CTR decryption mode
bogdanm 0:9b334a45a8ff 712 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 713 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 714 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 715 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 716 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 717 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 718 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 719 * @retval HAL status
bogdanm 0:9b334a45a8ff 720 */
bogdanm 0:9b334a45a8ff 721 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 722 {
bogdanm 0:9b334a45a8ff 723 /* Process Locked */
bogdanm 0:9b334a45a8ff 724 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 725
bogdanm 0:9b334a45a8ff 726 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 727 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 728 {
bogdanm 0:9b334a45a8ff 729 /* Process Locked */
bogdanm 0:9b334a45a8ff 730 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 731
bogdanm 0:9b334a45a8ff 732 /* Return function status */
bogdanm 0:9b334a45a8ff 733 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 734 }
bogdanm 0:9b334a45a8ff 735
bogdanm 0:9b334a45a8ff 736 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 737 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->Phase == HAL_CRYP_PHASE_READY))
bogdanm 0:9b334a45a8ff 738 {
bogdanm 0:9b334a45a8ff 739 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 740 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 741
bogdanm 0:9b334a45a8ff 742 /* Set the key */
bogdanm 0:9b334a45a8ff 743 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 744
bogdanm 0:9b334a45a8ff 745 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 746 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 747
bogdanm 0:9b334a45a8ff 748 /* Set the CRYP peripheral in AES CTR decryption mode */
bogdanm 0:9b334a45a8ff 749 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR_DECRYPT);
bogdanm 0:9b334a45a8ff 750
bogdanm 0:9b334a45a8ff 751 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 752 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 753
bogdanm 0:9b334a45a8ff 754 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 755 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 756
bogdanm 0:9b334a45a8ff 757 /* Set the phase */
bogdanm 0:9b334a45a8ff 758 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 759 }
bogdanm 0:9b334a45a8ff 760
bogdanm 0:9b334a45a8ff 761 /* Write Cypher Data and Get Plain Data */
bogdanm 0:9b334a45a8ff 762 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 763 {
bogdanm 0:9b334a45a8ff 764 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 765 }
bogdanm 0:9b334a45a8ff 766
bogdanm 0:9b334a45a8ff 767 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 768 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 769
bogdanm 0:9b334a45a8ff 770 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 771 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 772
bogdanm 0:9b334a45a8ff 773 /* Return function status */
bogdanm 0:9b334a45a8ff 774 return HAL_OK;
bogdanm 0:9b334a45a8ff 775 }
bogdanm 0:9b334a45a8ff 776
bogdanm 0:9b334a45a8ff 777 /**
bogdanm 0:9b334a45a8ff 778 * @brief Initializes the CRYP peripheral in AES ECB encryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 779 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 780 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 781 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 782 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 783 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 784 * @retval HAL status
bogdanm 0:9b334a45a8ff 785 */
bogdanm 0:9b334a45a8ff 786 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 787 {
bogdanm 0:9b334a45a8ff 788 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 789
bogdanm 0:9b334a45a8ff 790 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 791 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 792 {
bogdanm 0:9b334a45a8ff 793 /* Process Locked */
bogdanm 0:9b334a45a8ff 794 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 795
bogdanm 0:9b334a45a8ff 796 /* Return function status */
bogdanm 0:9b334a45a8ff 797 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 798 }
bogdanm 0:9b334a45a8ff 799
bogdanm 0:9b334a45a8ff 800 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 801 {
bogdanm 0:9b334a45a8ff 802 /* Process Locked */
bogdanm 0:9b334a45a8ff 803 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 804
bogdanm 0:9b334a45a8ff 805 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 806 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 807 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 808 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 809 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 810
bogdanm 0:9b334a45a8ff 811 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 812 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 813
bogdanm 0:9b334a45a8ff 814 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 815 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 816 {
bogdanm 0:9b334a45a8ff 817 /* Set the key */
bogdanm 0:9b334a45a8ff 818 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 819
bogdanm 0:9b334a45a8ff 820 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 821 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 822
bogdanm 0:9b334a45a8ff 823 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 824 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT);
bogdanm 0:9b334a45a8ff 825
bogdanm 0:9b334a45a8ff 826 /* Set the phase */
bogdanm 0:9b334a45a8ff 827 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 828 }
bogdanm 0:9b334a45a8ff 829
bogdanm 0:9b334a45a8ff 830 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 831 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 832
bogdanm 0:9b334a45a8ff 833 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 834 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 835
bogdanm 0:9b334a45a8ff 836 /* Get the last input data adress */
bogdanm 0:9b334a45a8ff 837 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 838
bogdanm 0:9b334a45a8ff 839 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 840 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 841 inputaddr+=4;
bogdanm 0:9b334a45a8ff 842 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 843 inputaddr+=4;
bogdanm 0:9b334a45a8ff 844 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 845 inputaddr+=4;
bogdanm 0:9b334a45a8ff 846 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 847 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 848 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 849
bogdanm 0:9b334a45a8ff 850 /* Return function status */
bogdanm 0:9b334a45a8ff 851 return HAL_OK;
bogdanm 0:9b334a45a8ff 852 }
bogdanm 0:9b334a45a8ff 853 else
bogdanm 0:9b334a45a8ff 854 {
bogdanm 0:9b334a45a8ff 855 /* Release Lock */
bogdanm 0:9b334a45a8ff 856 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 857
bogdanm 0:9b334a45a8ff 858 /* Return function status */
bogdanm 0:9b334a45a8ff 859 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 860 }
bogdanm 0:9b334a45a8ff 861 }
bogdanm 0:9b334a45a8ff 862
bogdanm 0:9b334a45a8ff 863 /**
bogdanm 0:9b334a45a8ff 864 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 865 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 866 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 867 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 868 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 869 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 870 * @retval HAL status
bogdanm 0:9b334a45a8ff 871 */
bogdanm 0:9b334a45a8ff 872 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 873 {
bogdanm 0:9b334a45a8ff 874 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 875
bogdanm 0:9b334a45a8ff 876 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 877 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 878 {
bogdanm 0:9b334a45a8ff 879 /* Process Locked */
bogdanm 0:9b334a45a8ff 880 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 881
bogdanm 0:9b334a45a8ff 882 /* Return function status */
bogdanm 0:9b334a45a8ff 883 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 884 }
bogdanm 0:9b334a45a8ff 885
bogdanm 0:9b334a45a8ff 886 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 887 {
bogdanm 0:9b334a45a8ff 888 /* Process Locked */
bogdanm 0:9b334a45a8ff 889 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 890
bogdanm 0:9b334a45a8ff 891 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 892 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 893 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 894 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 895 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 896
bogdanm 0:9b334a45a8ff 897 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 898 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 899
bogdanm 0:9b334a45a8ff 900 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 901 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 902 {
bogdanm 0:9b334a45a8ff 903 /* Set the key */
bogdanm 0:9b334a45a8ff 904 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 905
bogdanm 0:9b334a45a8ff 906 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 907 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 908
bogdanm 0:9b334a45a8ff 909 /* Set the CRYP peripheral in AES CBC mode */
bogdanm 0:9b334a45a8ff 910 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT);
bogdanm 0:9b334a45a8ff 911
bogdanm 0:9b334a45a8ff 912 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 913 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 914
bogdanm 0:9b334a45a8ff 915 /* Set the phase */
bogdanm 0:9b334a45a8ff 916 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 917 }
bogdanm 0:9b334a45a8ff 918
bogdanm 0:9b334a45a8ff 919 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 920 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 921
bogdanm 0:9b334a45a8ff 922 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 923 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 924
bogdanm 0:9b334a45a8ff 925 /* Get the last input data adress */
bogdanm 0:9b334a45a8ff 926 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 927
bogdanm 0:9b334a45a8ff 928 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 929 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 930 inputaddr+=4;
bogdanm 0:9b334a45a8ff 931 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 932 inputaddr+=4;
bogdanm 0:9b334a45a8ff 933 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 934 inputaddr+=4;
bogdanm 0:9b334a45a8ff 935 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 936 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 937 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 938
bogdanm 0:9b334a45a8ff 939 /* Return function status */
bogdanm 0:9b334a45a8ff 940 return HAL_OK;
bogdanm 0:9b334a45a8ff 941 }
bogdanm 0:9b334a45a8ff 942 else
bogdanm 0:9b334a45a8ff 943 {
bogdanm 0:9b334a45a8ff 944 /* Release Lock */
bogdanm 0:9b334a45a8ff 945 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 946
bogdanm 0:9b334a45a8ff 947 /* Return function status */
bogdanm 0:9b334a45a8ff 948 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 949 }
bogdanm 0:9b334a45a8ff 950 }
bogdanm 0:9b334a45a8ff 951
bogdanm 0:9b334a45a8ff 952 /**
bogdanm 0:9b334a45a8ff 953 * @brief Initializes the CRYP peripheral in AES CTR encryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 954 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 955 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 956 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 957 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 958 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 959 * @retval HAL status
bogdanm 0:9b334a45a8ff 960 */
bogdanm 0:9b334a45a8ff 961 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 962 {
bogdanm 0:9b334a45a8ff 963 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 964
bogdanm 0:9b334a45a8ff 965 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 966 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 967 {
bogdanm 0:9b334a45a8ff 968 /* Process Locked */
bogdanm 0:9b334a45a8ff 969 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 970
bogdanm 0:9b334a45a8ff 971 /* Return function status */
bogdanm 0:9b334a45a8ff 972 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 973 }
bogdanm 0:9b334a45a8ff 974
bogdanm 0:9b334a45a8ff 975 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 976 {
bogdanm 0:9b334a45a8ff 977 /* Process Locked */
bogdanm 0:9b334a45a8ff 978 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 979
bogdanm 0:9b334a45a8ff 980 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 981 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 982 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 983 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 984 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 985
bogdanm 0:9b334a45a8ff 986 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 987 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 988
bogdanm 0:9b334a45a8ff 989 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 990 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 991 {
bogdanm 0:9b334a45a8ff 992 /* Set the key */
bogdanm 0:9b334a45a8ff 993 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 994
bogdanm 0:9b334a45a8ff 995 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 996 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 997
bogdanm 0:9b334a45a8ff 998 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 999 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT);
bogdanm 0:9b334a45a8ff 1000
bogdanm 0:9b334a45a8ff 1001 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1002 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1003
bogdanm 0:9b334a45a8ff 1004 /* Set the phase */
bogdanm 0:9b334a45a8ff 1005 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1006 }
bogdanm 0:9b334a45a8ff 1007
bogdanm 0:9b334a45a8ff 1008 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1009 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 1010
bogdanm 0:9b334a45a8ff 1011 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1012 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1013
bogdanm 0:9b334a45a8ff 1014 /* Get the last input data adress */
bogdanm 0:9b334a45a8ff 1015 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1016
bogdanm 0:9b334a45a8ff 1017 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 1018 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1019 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1020 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1021 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1022 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1023 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1024 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1025 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1026 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1027
bogdanm 0:9b334a45a8ff 1028 /* Return function status */
bogdanm 0:9b334a45a8ff 1029 return HAL_OK;
bogdanm 0:9b334a45a8ff 1030 }
bogdanm 0:9b334a45a8ff 1031 else
bogdanm 0:9b334a45a8ff 1032 {
bogdanm 0:9b334a45a8ff 1033 /* Release Lock */
bogdanm 0:9b334a45a8ff 1034 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1035
bogdanm 0:9b334a45a8ff 1036 /* Return function status */
bogdanm 0:9b334a45a8ff 1037 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1038 }
bogdanm 0:9b334a45a8ff 1039 }
bogdanm 0:9b334a45a8ff 1040
bogdanm 0:9b334a45a8ff 1041 /**
bogdanm 0:9b334a45a8ff 1042 * @brief Initializes the CRYP peripheral in AES ECB decryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1043 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1044 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1045 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1046 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1047 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1048 * @retval HAL status
bogdanm 0:9b334a45a8ff 1049 */
bogdanm 0:9b334a45a8ff 1050 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1051 {
bogdanm 0:9b334a45a8ff 1052 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 1053
bogdanm 0:9b334a45a8ff 1054 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1055 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1056 {
bogdanm 0:9b334a45a8ff 1057 /* Process Locked */
bogdanm 0:9b334a45a8ff 1058 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1059
bogdanm 0:9b334a45a8ff 1060 /* Return function status */
bogdanm 0:9b334a45a8ff 1061 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1062 }
bogdanm 0:9b334a45a8ff 1063
bogdanm 0:9b334a45a8ff 1064 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1065 {
bogdanm 0:9b334a45a8ff 1066 /* Process Locked */
bogdanm 0:9b334a45a8ff 1067 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1068
bogdanm 0:9b334a45a8ff 1069 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 1070 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1071 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1072 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1073 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1074
bogdanm 0:9b334a45a8ff 1075 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1076 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1077
bogdanm 0:9b334a45a8ff 1078 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1079 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1080 {
bogdanm 0:9b334a45a8ff 1081 /* Set the key */
bogdanm 0:9b334a45a8ff 1082 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1083
bogdanm 0:9b334a45a8ff 1084 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 1085 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 1086
bogdanm 0:9b334a45a8ff 1087 /* Set the CRYP peripheral in AES ECB decryption mode (with key derivation) */
bogdanm 0:9b334a45a8ff 1088 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB_KEYDERDECRYPT);
bogdanm 0:9b334a45a8ff 1089
bogdanm 0:9b334a45a8ff 1090 /* Set the phase */
bogdanm 0:9b334a45a8ff 1091 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1092 }
bogdanm 0:9b334a45a8ff 1093
bogdanm 0:9b334a45a8ff 1094 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1095 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 1096
bogdanm 0:9b334a45a8ff 1097 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1098 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1099
bogdanm 0:9b334a45a8ff 1100 /* Get the last input data adress */
bogdanm 0:9b334a45a8ff 1101 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1102
bogdanm 0:9b334a45a8ff 1103 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 1104 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1105 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1106 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1107 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1108 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1109 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1110 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1111 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1112 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1113
bogdanm 0:9b334a45a8ff 1114 /* Return function status */
bogdanm 0:9b334a45a8ff 1115 return HAL_OK;
bogdanm 0:9b334a45a8ff 1116 }
bogdanm 0:9b334a45a8ff 1117 else
bogdanm 0:9b334a45a8ff 1118 {
bogdanm 0:9b334a45a8ff 1119 /* Release Lock */
bogdanm 0:9b334a45a8ff 1120 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1121
bogdanm 0:9b334a45a8ff 1122 /* Return function status */
bogdanm 0:9b334a45a8ff 1123 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1124 }
bogdanm 0:9b334a45a8ff 1125 }
bogdanm 0:9b334a45a8ff 1126
bogdanm 0:9b334a45a8ff 1127 /**
bogdanm 0:9b334a45a8ff 1128 * @brief Initializes the CRYP peripheral in AES CBC decryption mode using IT.
bogdanm 0:9b334a45a8ff 1129 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1130 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1131 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1132 * @param Size: Length of the plaintext buffer, must be a multiple of 16
bogdanm 0:9b334a45a8ff 1133 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1134 * @retval HAL status
bogdanm 0:9b334a45a8ff 1135 */
bogdanm 0:9b334a45a8ff 1136 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1137 {
bogdanm 0:9b334a45a8ff 1138 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 1139
bogdanm 0:9b334a45a8ff 1140 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1141 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1142 {
bogdanm 0:9b334a45a8ff 1143 /* Process Locked */
bogdanm 0:9b334a45a8ff 1144 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1145
bogdanm 0:9b334a45a8ff 1146 /* Return function status */
bogdanm 0:9b334a45a8ff 1147 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1148 }
bogdanm 0:9b334a45a8ff 1149
bogdanm 0:9b334a45a8ff 1150 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1151 {
bogdanm 0:9b334a45a8ff 1152 /* Process Locked */
bogdanm 0:9b334a45a8ff 1153 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1154
bogdanm 0:9b334a45a8ff 1155 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 1156 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1157 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1158 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1159 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1160
bogdanm 0:9b334a45a8ff 1161 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1162 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1163
bogdanm 0:9b334a45a8ff 1164 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1165 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1166 {
bogdanm 0:9b334a45a8ff 1167 /* Set the key */
bogdanm 0:9b334a45a8ff 1168 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1169
bogdanm 0:9b334a45a8ff 1170 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 1171 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 1172
bogdanm 0:9b334a45a8ff 1173 /* Set the CRYP peripheral in AES CBC decryption mode (with key derivation) */
bogdanm 0:9b334a45a8ff 1174 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC_KEYDERDECRYPT);
bogdanm 0:9b334a45a8ff 1175
bogdanm 0:9b334a45a8ff 1176 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1177 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1178
bogdanm 0:9b334a45a8ff 1179 /* Set the phase */
bogdanm 0:9b334a45a8ff 1180 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1181 }
bogdanm 0:9b334a45a8ff 1182
bogdanm 0:9b334a45a8ff 1183 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1184 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 1185
bogdanm 0:9b334a45a8ff 1186 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1187 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1188
bogdanm 0:9b334a45a8ff 1189 /* Get the last input data adress */
bogdanm 0:9b334a45a8ff 1190 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1191
bogdanm 0:9b334a45a8ff 1192 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 1193 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1194 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1195 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1196 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1197 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1198 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1199 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1200 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1201 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1202
bogdanm 0:9b334a45a8ff 1203 /* Return function status */
bogdanm 0:9b334a45a8ff 1204 return HAL_OK;
bogdanm 0:9b334a45a8ff 1205 }
bogdanm 0:9b334a45a8ff 1206 else
bogdanm 0:9b334a45a8ff 1207 {
bogdanm 0:9b334a45a8ff 1208 /* Release Lock */
bogdanm 0:9b334a45a8ff 1209 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1210
bogdanm 0:9b334a45a8ff 1211 /* Return function status */
bogdanm 0:9b334a45a8ff 1212 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1213 }
bogdanm 0:9b334a45a8ff 1214 }
bogdanm 0:9b334a45a8ff 1215
bogdanm 0:9b334a45a8ff 1216 /**
bogdanm 0:9b334a45a8ff 1217 * @brief Initializes the CRYP peripheral in AES CTR decryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1218 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1219 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1220 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1221 * @param Size: Length of the plaintext buffer, must be a multiple of 16
bogdanm 0:9b334a45a8ff 1222 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1223 * @retval HAL status
bogdanm 0:9b334a45a8ff 1224 */
bogdanm 0:9b334a45a8ff 1225 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1226 {
bogdanm 0:9b334a45a8ff 1227 uint32_t inputaddr = 0;
bogdanm 0:9b334a45a8ff 1228
bogdanm 0:9b334a45a8ff 1229 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1230 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1231 {
bogdanm 0:9b334a45a8ff 1232 /* Process Locked */
bogdanm 0:9b334a45a8ff 1233 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1234
bogdanm 0:9b334a45a8ff 1235 /* Return function status */
bogdanm 0:9b334a45a8ff 1236 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1237 }
bogdanm 0:9b334a45a8ff 1238
bogdanm 0:9b334a45a8ff 1239 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1240 {
bogdanm 0:9b334a45a8ff 1241 /* Process Locked */
bogdanm 0:9b334a45a8ff 1242 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1243
bogdanm 0:9b334a45a8ff 1244 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 1245 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1246 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1247 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1248 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1249
bogdanm 0:9b334a45a8ff 1250 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1251 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1252
bogdanm 0:9b334a45a8ff 1253 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1254 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1255 {
bogdanm 0:9b334a45a8ff 1256 /* Set the key */
bogdanm 0:9b334a45a8ff 1257 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1258
bogdanm 0:9b334a45a8ff 1259 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 1260 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 1261
bogdanm 0:9b334a45a8ff 1262 /* Set the CRYP peripheral in AES CTR decryption mode */
bogdanm 0:9b334a45a8ff 1263 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR_DECRYPT);
bogdanm 0:9b334a45a8ff 1264
bogdanm 0:9b334a45a8ff 1265 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1266 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1267
bogdanm 0:9b334a45a8ff 1268 /* Set the phase */
bogdanm 0:9b334a45a8ff 1269 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1270 }
bogdanm 0:9b334a45a8ff 1271
bogdanm 0:9b334a45a8ff 1272 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1273 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 1274
bogdanm 0:9b334a45a8ff 1275 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1276 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1277
bogdanm 0:9b334a45a8ff 1278 /* Get the last input data adress */
bogdanm 0:9b334a45a8ff 1279 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1280
bogdanm 0:9b334a45a8ff 1281 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 1282 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1283 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1284 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1285 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1286 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1287 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1288 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1289 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1290 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1291
bogdanm 0:9b334a45a8ff 1292 /* Return function status */
bogdanm 0:9b334a45a8ff 1293 return HAL_OK;
bogdanm 0:9b334a45a8ff 1294 }
bogdanm 0:9b334a45a8ff 1295 else
bogdanm 0:9b334a45a8ff 1296 {
bogdanm 0:9b334a45a8ff 1297 /* Release Lock */
bogdanm 0:9b334a45a8ff 1298 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1299
bogdanm 0:9b334a45a8ff 1300 /* Return function status */
bogdanm 0:9b334a45a8ff 1301 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1302 }
bogdanm 0:9b334a45a8ff 1303 }
bogdanm 0:9b334a45a8ff 1304
bogdanm 0:9b334a45a8ff 1305 /**
bogdanm 0:9b334a45a8ff 1306 * @brief Initializes the CRYP peripheral in AES ECB encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1307 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1308 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1309 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1310 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1311 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1312 * @retval HAL status
bogdanm 0:9b334a45a8ff 1313 */
bogdanm 0:9b334a45a8ff 1314 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1315 {
bogdanm 0:9b334a45a8ff 1316 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1317
bogdanm 0:9b334a45a8ff 1318 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1319 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1320 {
bogdanm 0:9b334a45a8ff 1321 /* Process Locked */
bogdanm 0:9b334a45a8ff 1322 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1323
bogdanm 0:9b334a45a8ff 1324 /* Return function status */
bogdanm 0:9b334a45a8ff 1325 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1326 }
bogdanm 0:9b334a45a8ff 1327
bogdanm 0:9b334a45a8ff 1328 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 1329 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1330 {
bogdanm 0:9b334a45a8ff 1331 /* Process Locked */
bogdanm 0:9b334a45a8ff 1332 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1333
bogdanm 0:9b334a45a8ff 1334 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1335 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1336
bogdanm 0:9b334a45a8ff 1337 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1338 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1339
bogdanm 0:9b334a45a8ff 1340 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1341 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1342 {
bogdanm 0:9b334a45a8ff 1343 /* Set the key */
bogdanm 0:9b334a45a8ff 1344 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1345
bogdanm 0:9b334a45a8ff 1346 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 1347 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT);
bogdanm 0:9b334a45a8ff 1348
bogdanm 0:9b334a45a8ff 1349 /* Set the phase */
bogdanm 0:9b334a45a8ff 1350 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1351 }
bogdanm 0:9b334a45a8ff 1352 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1353 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1354
bogdanm 0:9b334a45a8ff 1355 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1356 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1357
bogdanm 0:9b334a45a8ff 1358 /* Return function status */
bogdanm 0:9b334a45a8ff 1359 return HAL_OK;
bogdanm 0:9b334a45a8ff 1360 }
bogdanm 0:9b334a45a8ff 1361 else
bogdanm 0:9b334a45a8ff 1362 {
bogdanm 0:9b334a45a8ff 1363 /* Release Lock */
bogdanm 0:9b334a45a8ff 1364 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1365
bogdanm 0:9b334a45a8ff 1366 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1367 }
bogdanm 0:9b334a45a8ff 1368 }
bogdanm 0:9b334a45a8ff 1369
bogdanm 0:9b334a45a8ff 1370 /**
bogdanm 0:9b334a45a8ff 1371 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1372 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1373 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1374 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1375 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1376 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1377 * @retval HAL status
bogdanm 0:9b334a45a8ff 1378 */
bogdanm 0:9b334a45a8ff 1379 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1380 {
bogdanm 0:9b334a45a8ff 1381 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1382
bogdanm 0:9b334a45a8ff 1383 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1384 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1385 {
bogdanm 0:9b334a45a8ff 1386 /* Process Locked */
bogdanm 0:9b334a45a8ff 1387 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1388
bogdanm 0:9b334a45a8ff 1389 /* Return function status */
bogdanm 0:9b334a45a8ff 1390 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1391 }
bogdanm 0:9b334a45a8ff 1392
bogdanm 0:9b334a45a8ff 1393 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 1394 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1395 {
bogdanm 0:9b334a45a8ff 1396 /* Process Locked */
bogdanm 0:9b334a45a8ff 1397 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1398
bogdanm 0:9b334a45a8ff 1399 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1400 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1401
bogdanm 0:9b334a45a8ff 1402 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1403 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1404
bogdanm 0:9b334a45a8ff 1405 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1406 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1407 {
bogdanm 0:9b334a45a8ff 1408 /* Set the key */
bogdanm 0:9b334a45a8ff 1409 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1410
bogdanm 0:9b334a45a8ff 1411 /* Set the CRYP peripheral in AES CBC mode */
bogdanm 0:9b334a45a8ff 1412 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT);
bogdanm 0:9b334a45a8ff 1413
bogdanm 0:9b334a45a8ff 1414 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1415 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1416
bogdanm 0:9b334a45a8ff 1417 /* Set the phase */
bogdanm 0:9b334a45a8ff 1418 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1419 }
bogdanm 0:9b334a45a8ff 1420 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1421 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1422
bogdanm 0:9b334a45a8ff 1423 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1424 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1425
bogdanm 0:9b334a45a8ff 1426 /* Return function status */
bogdanm 0:9b334a45a8ff 1427 return HAL_OK;
bogdanm 0:9b334a45a8ff 1428 }
bogdanm 0:9b334a45a8ff 1429 else
bogdanm 0:9b334a45a8ff 1430 {
bogdanm 0:9b334a45a8ff 1431 /* Release Lock */
bogdanm 0:9b334a45a8ff 1432 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1433
bogdanm 0:9b334a45a8ff 1434 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1435 }
bogdanm 0:9b334a45a8ff 1436 }
bogdanm 0:9b334a45a8ff 1437
bogdanm 0:9b334a45a8ff 1438 /**
bogdanm 0:9b334a45a8ff 1439 * @brief Initializes the CRYP peripheral in AES CTR encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1440 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1441 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1442 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1443 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1444 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1445 * @retval HAL status
bogdanm 0:9b334a45a8ff 1446 */
bogdanm 0:9b334a45a8ff 1447 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1448 {
bogdanm 0:9b334a45a8ff 1449 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1450
bogdanm 0:9b334a45a8ff 1451 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1452 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1453 {
bogdanm 0:9b334a45a8ff 1454 /* Process Locked */
bogdanm 0:9b334a45a8ff 1455 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1456
bogdanm 0:9b334a45a8ff 1457 /* Return function status */
bogdanm 0:9b334a45a8ff 1458 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1459 }
bogdanm 0:9b334a45a8ff 1460
bogdanm 0:9b334a45a8ff 1461 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 1462 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1463 {
bogdanm 0:9b334a45a8ff 1464 /* Process Locked */
bogdanm 0:9b334a45a8ff 1465 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1466
bogdanm 0:9b334a45a8ff 1467 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1468 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1469
bogdanm 0:9b334a45a8ff 1470 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1471 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1472
bogdanm 0:9b334a45a8ff 1473 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1474 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1475 {
bogdanm 0:9b334a45a8ff 1476 /* Set the key */
bogdanm 0:9b334a45a8ff 1477 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1478
bogdanm 0:9b334a45a8ff 1479 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 1480 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT);
bogdanm 0:9b334a45a8ff 1481
bogdanm 0:9b334a45a8ff 1482 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1483 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1484
bogdanm 0:9b334a45a8ff 1485 /* Set the phase */
bogdanm 0:9b334a45a8ff 1486 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1487 }
bogdanm 0:9b334a45a8ff 1488
bogdanm 0:9b334a45a8ff 1489 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1490 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1491
bogdanm 0:9b334a45a8ff 1492 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1493 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1494
bogdanm 0:9b334a45a8ff 1495 /* Return function status */
bogdanm 0:9b334a45a8ff 1496 return HAL_OK;
bogdanm 0:9b334a45a8ff 1497 }
bogdanm 0:9b334a45a8ff 1498 else
bogdanm 0:9b334a45a8ff 1499 {
bogdanm 0:9b334a45a8ff 1500 /* Release Lock */
bogdanm 0:9b334a45a8ff 1501 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1502
bogdanm 0:9b334a45a8ff 1503 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1504 }
bogdanm 0:9b334a45a8ff 1505 }
bogdanm 0:9b334a45a8ff 1506
bogdanm 0:9b334a45a8ff 1507 /**
bogdanm 0:9b334a45a8ff 1508 * @brief Initializes the CRYP peripheral in AES ECB decryption mode using DMA.
bogdanm 0:9b334a45a8ff 1509 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1510 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1511 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1512 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1513 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1514 * @retval HAL status
bogdanm 0:9b334a45a8ff 1515 */
bogdanm 0:9b334a45a8ff 1516 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1517 {
bogdanm 0:9b334a45a8ff 1518 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1519
bogdanm 0:9b334a45a8ff 1520 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1521 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1522 {
bogdanm 0:9b334a45a8ff 1523 /* Process Locked */
bogdanm 0:9b334a45a8ff 1524 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1525
bogdanm 0:9b334a45a8ff 1526 /* Return function status */
bogdanm 0:9b334a45a8ff 1527 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1528 }
bogdanm 0:9b334a45a8ff 1529
bogdanm 0:9b334a45a8ff 1530 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 1531 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1532 {
bogdanm 0:9b334a45a8ff 1533 /* Process Locked */
bogdanm 0:9b334a45a8ff 1534 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1535
bogdanm 0:9b334a45a8ff 1536 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1537 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1538
bogdanm 0:9b334a45a8ff 1539 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1540 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1541
bogdanm 0:9b334a45a8ff 1542 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1543 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1544 {
bogdanm 0:9b334a45a8ff 1545 /* Set the key */
bogdanm 0:9b334a45a8ff 1546 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1547
bogdanm 0:9b334a45a8ff 1548 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 1549 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 1550
bogdanm 0:9b334a45a8ff 1551 /* Set the CRYP peripheral in AES ECB decryption mode (with key derivation) */
bogdanm 0:9b334a45a8ff 1552 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB_KEYDERDECRYPT);
bogdanm 0:9b334a45a8ff 1553
bogdanm 0:9b334a45a8ff 1554 /* Set the phase */
bogdanm 0:9b334a45a8ff 1555 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1556 }
bogdanm 0:9b334a45a8ff 1557
bogdanm 0:9b334a45a8ff 1558 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1559 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1560
bogdanm 0:9b334a45a8ff 1561 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1562 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1563
bogdanm 0:9b334a45a8ff 1564 /* Return function status */
bogdanm 0:9b334a45a8ff 1565 return HAL_OK;
bogdanm 0:9b334a45a8ff 1566 }
bogdanm 0:9b334a45a8ff 1567 else
bogdanm 0:9b334a45a8ff 1568 {
bogdanm 0:9b334a45a8ff 1569 /* Release Lock */
bogdanm 0:9b334a45a8ff 1570 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1571
bogdanm 0:9b334a45a8ff 1572 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1573 }
bogdanm 0:9b334a45a8ff 1574 }
bogdanm 0:9b334a45a8ff 1575
bogdanm 0:9b334a45a8ff 1576 /**
bogdanm 0:9b334a45a8ff 1577 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1578 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1579 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1580 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1581 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1582 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1583 * @retval HAL status
bogdanm 0:9b334a45a8ff 1584 */
bogdanm 0:9b334a45a8ff 1585 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1586 {
bogdanm 0:9b334a45a8ff 1587 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1588
bogdanm 0:9b334a45a8ff 1589 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1590 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1591 {
bogdanm 0:9b334a45a8ff 1592 /* Process Locked */
bogdanm 0:9b334a45a8ff 1593 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1594
bogdanm 0:9b334a45a8ff 1595 /* Return function status */
bogdanm 0:9b334a45a8ff 1596 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1597 }
bogdanm 0:9b334a45a8ff 1598
bogdanm 0:9b334a45a8ff 1599 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 1600 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1601 {
bogdanm 0:9b334a45a8ff 1602 /* Process Locked */
bogdanm 0:9b334a45a8ff 1603 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1604
bogdanm 0:9b334a45a8ff 1605 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1606 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1607
bogdanm 0:9b334a45a8ff 1608 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1609 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1610
bogdanm 0:9b334a45a8ff 1611 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1612 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1613 {
bogdanm 0:9b334a45a8ff 1614 /* Set the key */
bogdanm 0:9b334a45a8ff 1615 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1616
bogdanm 0:9b334a45a8ff 1617 /* Reset the CHMOD & MODE bits */
bogdanm 0:9b334a45a8ff 1618 CLEAR_BIT(hcryp->Instance->CR, CRYP_ALGO_CHAIN_MASK);
bogdanm 0:9b334a45a8ff 1619
bogdanm 0:9b334a45a8ff 1620 /* Set the CRYP peripheral in AES CBC decryption mode (with key derivation) */
bogdanm 0:9b334a45a8ff 1621 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC_KEYDERDECRYPT);
bogdanm 0:9b334a45a8ff 1622
bogdanm 0:9b334a45a8ff 1623 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1624 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1625
bogdanm 0:9b334a45a8ff 1626 /* Set the phase */
bogdanm 0:9b334a45a8ff 1627 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1628 }
bogdanm 0:9b334a45a8ff 1629
bogdanm 0:9b334a45a8ff 1630 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1631 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1632
bogdanm 0:9b334a45a8ff 1633 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1634 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1635
bogdanm 0:9b334a45a8ff 1636 /* Return function status */
bogdanm 0:9b334a45a8ff 1637 return HAL_OK;
bogdanm 0:9b334a45a8ff 1638 }
bogdanm 0:9b334a45a8ff 1639 else
bogdanm 0:9b334a45a8ff 1640 {
bogdanm 0:9b334a45a8ff 1641 /* Release Lock */
bogdanm 0:9b334a45a8ff 1642 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1643
bogdanm 0:9b334a45a8ff 1644 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1645 }
bogdanm 0:9b334a45a8ff 1646 }
bogdanm 0:9b334a45a8ff 1647
bogdanm 0:9b334a45a8ff 1648 /**
bogdanm 0:9b334a45a8ff 1649 * @brief Initializes the CRYP peripheral in AES CTR decryption mode using DMA.
bogdanm 0:9b334a45a8ff 1650 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1651 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1652 * @param pCypherData: Pointer to the cyphertext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1653 * @param Size: Length of the plaintext buffer, must be a multiple of 16
bogdanm 0:9b334a45a8ff 1654 * @param pPlainData: Pointer to the plaintext buffer (aligned on u32)
bogdanm 0:9b334a45a8ff 1655 * @retval HAL status
bogdanm 0:9b334a45a8ff 1656 */
bogdanm 0:9b334a45a8ff 1657 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1658 {
bogdanm 0:9b334a45a8ff 1659 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1660
bogdanm 0:9b334a45a8ff 1661 /* Check that data aligned on u32 */
bogdanm 0:9b334a45a8ff 1662 if((((uint32_t)pPlainData & (uint32_t)0x00000003) != 0) || (((uint32_t)pCypherData & (uint32_t)0x00000003) != 0) || ((Size & (uint16_t)0x000F) != 0))
bogdanm 0:9b334a45a8ff 1663 {
bogdanm 0:9b334a45a8ff 1664 /* Process Locked */
bogdanm 0:9b334a45a8ff 1665 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1666
bogdanm 0:9b334a45a8ff 1667 /* Return function status */
bogdanm 0:9b334a45a8ff 1668 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1669 }
bogdanm 0:9b334a45a8ff 1670
bogdanm 0:9b334a45a8ff 1671 /* Check if HAL_CRYP_Init has been called */
bogdanm 0:9b334a45a8ff 1672 if ((hcryp->State != HAL_CRYP_STATE_RESET) && (hcryp->State == HAL_CRYP_STATE_READY))
bogdanm 0:9b334a45a8ff 1673 {
bogdanm 0:9b334a45a8ff 1674 /* Process Locked */
bogdanm 0:9b334a45a8ff 1675 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1676
bogdanm 0:9b334a45a8ff 1677 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1678 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1679
bogdanm 0:9b334a45a8ff 1680 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1681 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1682
bogdanm 0:9b334a45a8ff 1683 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1684 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1685 {
bogdanm 0:9b334a45a8ff 1686 /* Set the key */
bogdanm 0:9b334a45a8ff 1687 CRYP_SetKey(hcryp, hcryp->Init.pKey);
bogdanm 0:9b334a45a8ff 1688
bogdanm 0:9b334a45a8ff 1689 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 1690 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR_DECRYPT);
bogdanm 0:9b334a45a8ff 1691
bogdanm 0:9b334a45a8ff 1692 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1693 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect);
bogdanm 0:9b334a45a8ff 1694
bogdanm 0:9b334a45a8ff 1695 /* Set the phase */
bogdanm 0:9b334a45a8ff 1696 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1697 }
bogdanm 0:9b334a45a8ff 1698
bogdanm 0:9b334a45a8ff 1699 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1700 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1701
bogdanm 0:9b334a45a8ff 1702 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1703 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1704
bogdanm 0:9b334a45a8ff 1705 /* Return function status */
bogdanm 0:9b334a45a8ff 1706 return HAL_OK;
bogdanm 0:9b334a45a8ff 1707 }
bogdanm 0:9b334a45a8ff 1708 else
bogdanm 0:9b334a45a8ff 1709 {
bogdanm 0:9b334a45a8ff 1710 /* Release Lock */
bogdanm 0:9b334a45a8ff 1711 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1712
bogdanm 0:9b334a45a8ff 1713 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1714 }
bogdanm 0:9b334a45a8ff 1715 }
bogdanm 0:9b334a45a8ff 1716
bogdanm 0:9b334a45a8ff 1717 /**
bogdanm 0:9b334a45a8ff 1718 * @}
bogdanm 0:9b334a45a8ff 1719 */
bogdanm 0:9b334a45a8ff 1720
bogdanm 0:9b334a45a8ff 1721 /** @defgroup CRYP_Exported_Functions_Group3 DMA callback functions
bogdanm 0:9b334a45a8ff 1722 * @brief DMA callback functions.
bogdanm 0:9b334a45a8ff 1723 *
bogdanm 0:9b334a45a8ff 1724 @verbatim
bogdanm 0:9b334a45a8ff 1725 ==============================================================================
bogdanm 0:9b334a45a8ff 1726 ##### DMA callback functions #####
bogdanm 0:9b334a45a8ff 1727 ==============================================================================
bogdanm 0:9b334a45a8ff 1728 [..] This section provides DMA callback functions:
bogdanm 0:9b334a45a8ff 1729 (+) DMA Input data transfer complete
bogdanm 0:9b334a45a8ff 1730 (+) DMA Output data transfer complete
bogdanm 0:9b334a45a8ff 1731 (+) DMA error
bogdanm 0:9b334a45a8ff 1732
bogdanm 0:9b334a45a8ff 1733 @endverbatim
bogdanm 0:9b334a45a8ff 1734 * @{
bogdanm 0:9b334a45a8ff 1735 */
bogdanm 0:9b334a45a8ff 1736
bogdanm 0:9b334a45a8ff 1737 /**
bogdanm 0:9b334a45a8ff 1738 * @brief CRYP error callback.
bogdanm 0:9b334a45a8ff 1739 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1740 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1741 * @retval None
bogdanm 0:9b334a45a8ff 1742 */
bogdanm 0:9b334a45a8ff 1743 __weak void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1744 {
bogdanm 0:9b334a45a8ff 1745 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 1746 the HAL_CRYP_ErrorCallback can be implemented in the user file
bogdanm 0:9b334a45a8ff 1747 */
bogdanm 0:9b334a45a8ff 1748 }
bogdanm 0:9b334a45a8ff 1749
bogdanm 0:9b334a45a8ff 1750 /**
bogdanm 0:9b334a45a8ff 1751 * @brief Input transfer completed callback.
bogdanm 0:9b334a45a8ff 1752 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1753 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1754 * @retval None
bogdanm 0:9b334a45a8ff 1755 */
bogdanm 0:9b334a45a8ff 1756 __weak void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1757 {
bogdanm 0:9b334a45a8ff 1758 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 1759 the HAL_CRYP_InCpltCallback can be implemented in the user file
bogdanm 0:9b334a45a8ff 1760 */
bogdanm 0:9b334a45a8ff 1761 }
bogdanm 0:9b334a45a8ff 1762
bogdanm 0:9b334a45a8ff 1763 /**
bogdanm 0:9b334a45a8ff 1764 * @brief Output transfer completed callback.
bogdanm 0:9b334a45a8ff 1765 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1766 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1767 * @retval None
bogdanm 0:9b334a45a8ff 1768 */
bogdanm 0:9b334a45a8ff 1769 __weak void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1770 {
bogdanm 0:9b334a45a8ff 1771 /* NOTE : This function should not be modified; when the callback is needed,
bogdanm 0:9b334a45a8ff 1772 the HAL_CRYP_OutCpltCallback can be implemented in the user file
bogdanm 0:9b334a45a8ff 1773 */
bogdanm 0:9b334a45a8ff 1774 }
bogdanm 0:9b334a45a8ff 1775
bogdanm 0:9b334a45a8ff 1776 /**
bogdanm 0:9b334a45a8ff 1777 * @}
bogdanm 0:9b334a45a8ff 1778 */
bogdanm 0:9b334a45a8ff 1779
bogdanm 0:9b334a45a8ff 1780 /** @defgroup CRYP_Exported_Functions_Group4 CRYP IRQ handler
bogdanm 0:9b334a45a8ff 1781 * @brief CRYP IRQ handler.
bogdanm 0:9b334a45a8ff 1782 *
bogdanm 0:9b334a45a8ff 1783 @verbatim
bogdanm 0:9b334a45a8ff 1784 ==============================================================================
bogdanm 0:9b334a45a8ff 1785 ##### CRYP IRQ handler management #####
bogdanm 0:9b334a45a8ff 1786 ==============================================================================
bogdanm 0:9b334a45a8ff 1787 [..] This section provides CRYP IRQ handler function.
bogdanm 0:9b334a45a8ff 1788
bogdanm 0:9b334a45a8ff 1789 @endverbatim
bogdanm 0:9b334a45a8ff 1790 * @{
bogdanm 0:9b334a45a8ff 1791 */
bogdanm 0:9b334a45a8ff 1792
bogdanm 0:9b334a45a8ff 1793 /**
bogdanm 0:9b334a45a8ff 1794 * @brief This function handles CRYP interrupt request.
bogdanm 0:9b334a45a8ff 1795 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1796 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1797 * @retval None
bogdanm 0:9b334a45a8ff 1798 */
bogdanm 0:9b334a45a8ff 1799 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1800 {
bogdanm 0:9b334a45a8ff 1801 /* Check if error occurred*/
bogdanm 0:9b334a45a8ff 1802 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_ERR) != RESET)
bogdanm 0:9b334a45a8ff 1803 {
bogdanm 0:9b334a45a8ff 1804 if (__HAL_CRYP_GET_FLAG(hcryp,CRYP_FLAG_RDERR) != RESET)
bogdanm 0:9b334a45a8ff 1805 {
bogdanm 0:9b334a45a8ff 1806 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CLEARFLAG_RDERR);
bogdanm 0:9b334a45a8ff 1807 }
bogdanm 0:9b334a45a8ff 1808
bogdanm 0:9b334a45a8ff 1809 if (__HAL_CRYP_GET_FLAG(hcryp,CRYP_FLAG_WRERR) != RESET)
bogdanm 0:9b334a45a8ff 1810 {
bogdanm 0:9b334a45a8ff 1811 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CLEARFLAG_WRERR);
bogdanm 0:9b334a45a8ff 1812 }
bogdanm 0:9b334a45a8ff 1813
bogdanm 0:9b334a45a8ff 1814 if (__HAL_CRYP_GET_FLAG(hcryp,CRYP_FLAG_CCF) != RESET)
bogdanm 0:9b334a45a8ff 1815 {
bogdanm 0:9b334a45a8ff 1816 __HAL_CRYP_CLEAR_FLAG(hcryp,CRYP_CLEARFLAG_CCF);
bogdanm 0:9b334a45a8ff 1817 }
bogdanm 0:9b334a45a8ff 1818
bogdanm 0:9b334a45a8ff 1819 hcryp->State= HAL_CRYP_STATE_ERROR;
bogdanm 0:9b334a45a8ff 1820 /* Disable Computation Complete Interrupt */
bogdanm 0:9b334a45a8ff 1821 __HAL_CRYP_DISABLE_IT(hcryp,CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 1822 __HAL_CRYP_DISABLE_IT(hcryp,CRYP_IT_ERR);
bogdanm 0:9b334a45a8ff 1823
bogdanm 0:9b334a45a8ff 1824 HAL_CRYP_ErrorCallback(hcryp);
bogdanm 0:9b334a45a8ff 1825
bogdanm 0:9b334a45a8ff 1826 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1827 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1828
bogdanm 0:9b334a45a8ff 1829 return;
bogdanm 0:9b334a45a8ff 1830 }
bogdanm 0:9b334a45a8ff 1831
bogdanm 0:9b334a45a8ff 1832 /* Check if computation complete interrupt was enabled*/
bogdanm 0:9b334a45a8ff 1833 if (__HAL_CRYP_GET_IT_SOURCE(hcryp, CRYP_IT_CC) != RESET)
bogdanm 0:9b334a45a8ff 1834 {
bogdanm 0:9b334a45a8ff 1835 /* Clear CCF Flag */
bogdanm 0:9b334a45a8ff 1836 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CLEARFLAG_CCF);
bogdanm 0:9b334a45a8ff 1837
bogdanm 0:9b334a45a8ff 1838 CRYP_EncryptDecrypt_IT(hcryp);
bogdanm 0:9b334a45a8ff 1839 }
bogdanm 0:9b334a45a8ff 1840 }
bogdanm 0:9b334a45a8ff 1841
bogdanm 0:9b334a45a8ff 1842 /**
bogdanm 0:9b334a45a8ff 1843 * @}
bogdanm 0:9b334a45a8ff 1844 */
bogdanm 0:9b334a45a8ff 1845
bogdanm 0:9b334a45a8ff 1846 /** @defgroup CRYP_Exported_Functions_Group5 Peripheral State functions
bogdanm 0:9b334a45a8ff 1847 * @brief Peripheral State functions.
bogdanm 0:9b334a45a8ff 1848 *
bogdanm 0:9b334a45a8ff 1849 @verbatim
bogdanm 0:9b334a45a8ff 1850 ==============================================================================
bogdanm 0:9b334a45a8ff 1851 ##### Peripheral State functions #####
bogdanm 0:9b334a45a8ff 1852 ==============================================================================
bogdanm 0:9b334a45a8ff 1853 [..]
bogdanm 0:9b334a45a8ff 1854 This subsection permits to get in run-time the status of the peripheral.
bogdanm 0:9b334a45a8ff 1855
bogdanm 0:9b334a45a8ff 1856 @endverbatim
bogdanm 0:9b334a45a8ff 1857 * @{
bogdanm 0:9b334a45a8ff 1858 */
bogdanm 0:9b334a45a8ff 1859
bogdanm 0:9b334a45a8ff 1860 /**
bogdanm 0:9b334a45a8ff 1861 * @brief Returns the CRYP state.
bogdanm 0:9b334a45a8ff 1862 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1863 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1864 * @retval HAL state
bogdanm 0:9b334a45a8ff 1865 */
bogdanm 0:9b334a45a8ff 1866 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1867 {
bogdanm 0:9b334a45a8ff 1868 return hcryp->State;
bogdanm 0:9b334a45a8ff 1869 }
bogdanm 0:9b334a45a8ff 1870
bogdanm 0:9b334a45a8ff 1871 /**
bogdanm 0:9b334a45a8ff 1872 * @}
bogdanm 0:9b334a45a8ff 1873 */
bogdanm 0:9b334a45a8ff 1874
bogdanm 0:9b334a45a8ff 1875 /**
bogdanm 0:9b334a45a8ff 1876 * @}
bogdanm 0:9b334a45a8ff 1877 */
bogdanm 0:9b334a45a8ff 1878
bogdanm 0:9b334a45a8ff 1879 /** @addtogroup CRYP_Private_Functions
bogdanm 0:9b334a45a8ff 1880 * @{
bogdanm 0:9b334a45a8ff 1881 */
bogdanm 0:9b334a45a8ff 1882
bogdanm 0:9b334a45a8ff 1883 /**
bogdanm 0:9b334a45a8ff 1884 * @brief IT function called under interruption context to continue encryption or decryption
bogdanm 0:9b334a45a8ff 1885 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1886 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1887 * @retval HAL status
bogdanm 0:9b334a45a8ff 1888 */
bogdanm 0:9b334a45a8ff 1889 static HAL_StatusTypeDef CRYP_EncryptDecrypt_IT(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 1890 {
bogdanm 0:9b334a45a8ff 1891 uint32_t inputaddr = 0, outputaddr = 0;
bogdanm 0:9b334a45a8ff 1892
bogdanm 0:9b334a45a8ff 1893 /* Get the last Output data adress */
bogdanm 0:9b334a45a8ff 1894 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1895
bogdanm 0:9b334a45a8ff 1896 /* Read the Output block from the Output Register */
bogdanm 0:9b334a45a8ff 1897 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1898 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1899 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1900 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1901 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1902 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1903 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 1904
bogdanm 0:9b334a45a8ff 1905 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1906 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1907
bogdanm 0:9b334a45a8ff 1908 /* Check if all input text is encrypted or decrypted */
bogdanm 0:9b334a45a8ff 1909 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1910 {
bogdanm 0:9b334a45a8ff 1911 /* Disable Computation Complete Interrupt */
bogdanm 0:9b334a45a8ff 1912 __HAL_CRYP_DISABLE_IT(hcryp,CRYP_IT_CC);
bogdanm 0:9b334a45a8ff 1913 __HAL_CRYP_DISABLE_IT(hcryp,CRYP_IT_ERR);
bogdanm 0:9b334a45a8ff 1914
bogdanm 0:9b334a45a8ff 1915 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1916 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1917
bogdanm 0:9b334a45a8ff 1918 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1919 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1920
bogdanm 0:9b334a45a8ff 1921 /* Call computation complete callback */
bogdanm 0:9b334a45a8ff 1922 HAL_CRYPEx_ComputationCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1923 }
bogdanm 0:9b334a45a8ff 1924 else /* Process the rest of input text */
bogdanm 0:9b334a45a8ff 1925 {
bogdanm 0:9b334a45a8ff 1926 /* Get the last Intput data adress */
bogdanm 0:9b334a45a8ff 1927 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1928
bogdanm 0:9b334a45a8ff 1929 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 1930 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1931 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1932 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1933 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1934 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1935 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1936 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1937 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1938 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1939 }
bogdanm 0:9b334a45a8ff 1940 return HAL_OK;
bogdanm 0:9b334a45a8ff 1941 }
bogdanm 0:9b334a45a8ff 1942 /**
bogdanm 0:9b334a45a8ff 1943 * @brief DMA CRYP Input Data process complete callback.
bogdanm 0:9b334a45a8ff 1944 * @param hdma: DMA handle
bogdanm 0:9b334a45a8ff 1945 * @retval None
bogdanm 0:9b334a45a8ff 1946 */
bogdanm 0:9b334a45a8ff 1947 static void CRYP_DMAInCplt(DMA_HandleTypeDef *hdma)
bogdanm 0:9b334a45a8ff 1948 {
bogdanm 0:9b334a45a8ff 1949 CRYP_HandleTypeDef* hcryp = (CRYP_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
bogdanm 0:9b334a45a8ff 1950
bogdanm 0:9b334a45a8ff 1951 /* Disable the DMA transfer for input request */
bogdanm 0:9b334a45a8ff 1952 CLEAR_BIT(hcryp->Instance->CR, AES_CR_DMAINEN);
bogdanm 0:9b334a45a8ff 1953
bogdanm 0:9b334a45a8ff 1954 /* Call input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1955 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1956 }
bogdanm 0:9b334a45a8ff 1957
bogdanm 0:9b334a45a8ff 1958 /**
bogdanm 0:9b334a45a8ff 1959 * @brief DMA CRYP Output Data process complete callback.
bogdanm 0:9b334a45a8ff 1960 * @param hdma: DMA handle
bogdanm 0:9b334a45a8ff 1961 * @retval None
bogdanm 0:9b334a45a8ff 1962 */
bogdanm 0:9b334a45a8ff 1963 static void CRYP_DMAOutCplt(DMA_HandleTypeDef *hdma)
bogdanm 0:9b334a45a8ff 1964 {
bogdanm 0:9b334a45a8ff 1965 CRYP_HandleTypeDef* hcryp = (CRYP_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
bogdanm 0:9b334a45a8ff 1966
bogdanm 0:9b334a45a8ff 1967 /* Disable the DMA transfer for output request by resetting the DMAOUTEN bit
bogdanm 0:9b334a45a8ff 1968 in the DMACR register */
bogdanm 0:9b334a45a8ff 1969 CLEAR_BIT(hcryp->Instance->CR, AES_CR_DMAOUTEN);
bogdanm 0:9b334a45a8ff 1970
bogdanm 0:9b334a45a8ff 1971 /* Clear CCF Flag */
bogdanm 0:9b334a45a8ff 1972 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CLEARFLAG_CCF);
bogdanm 0:9b334a45a8ff 1973
bogdanm 0:9b334a45a8ff 1974 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 1975 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 1976
bogdanm 0:9b334a45a8ff 1977 /* Change the CRYP state to ready */
bogdanm 0:9b334a45a8ff 1978 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1979
bogdanm 0:9b334a45a8ff 1980 /* Call output data transfer complete callback */
bogdanm 0:9b334a45a8ff 1981 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1982 }
bogdanm 0:9b334a45a8ff 1983
bogdanm 0:9b334a45a8ff 1984 /**
bogdanm 0:9b334a45a8ff 1985 * @brief DMA CRYP communication error callback.
bogdanm 0:9b334a45a8ff 1986 * @param hdma: DMA handle
bogdanm 0:9b334a45a8ff 1987 * @retval None
bogdanm 0:9b334a45a8ff 1988 */
bogdanm 0:9b334a45a8ff 1989 static void CRYP_DMAError(DMA_HandleTypeDef *hdma)
bogdanm 0:9b334a45a8ff 1990 {
bogdanm 0:9b334a45a8ff 1991 CRYP_HandleTypeDef* hcryp = (CRYP_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
bogdanm 0:9b334a45a8ff 1992 hcryp->State= HAL_CRYP_STATE_ERROR;
bogdanm 0:9b334a45a8ff 1993 HAL_CRYP_ErrorCallback(hcryp);
bogdanm 0:9b334a45a8ff 1994 }
bogdanm 0:9b334a45a8ff 1995
bogdanm 0:9b334a45a8ff 1996 /**
bogdanm 0:9b334a45a8ff 1997 * @brief Writes the Key in Key registers.
bogdanm 0:9b334a45a8ff 1998 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1999 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2000 * @param Key: Pointer to Key buffer
bogdanm 0:9b334a45a8ff 2001 * @note Key must be written as little endian.
bogdanm 0:9b334a45a8ff 2002 * If Key pointer points at address n,
bogdanm 0:9b334a45a8ff 2003 * n[15:0] contains key[96:127],
bogdanm 0:9b334a45a8ff 2004 * (n+4)[15:0] contains key[64:95],
bogdanm 0:9b334a45a8ff 2005 * (n+8)[15:0] contains key[32:63] and
bogdanm 0:9b334a45a8ff 2006 * (n+12)[15:0] contains key[0:31]
bogdanm 0:9b334a45a8ff 2007 * @retval None
bogdanm 0:9b334a45a8ff 2008 */
bogdanm 0:9b334a45a8ff 2009 static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint8_t *Key)
bogdanm 0:9b334a45a8ff 2010 {
bogdanm 0:9b334a45a8ff 2011 uint32_t keyaddr = (uint32_t)Key;
bogdanm 0:9b334a45a8ff 2012
bogdanm 0:9b334a45a8ff 2013 hcryp->Instance->KEYR3 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 2014 keyaddr+=4;
bogdanm 0:9b334a45a8ff 2015 hcryp->Instance->KEYR2 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 2016 keyaddr+=4;
bogdanm 0:9b334a45a8ff 2017 hcryp->Instance->KEYR1 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 2018 keyaddr+=4;
bogdanm 0:9b334a45a8ff 2019 hcryp->Instance->KEYR0 = __REV(*(uint32_t*)(keyaddr));
bogdanm 0:9b334a45a8ff 2020 }
bogdanm 0:9b334a45a8ff 2021
bogdanm 0:9b334a45a8ff 2022 /**
bogdanm 0:9b334a45a8ff 2023 * @brief Writes the InitVector/InitCounter in IV registers.
bogdanm 0:9b334a45a8ff 2024 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2025 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2026 * @param InitVector: Pointer to InitVector/InitCounter buffer
bogdanm 0:9b334a45a8ff 2027 * @note Init Vector must be written as little endian.
bogdanm 0:9b334a45a8ff 2028 * If Init Vector pointer points at address n,
bogdanm 0:9b334a45a8ff 2029 * n[15:0] contains Vector[96:127],
bogdanm 0:9b334a45a8ff 2030 * (n+4)[15:0] contains Vector[64:95],
bogdanm 0:9b334a45a8ff 2031 * (n+8)[15:0] contains Vector[32:63] and
bogdanm 0:9b334a45a8ff 2032 * (n+12)[15:0] contains Vector[0:31]
bogdanm 0:9b334a45a8ff 2033 * @retval None
bogdanm 0:9b334a45a8ff 2034 */
bogdanm 0:9b334a45a8ff 2035 static void CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp, uint8_t *InitVector)
bogdanm 0:9b334a45a8ff 2036 {
bogdanm 0:9b334a45a8ff 2037 uint32_t ivaddr = (uint32_t)InitVector;
bogdanm 0:9b334a45a8ff 2038
bogdanm 0:9b334a45a8ff 2039 hcryp->Instance->IVR3 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 2040 ivaddr+=4;
bogdanm 0:9b334a45a8ff 2041 hcryp->Instance->IVR2 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 2042 ivaddr+=4;
bogdanm 0:9b334a45a8ff 2043 hcryp->Instance->IVR1 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 2044 ivaddr+=4;
bogdanm 0:9b334a45a8ff 2045 hcryp->Instance->IVR0 = __REV(*(uint32_t*)(ivaddr));
bogdanm 0:9b334a45a8ff 2046 }
bogdanm 0:9b334a45a8ff 2047
bogdanm 0:9b334a45a8ff 2048 /**
bogdanm 0:9b334a45a8ff 2049 * @brief Process Data: Writes Input data in polling mode and reads the output data
bogdanm 0:9b334a45a8ff 2050 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2051 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2052 * @param Input: Pointer to the Input buffer
bogdanm 0:9b334a45a8ff 2053 * @param Ilength: Length of the Input buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 2054 * @param Output: Pointer to the returned buffer
bogdanm 0:9b334a45a8ff 2055 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2056 * @retval None
bogdanm 0:9b334a45a8ff 2057 */
bogdanm 0:9b334a45a8ff 2058 static HAL_StatusTypeDef CRYP_ProcessData(CRYP_HandleTypeDef *hcryp, uint8_t* Input, uint16_t Ilength, uint8_t* Output, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2059 {
bogdanm 0:9b334a45a8ff 2060 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 2061
bogdanm 0:9b334a45a8ff 2062 uint32_t index = 0;
bogdanm 0:9b334a45a8ff 2063 uint32_t inputaddr = (uint32_t)Input;
bogdanm 0:9b334a45a8ff 2064 uint32_t outputaddr = (uint32_t)Output;
bogdanm 0:9b334a45a8ff 2065
bogdanm 0:9b334a45a8ff 2066 for(index=0; (index < Ilength); index += 16)
bogdanm 0:9b334a45a8ff 2067 {
bogdanm 0:9b334a45a8ff 2068 /* Write the Input block in the Data Input register */
bogdanm 0:9b334a45a8ff 2069 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2070 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2071 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2072 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2073 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2074 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2075 hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2076 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2077
bogdanm 0:9b334a45a8ff 2078 /* Get timeout */
bogdanm 0:9b334a45a8ff 2079 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 2080
bogdanm 0:9b334a45a8ff 2081 while(HAL_IS_BIT_CLR(hcryp->Instance->SR, AES_SR_CCF))
bogdanm 0:9b334a45a8ff 2082 {
bogdanm 0:9b334a45a8ff 2083 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 2084 if(Timeout != HAL_MAX_DELAY)
bogdanm 0:9b334a45a8ff 2085 {
bogdanm 0:9b334a45a8ff 2086 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
bogdanm 0:9b334a45a8ff 2087 {
bogdanm 0:9b334a45a8ff 2088 /* Change state */
bogdanm 0:9b334a45a8ff 2089 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 2090
bogdanm 0:9b334a45a8ff 2091 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2092 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2093
bogdanm 0:9b334a45a8ff 2094 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2095 }
bogdanm 0:9b334a45a8ff 2096 }
bogdanm 0:9b334a45a8ff 2097 }
bogdanm 0:9b334a45a8ff 2098 /* Clear CCF Flag */
bogdanm 0:9b334a45a8ff 2099 __HAL_CRYP_CLEAR_FLAG(hcryp, CRYP_CLEARFLAG_CCF);
bogdanm 0:9b334a45a8ff 2100
bogdanm 0:9b334a45a8ff 2101 /* Read the Output block from the Data Output Register */
bogdanm 0:9b334a45a8ff 2102 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 2103 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2104 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 2105 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2106 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 2107 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2108 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
bogdanm 0:9b334a45a8ff 2109 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2110 }
bogdanm 0:9b334a45a8ff 2111 /* Return function status */
bogdanm 0:9b334a45a8ff 2112 return HAL_OK;
bogdanm 0:9b334a45a8ff 2113 }
bogdanm 0:9b334a45a8ff 2114
bogdanm 0:9b334a45a8ff 2115 /**
bogdanm 0:9b334a45a8ff 2116 * @brief Set the DMA configuration and start the DMA transfer
bogdanm 0:9b334a45a8ff 2117 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2118 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2119 * @param inputaddr: address of the Input buffer
bogdanm 0:9b334a45a8ff 2120 * @param Size: Size of the Input buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 2121 * @param outputaddr: address of the Output buffer
bogdanm 0:9b334a45a8ff 2122 * @retval None
bogdanm 0:9b334a45a8ff 2123 */
bogdanm 0:9b334a45a8ff 2124 static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr)
bogdanm 0:9b334a45a8ff 2125 {
bogdanm 0:9b334a45a8ff 2126 /* Set the CRYP DMA transfer complete callback */
bogdanm 0:9b334a45a8ff 2127 hcryp->hdmain->XferCpltCallback = CRYP_DMAInCplt;
bogdanm 0:9b334a45a8ff 2128 /* Set the DMA error callback */
bogdanm 0:9b334a45a8ff 2129 hcryp->hdmain->XferErrorCallback = CRYP_DMAError;
bogdanm 0:9b334a45a8ff 2130
bogdanm 0:9b334a45a8ff 2131 /* Set the CRYP DMA transfer complete callback */
bogdanm 0:9b334a45a8ff 2132 hcryp->hdmaout->XferCpltCallback = CRYP_DMAOutCplt;
bogdanm 0:9b334a45a8ff 2133 /* Set the DMA error callback */
bogdanm 0:9b334a45a8ff 2134 hcryp->hdmaout->XferErrorCallback = CRYP_DMAError;
bogdanm 0:9b334a45a8ff 2135
bogdanm 0:9b334a45a8ff 2136 /* Enable the DMA In DMA Stream */
bogdanm 0:9b334a45a8ff 2137 HAL_DMA_Start_IT(hcryp->hdmain, inputaddr, (uint32_t)&hcryp->Instance->DINR, Size/4);
bogdanm 0:9b334a45a8ff 2138
bogdanm 0:9b334a45a8ff 2139 /* Enable the DMA Out DMA Stream */
bogdanm 0:9b334a45a8ff 2140 HAL_DMA_Start_IT(hcryp->hdmaout, (uint32_t)&hcryp->Instance->DOUTR, outputaddr, Size/4);
bogdanm 0:9b334a45a8ff 2141
bogdanm 0:9b334a45a8ff 2142 /* Enable In and Out DMA requests */
bogdanm 0:9b334a45a8ff 2143 SET_BIT(hcryp->Instance->CR, (AES_CR_DMAINEN | AES_CR_DMAOUTEN));
bogdanm 0:9b334a45a8ff 2144
bogdanm 0:9b334a45a8ff 2145 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2146 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2147 }
bogdanm 0:9b334a45a8ff 2148
bogdanm 0:9b334a45a8ff 2149 /**
bogdanm 0:9b334a45a8ff 2150 * @}
bogdanm 0:9b334a45a8ff 2151 */
bogdanm 0:9b334a45a8ff 2152
bogdanm 0:9b334a45a8ff 2153 /**
bogdanm 0:9b334a45a8ff 2154 * @}
bogdanm 0:9b334a45a8ff 2155 */
bogdanm 0:9b334a45a8ff 2156
bogdanm 0:9b334a45a8ff 2157 /**
bogdanm 0:9b334a45a8ff 2158 * @}
bogdanm 0:9b334a45a8ff 2159 */
bogdanm 0:9b334a45a8ff 2160
bogdanm 0:9b334a45a8ff 2161 #endif /* HAL_CRYP_MODULE_ENABLED */
bogdanm 0:9b334a45a8ff 2162 #endif /* STM32L041xx || STM32L061xx || STM32L062xx || STM32L063xx || STM32L081xx || STM32L082xx || STM32L083xx */
bogdanm 0:9b334a45a8ff 2163 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
bogdanm 0:9b334a45a8ff 2164