fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Tue Apr 19 11:15:15 2016 +0100
Revision:
113:b3775bf36a83
Parent:
0:9b334a45a8ff
Synchronized with git revision 896981126b34b6d9441e3eea77881c67a1ae3dbd

Full URL: https://github.com/mbedmicro/mbed/commit/896981126b34b6d9441e3eea77881c67a1ae3dbd/

Exporter tool addition for e2 studio

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