added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
83:a036322b8637
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32f7xx_hal_cryp.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @version V1.1.0
<> 144:ef7eb2e8f9f7 6 * @date 22-April-2016
<> 144:ef7eb2e8f9f7 7 * @brief CRYP HAL module driver.
<> 144:ef7eb2e8f9f7 8 * This file provides firmware functions to manage the following
<> 144:ef7eb2e8f9f7 9 * functionalities of the Cryptography (CRYP) peripheral:
<> 144:ef7eb2e8f9f7 10 * + Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 11 * + AES processing functions
<> 144:ef7eb2e8f9f7 12 * + DES processing functions
<> 144:ef7eb2e8f9f7 13 * + TDES processing functions
<> 144:ef7eb2e8f9f7 14 * + DMA callback functions
<> 144:ef7eb2e8f9f7 15 * + CRYP IRQ handler management
<> 144:ef7eb2e8f9f7 16 * + Peripheral State functions
<> 144:ef7eb2e8f9f7 17 *
<> 144:ef7eb2e8f9f7 18 @verbatim
<> 144:ef7eb2e8f9f7 19 ==============================================================================
<> 144:ef7eb2e8f9f7 20 ##### How to use this driver #####
<> 144:ef7eb2e8f9f7 21 ==============================================================================
<> 144:ef7eb2e8f9f7 22 [..]
<> 144:ef7eb2e8f9f7 23 The CRYP HAL driver can be used as follows:
<> 144:ef7eb2e8f9f7 24
<> 144:ef7eb2e8f9f7 25 (#)Initialize the CRYP low level resources by implementing the HAL_CRYP_MspInit():
<> 144:ef7eb2e8f9f7 26 (##) Enable the CRYP interface clock using __HAL_RCC_CRYP_CLK_ENABLE()
<> 144:ef7eb2e8f9f7 27 (##) In case of using interrupts (e.g. HAL_CRYP_AESECB_Encrypt_IT())
<> 144:ef7eb2e8f9f7 28 (+++) Configure the CRYP interrupt priority using HAL_NVIC_SetPriority()
<> 144:ef7eb2e8f9f7 29 (+++) Enable the CRYP IRQ handler using HAL_NVIC_EnableIRQ()
<> 144:ef7eb2e8f9f7 30 (+++) In CRYP IRQ handler, call HAL_CRYP_IRQHandler()
<> 144:ef7eb2e8f9f7 31 (##) In case of using DMA to control data transfer (e.g. HAL_CRYP_AESECB_Encrypt_DMA())
<> 144:ef7eb2e8f9f7 32 (+++) Enable the DMAx interface clock using __DMAx_CLK_ENABLE()
<> 144:ef7eb2e8f9f7 33 (+++) Configure and enable two DMA streams one for managing data transfer from
<> 144:ef7eb2e8f9f7 34 memory to peripheral (input stream) and another stream for managing data
<> 144:ef7eb2e8f9f7 35 transfer from peripheral to memory (output stream)
<> 144:ef7eb2e8f9f7 36 (+++) Associate the initialized DMA handle to the CRYP DMA handle
<> 144:ef7eb2e8f9f7 37 using __HAL_LINKDMA()
<> 144:ef7eb2e8f9f7 38 (+++) Configure the priority and enable the NVIC for the transfer complete
<> 144:ef7eb2e8f9f7 39 interrupt on the two DMA Streams. The output stream should have higher
<> 144:ef7eb2e8f9f7 40 priority than the input stream HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ()
<> 144:ef7eb2e8f9f7 41
<> 144:ef7eb2e8f9f7 42 (#)Initialize the CRYP HAL using HAL_CRYP_Init(). This function configures mainly:
<> 144:ef7eb2e8f9f7 43 (##) The data type: 1-bit, 8-bit, 16-bit and 32-bit
<> 144:ef7eb2e8f9f7 44 (##) The key size: 128, 192 and 256. This parameter is relevant only for AES
<> 144:ef7eb2e8f9f7 45 (##) The encryption/decryption key. It's size depends on the algorithm
<> 144:ef7eb2e8f9f7 46 used for encryption/decryption
<> 144:ef7eb2e8f9f7 47 (##) The initialization vector (counter). It is not used ECB mode.
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 (#)Three processing (encryption/decryption) functions are available:
<> 144:ef7eb2e8f9f7 50 (##) Polling mode: encryption and decryption APIs are blocking functions
<> 144:ef7eb2e8f9f7 51 i.e. they process the data and wait till the processing is finished,
<> 144:ef7eb2e8f9f7 52 e.g. HAL_CRYP_AESCBC_Encrypt()
<> 144:ef7eb2e8f9f7 53 (##) Interrupt mode: encryption and decryption APIs are not blocking functions
<> 144:ef7eb2e8f9f7 54 i.e. they process the data under interrupt,
<> 144:ef7eb2e8f9f7 55 e.g. HAL_CRYP_AESCBC_Encrypt_IT()
<> 144:ef7eb2e8f9f7 56 (##) DMA mode: encryption and decryption APIs are not blocking functions
<> 144:ef7eb2e8f9f7 57 i.e. the data transfer is ensured by DMA,
<> 144:ef7eb2e8f9f7 58 e.g. HAL_CRYP_AESCBC_Encrypt_DMA()
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 (#)When the processing function is called at first time after HAL_CRYP_Init()
<> 144:ef7eb2e8f9f7 61 the CRYP peripheral is initialized and processes the buffer in input.
<> 144:ef7eb2e8f9f7 62 At second call, the processing function performs an append of the already
<> 144:ef7eb2e8f9f7 63 processed buffer.
<> 144:ef7eb2e8f9f7 64 When a new data block is to be processed, call HAL_CRYP_Init() then the
<> 144:ef7eb2e8f9f7 65 processing function.
<> 144:ef7eb2e8f9f7 66
<> 144:ef7eb2e8f9f7 67 (#)Call HAL_CRYP_DeInit() to deinitialize the CRYP peripheral.
<> 144:ef7eb2e8f9f7 68
<> 144:ef7eb2e8f9f7 69 @endverbatim
<> 144:ef7eb2e8f9f7 70 ******************************************************************************
<> 144:ef7eb2e8f9f7 71 * @attention
<> 144:ef7eb2e8f9f7 72 *
<> 144:ef7eb2e8f9f7 73 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 74 *
<> 144:ef7eb2e8f9f7 75 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 76 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 77 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 78 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 79 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 80 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 81 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 82 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 83 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 84 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 85 *
<> 144:ef7eb2e8f9f7 86 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 87 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 88 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 89 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 90 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 91 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 92 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 93 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 94 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 95 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 96 *
<> 144:ef7eb2e8f9f7 97 ******************************************************************************
<> 144:ef7eb2e8f9f7 98 */
<> 144:ef7eb2e8f9f7 99
<> 144:ef7eb2e8f9f7 100 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 101 #include "stm32f7xx_hal.h"
<> 144:ef7eb2e8f9f7 102
<> 144:ef7eb2e8f9f7 103 /** @addtogroup STM32F7xx_HAL_Driver
<> 144:ef7eb2e8f9f7 104 * @{
<> 144:ef7eb2e8f9f7 105 */
<> 144:ef7eb2e8f9f7 106 #if defined (STM32F756xx) || defined (STM32F777xx) || defined (STM32F779xx)
<> 144:ef7eb2e8f9f7 107 /** @defgroup CRYP CRYP
<> 144:ef7eb2e8f9f7 108 * @brief CRYP HAL module driver.
<> 144:ef7eb2e8f9f7 109 * @{
<> 144:ef7eb2e8f9f7 110 */
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112
<> 144:ef7eb2e8f9f7 113 #ifdef HAL_CRYP_MODULE_ENABLED
<> 144:ef7eb2e8f9f7 114
<> 144:ef7eb2e8f9f7 115 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 116 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 117 /** @addtogroup CRYP_Private_define
<> 144:ef7eb2e8f9f7 118 * @{
<> 144:ef7eb2e8f9f7 119 */
<> 144:ef7eb2e8f9f7 120 #define CRYP_TIMEOUT_VALUE 1
<> 144:ef7eb2e8f9f7 121 /**
<> 144:ef7eb2e8f9f7 122 * @}
<> 144:ef7eb2e8f9f7 123 */
<> 144:ef7eb2e8f9f7 124
<> 144:ef7eb2e8f9f7 125 /* Private macro -------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 126 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 127 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 128 /** @addtogroup CRYP_Private_Functions_prototypes
<> 144:ef7eb2e8f9f7 129 * @{
<> 144:ef7eb2e8f9f7 130 */
<> 144:ef7eb2e8f9f7 131 static void CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp, uint8_t *InitVector, uint32_t IVSize);
<> 144:ef7eb2e8f9f7 132 static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint8_t *Key, uint32_t KeySize);
<> 144:ef7eb2e8f9f7 133 static HAL_StatusTypeDef CRYP_ProcessData(CRYP_HandleTypeDef *hcryp, uint8_t* Input, uint16_t Ilength, uint8_t* Output, uint32_t Timeout);
<> 144:ef7eb2e8f9f7 134 static HAL_StatusTypeDef CRYP_ProcessData2Words(CRYP_HandleTypeDef *hcryp, uint8_t* Input, uint16_t Ilength, uint8_t* Output, uint32_t Timeout);
<> 144:ef7eb2e8f9f7 135 static void CRYP_DMAInCplt(DMA_HandleTypeDef *hdma);
<> 144:ef7eb2e8f9f7 136 static void CRYP_DMAOutCplt(DMA_HandleTypeDef *hdma);
<> 144:ef7eb2e8f9f7 137 static void CRYP_DMAError(DMA_HandleTypeDef *hdma);
<> 144:ef7eb2e8f9f7 138 static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr);
<> 144:ef7eb2e8f9f7 139 static void CRYP_SetTDESECBMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction);
<> 144:ef7eb2e8f9f7 140 static void CRYP_SetTDESCBCMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction);
<> 144:ef7eb2e8f9f7 141 static void CRYP_SetDESECBMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction);
<> 144:ef7eb2e8f9f7 142 static void CRYP_SetDESCBCMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction);
<> 144:ef7eb2e8f9f7 143 /**
<> 144:ef7eb2e8f9f7 144 * @}
<> 144:ef7eb2e8f9f7 145 */
<> 144:ef7eb2e8f9f7 146 /* Private functions ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 /** @addtogroup CRYP_Private_Functions
<> 144:ef7eb2e8f9f7 149 * @{
<> 144:ef7eb2e8f9f7 150 */
<> 144:ef7eb2e8f9f7 151
<> 144:ef7eb2e8f9f7 152 /**
<> 144:ef7eb2e8f9f7 153 * @brief DMA CRYP Input Data process complete callback.
<> 144:ef7eb2e8f9f7 154 * @param hdma: DMA handle
<> 144:ef7eb2e8f9f7 155 * @retval None
<> 144:ef7eb2e8f9f7 156 */
<> 144:ef7eb2e8f9f7 157 static void CRYP_DMAInCplt(DMA_HandleTypeDef *hdma)
<> 144:ef7eb2e8f9f7 158 {
<> 144:ef7eb2e8f9f7 159 CRYP_HandleTypeDef* hcryp = (CRYP_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
<> 144:ef7eb2e8f9f7 160
<> 144:ef7eb2e8f9f7 161 /* Disable the DMA transfer for input FIFO request by resetting the DIEN bit
<> 144:ef7eb2e8f9f7 162 in the DMACR register */
<> 144:ef7eb2e8f9f7 163 hcryp->Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DIEN);
<> 144:ef7eb2e8f9f7 164
<> 144:ef7eb2e8f9f7 165 /* Call input data transfer complete callback */
<> 144:ef7eb2e8f9f7 166 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 167 }
<> 144:ef7eb2e8f9f7 168
<> 144:ef7eb2e8f9f7 169 /**
<> 144:ef7eb2e8f9f7 170 * @brief DMA CRYP Output Data process complete callback.
<> 144:ef7eb2e8f9f7 171 * @param hdma: DMA handle
<> 144:ef7eb2e8f9f7 172 * @retval None
<> 144:ef7eb2e8f9f7 173 */
<> 144:ef7eb2e8f9f7 174 static void CRYP_DMAOutCplt(DMA_HandleTypeDef *hdma)
<> 144:ef7eb2e8f9f7 175 {
<> 144:ef7eb2e8f9f7 176 CRYP_HandleTypeDef* hcryp = (CRYP_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 /* Disable the DMA transfer for output FIFO request by resetting the DOEN bit
<> 144:ef7eb2e8f9f7 179 in the DMACR register */
<> 144:ef7eb2e8f9f7 180 hcryp->Instance->DMACR &= (uint32_t)(~CRYP_DMACR_DOEN);
<> 144:ef7eb2e8f9f7 181
<> 144:ef7eb2e8f9f7 182 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 183 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185 /* Change the CRYP state to ready */
<> 144:ef7eb2e8f9f7 186 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 187
<> 144:ef7eb2e8f9f7 188 /* Call output data transfer complete callback */
<> 144:ef7eb2e8f9f7 189 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 190 }
<> 144:ef7eb2e8f9f7 191
<> 144:ef7eb2e8f9f7 192 /**
<> 144:ef7eb2e8f9f7 193 * @brief DMA CRYP communication error callback.
<> 144:ef7eb2e8f9f7 194 * @param hdma: DMA handle
<> 144:ef7eb2e8f9f7 195 * @retval None
<> 144:ef7eb2e8f9f7 196 */
<> 144:ef7eb2e8f9f7 197 static void CRYP_DMAError(DMA_HandleTypeDef *hdma)
<> 144:ef7eb2e8f9f7 198 {
<> 144:ef7eb2e8f9f7 199 CRYP_HandleTypeDef* hcryp = (CRYP_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
<> 144:ef7eb2e8f9f7 200 hcryp->State= HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 201 HAL_CRYP_ErrorCallback(hcryp);
<> 144:ef7eb2e8f9f7 202 }
<> 144:ef7eb2e8f9f7 203
<> 144:ef7eb2e8f9f7 204 /**
<> 144:ef7eb2e8f9f7 205 * @brief Writes the Key in Key registers.
<> 144:ef7eb2e8f9f7 206 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 207 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 208 * @param Key: Pointer to Key buffer
<> 144:ef7eb2e8f9f7 209 * @param KeySize: Size of Key
<> 144:ef7eb2e8f9f7 210 * @retval None
<> 144:ef7eb2e8f9f7 211 */
<> 144:ef7eb2e8f9f7 212 static void CRYP_SetKey(CRYP_HandleTypeDef *hcryp, uint8_t *Key, uint32_t KeySize)
<> 144:ef7eb2e8f9f7 213 {
<> 144:ef7eb2e8f9f7 214 uint32_t keyaddr = (uint32_t)Key;
<> 144:ef7eb2e8f9f7 215
<> 144:ef7eb2e8f9f7 216 switch(KeySize)
<> 144:ef7eb2e8f9f7 217 {
<> 144:ef7eb2e8f9f7 218 case CRYP_KEYSIZE_256B:
<> 144:ef7eb2e8f9f7 219 /* Key Initialisation */
<> 144:ef7eb2e8f9f7 220 hcryp->Instance->K0LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 221 keyaddr+=4;
<> 144:ef7eb2e8f9f7 222 hcryp->Instance->K0RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 223 keyaddr+=4;
<> 144:ef7eb2e8f9f7 224 hcryp->Instance->K1LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 225 keyaddr+=4;
<> 144:ef7eb2e8f9f7 226 hcryp->Instance->K1RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 227 keyaddr+=4;
<> 144:ef7eb2e8f9f7 228 hcryp->Instance->K2LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 229 keyaddr+=4;
<> 144:ef7eb2e8f9f7 230 hcryp->Instance->K2RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 231 keyaddr+=4;
<> 144:ef7eb2e8f9f7 232 hcryp->Instance->K3LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 233 keyaddr+=4;
<> 144:ef7eb2e8f9f7 234 hcryp->Instance->K3RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 235 break;
<> 144:ef7eb2e8f9f7 236 case CRYP_KEYSIZE_192B:
<> 144:ef7eb2e8f9f7 237 hcryp->Instance->K1LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 238 keyaddr+=4;
<> 144:ef7eb2e8f9f7 239 hcryp->Instance->K1RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 240 keyaddr+=4;
<> 144:ef7eb2e8f9f7 241 hcryp->Instance->K2LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 242 keyaddr+=4;
<> 144:ef7eb2e8f9f7 243 hcryp->Instance->K2RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 244 keyaddr+=4;
<> 144:ef7eb2e8f9f7 245 hcryp->Instance->K3LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 246 keyaddr+=4;
<> 144:ef7eb2e8f9f7 247 hcryp->Instance->K3RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 248 break;
<> 144:ef7eb2e8f9f7 249 case CRYP_KEYSIZE_128B:
<> 144:ef7eb2e8f9f7 250 hcryp->Instance->K2LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 251 keyaddr+=4;
<> 144:ef7eb2e8f9f7 252 hcryp->Instance->K2RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 253 keyaddr+=4;
<> 144:ef7eb2e8f9f7 254 hcryp->Instance->K3LR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 255 keyaddr+=4;
<> 144:ef7eb2e8f9f7 256 hcryp->Instance->K3RR = __REV(*(uint32_t*)(keyaddr));
<> 144:ef7eb2e8f9f7 257 break;
<> 144:ef7eb2e8f9f7 258 default:
<> 144:ef7eb2e8f9f7 259 break;
<> 144:ef7eb2e8f9f7 260 }
<> 144:ef7eb2e8f9f7 261 }
<> 144:ef7eb2e8f9f7 262
<> 144:ef7eb2e8f9f7 263 /**
<> 144:ef7eb2e8f9f7 264 * @brief Writes the InitVector/InitCounter in IV registers.
<> 144:ef7eb2e8f9f7 265 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 266 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 267 * @param InitVector: Pointer to InitVector/InitCounter buffer
<> 144:ef7eb2e8f9f7 268 * @param IVSize: Size of the InitVector/InitCounter
<> 144:ef7eb2e8f9f7 269 * @retval None
<> 144:ef7eb2e8f9f7 270 */
<> 144:ef7eb2e8f9f7 271 static void CRYP_SetInitVector(CRYP_HandleTypeDef *hcryp, uint8_t *InitVector, uint32_t IVSize)
<> 144:ef7eb2e8f9f7 272 {
<> 144:ef7eb2e8f9f7 273 uint32_t ivaddr = (uint32_t)InitVector;
<> 144:ef7eb2e8f9f7 274
<> 144:ef7eb2e8f9f7 275 switch(IVSize)
<> 144:ef7eb2e8f9f7 276 {
<> 144:ef7eb2e8f9f7 277 case CRYP_KEYSIZE_128B:
<> 144:ef7eb2e8f9f7 278 hcryp->Instance->IV0LR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 279 ivaddr+=4;
<> 144:ef7eb2e8f9f7 280 hcryp->Instance->IV0RR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 281 ivaddr+=4;
<> 144:ef7eb2e8f9f7 282 hcryp->Instance->IV1LR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 283 ivaddr+=4;
<> 144:ef7eb2e8f9f7 284 hcryp->Instance->IV1RR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 285 break;
<> 144:ef7eb2e8f9f7 286 /* Whatever key size 192 or 256, Init vector is written in IV0LR and IV0RR */
<> 144:ef7eb2e8f9f7 287 case CRYP_KEYSIZE_192B:
<> 144:ef7eb2e8f9f7 288 hcryp->Instance->IV0LR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 289 ivaddr+=4;
<> 144:ef7eb2e8f9f7 290 hcryp->Instance->IV0RR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 291 break;
<> 144:ef7eb2e8f9f7 292 case CRYP_KEYSIZE_256B:
<> 144:ef7eb2e8f9f7 293 hcryp->Instance->IV0LR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 294 ivaddr+=4;
<> 144:ef7eb2e8f9f7 295 hcryp->Instance->IV0RR = __REV(*(uint32_t*)(ivaddr));
<> 144:ef7eb2e8f9f7 296 break;
<> 144:ef7eb2e8f9f7 297 default:
<> 144:ef7eb2e8f9f7 298 break;
<> 144:ef7eb2e8f9f7 299 }
<> 144:ef7eb2e8f9f7 300 }
<> 144:ef7eb2e8f9f7 301
<> 144:ef7eb2e8f9f7 302 /**
<> 144:ef7eb2e8f9f7 303 * @brief Process Data: Writes Input data in polling mode and read the output data
<> 144:ef7eb2e8f9f7 304 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 305 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 306 * @param Input: Pointer to the Input buffer
<> 144:ef7eb2e8f9f7 307 * @param Ilength: Length of the Input buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 308 * @param Output: Pointer to the returned buffer
<> 144:ef7eb2e8f9f7 309 * @param Timeout: Timeout value
<> 144:ef7eb2e8f9f7 310 * @retval None
<> 144:ef7eb2e8f9f7 311 */
<> 144:ef7eb2e8f9f7 312 static HAL_StatusTypeDef CRYP_ProcessData(CRYP_HandleTypeDef *hcryp, uint8_t* Input, uint16_t Ilength, uint8_t* Output, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 313 {
<> 144:ef7eb2e8f9f7 314 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 315
<> 144:ef7eb2e8f9f7 316 uint32_t i = 0;
<> 144:ef7eb2e8f9f7 317 uint32_t inputaddr = (uint32_t)Input;
<> 144:ef7eb2e8f9f7 318 uint32_t outputaddr = (uint32_t)Output;
<> 144:ef7eb2e8f9f7 319
<> 144:ef7eb2e8f9f7 320 for(i=0; (i < Ilength); i+=16)
<> 144:ef7eb2e8f9f7 321 {
<> 144:ef7eb2e8f9f7 322 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 323 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 324 inputaddr+=4;
<> 144:ef7eb2e8f9f7 325 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 326 inputaddr+=4;
<> 144:ef7eb2e8f9f7 327 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 328 inputaddr+=4;
<> 144:ef7eb2e8f9f7 329 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 330 inputaddr+=4;
<> 144:ef7eb2e8f9f7 331
<> 144:ef7eb2e8f9f7 332 /* Get tick */
<> 144:ef7eb2e8f9f7 333 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 334
<> 144:ef7eb2e8f9f7 335 while(HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_OFNE))
<> 144:ef7eb2e8f9f7 336 {
<> 144:ef7eb2e8f9f7 337 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 338 if(Timeout != HAL_MAX_DELAY)
<> 144:ef7eb2e8f9f7 339 {
<> 144:ef7eb2e8f9f7 340 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
<> 144:ef7eb2e8f9f7 341 {
<> 144:ef7eb2e8f9f7 342 /* Change state */
<> 144:ef7eb2e8f9f7 343 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 344
<> 144:ef7eb2e8f9f7 345 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 346 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 347
<> 144:ef7eb2e8f9f7 348 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 349 }
<> 144:ef7eb2e8f9f7 350 }
<> 144:ef7eb2e8f9f7 351 }
<> 144:ef7eb2e8f9f7 352 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 353 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 354 outputaddr+=4;
<> 144:ef7eb2e8f9f7 355 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 356 outputaddr+=4;
<> 144:ef7eb2e8f9f7 357 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 358 outputaddr+=4;
<> 144:ef7eb2e8f9f7 359 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 360 outputaddr+=4;
<> 144:ef7eb2e8f9f7 361 }
<> 144:ef7eb2e8f9f7 362 /* Return function status */
<> 144:ef7eb2e8f9f7 363 return HAL_OK;
<> 144:ef7eb2e8f9f7 364 }
<> 144:ef7eb2e8f9f7 365
<> 144:ef7eb2e8f9f7 366 /**
<> 144:ef7eb2e8f9f7 367 * @brief Process Data: Write Input data in polling mode.
<> 144:ef7eb2e8f9f7 368 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 369 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 370 * @param Input: Pointer to the Input buffer
<> 144:ef7eb2e8f9f7 371 * @param Ilength: Length of the Input buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 372 * @param Output: Pointer to the returned buffer
<> 144:ef7eb2e8f9f7 373 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 374 * @retval None
<> 144:ef7eb2e8f9f7 375 */
<> 144:ef7eb2e8f9f7 376 static HAL_StatusTypeDef CRYP_ProcessData2Words(CRYP_HandleTypeDef *hcryp, uint8_t* Input, uint16_t Ilength, uint8_t* Output, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 377 {
<> 144:ef7eb2e8f9f7 378 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 379
<> 144:ef7eb2e8f9f7 380 uint32_t i = 0;
<> 144:ef7eb2e8f9f7 381 uint32_t inputaddr = (uint32_t)Input;
<> 144:ef7eb2e8f9f7 382 uint32_t outputaddr = (uint32_t)Output;
<> 144:ef7eb2e8f9f7 383
<> 144:ef7eb2e8f9f7 384 for(i=0; (i < Ilength); i+=8)
<> 144:ef7eb2e8f9f7 385 {
<> 144:ef7eb2e8f9f7 386 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 387 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 388 inputaddr+=4;
<> 144:ef7eb2e8f9f7 389 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 390 inputaddr+=4;
<> 144:ef7eb2e8f9f7 391
<> 144:ef7eb2e8f9f7 392 /* Get tick */
<> 144:ef7eb2e8f9f7 393 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 394
<> 144:ef7eb2e8f9f7 395 while(HAL_IS_BIT_CLR(hcryp->Instance->SR, CRYP_FLAG_OFNE))
<> 144:ef7eb2e8f9f7 396 {
<> 144:ef7eb2e8f9f7 397 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 398 if(Timeout != HAL_MAX_DELAY)
<> 144:ef7eb2e8f9f7 399 {
<> 144:ef7eb2e8f9f7 400 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
<> 144:ef7eb2e8f9f7 401 {
<> 144:ef7eb2e8f9f7 402 /* Change state */
<> 144:ef7eb2e8f9f7 403 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 404
<> 144:ef7eb2e8f9f7 405 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 406 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 407
<> 144:ef7eb2e8f9f7 408 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 409 }
<> 144:ef7eb2e8f9f7 410 }
<> 144:ef7eb2e8f9f7 411 }
<> 144:ef7eb2e8f9f7 412 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 413 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 414 outputaddr+=4;
<> 144:ef7eb2e8f9f7 415 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 416 outputaddr+=4;
<> 144:ef7eb2e8f9f7 417 }
<> 144:ef7eb2e8f9f7 418 /* Return function status */
<> 144:ef7eb2e8f9f7 419 return HAL_OK;
<> 144:ef7eb2e8f9f7 420 }
<> 144:ef7eb2e8f9f7 421
<> 144:ef7eb2e8f9f7 422 /**
<> 144:ef7eb2e8f9f7 423 * @brief Set the DMA configuration and start the DMA transfer
<> 144:ef7eb2e8f9f7 424 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 425 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 426 * @param inputaddr: address of the Input buffer
<> 144:ef7eb2e8f9f7 427 * @param Size: Size of the Input buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 428 * @param outputaddr: address of the Output buffer
<> 144:ef7eb2e8f9f7 429 * @retval None
<> 144:ef7eb2e8f9f7 430 */
<> 144:ef7eb2e8f9f7 431 static void CRYP_SetDMAConfig(CRYP_HandleTypeDef *hcryp, uint32_t inputaddr, uint16_t Size, uint32_t outputaddr)
<> 144:ef7eb2e8f9f7 432 {
<> 144:ef7eb2e8f9f7 433 /* Set the CRYP DMA transfer complete callback */
<> 144:ef7eb2e8f9f7 434 hcryp->hdmain->XferCpltCallback = CRYP_DMAInCplt;
<> 144:ef7eb2e8f9f7 435 /* Set the DMA error callback */
<> 144:ef7eb2e8f9f7 436 hcryp->hdmain->XferErrorCallback = CRYP_DMAError;
<> 144:ef7eb2e8f9f7 437
<> 144:ef7eb2e8f9f7 438 /* Set the CRYP DMA transfer complete callback */
<> 144:ef7eb2e8f9f7 439 hcryp->hdmaout->XferCpltCallback = CRYP_DMAOutCplt;
<> 144:ef7eb2e8f9f7 440 /* Set the DMA error callback */
<> 144:ef7eb2e8f9f7 441 hcryp->hdmaout->XferErrorCallback = CRYP_DMAError;
<> 144:ef7eb2e8f9f7 442
<> 144:ef7eb2e8f9f7 443 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 444 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 445
<> 144:ef7eb2e8f9f7 446 /* Enable the DMA In DMA Stream */
<> 144:ef7eb2e8f9f7 447 HAL_DMA_Start_IT(hcryp->hdmain, inputaddr, (uint32_t)&hcryp->Instance->DR, Size/4);
<> 144:ef7eb2e8f9f7 448
<> 144:ef7eb2e8f9f7 449 /* Enable In DMA request */
<> 144:ef7eb2e8f9f7 450 hcryp->Instance->DMACR = (CRYP_DMACR_DIEN);
<> 144:ef7eb2e8f9f7 451
<> 144:ef7eb2e8f9f7 452 /* Enable the DMA Out DMA Stream */
<> 144:ef7eb2e8f9f7 453 HAL_DMA_Start_IT(hcryp->hdmaout, (uint32_t)&hcryp->Instance->DOUT, outputaddr, Size/4);
<> 144:ef7eb2e8f9f7 454
<> 144:ef7eb2e8f9f7 455 /* Enable Out DMA request */
<> 144:ef7eb2e8f9f7 456 hcryp->Instance->DMACR |= CRYP_DMACR_DOEN;
<> 144:ef7eb2e8f9f7 457
<> 144:ef7eb2e8f9f7 458 }
<> 144:ef7eb2e8f9f7 459
<> 144:ef7eb2e8f9f7 460 /**
<> 144:ef7eb2e8f9f7 461 * @brief Sets the CRYP peripheral in DES ECB mode.
<> 144:ef7eb2e8f9f7 462 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 463 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 464 * @param Direction: Encryption or decryption
<> 144:ef7eb2e8f9f7 465 * @retval None
<> 144:ef7eb2e8f9f7 466 */
<> 144:ef7eb2e8f9f7 467 static void CRYP_SetDESECBMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction)
<> 144:ef7eb2e8f9f7 468 {
<> 144:ef7eb2e8f9f7 469 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 470 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 471 {
<> 144:ef7eb2e8f9f7 472 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 473 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_DES_ECB | Direction);
<> 144:ef7eb2e8f9f7 474
<> 144:ef7eb2e8f9f7 475 /* Set the key */
<> 144:ef7eb2e8f9f7 476 hcryp->Instance->K1LR = __REV(*(uint32_t*)(hcryp->Init.pKey));
<> 144:ef7eb2e8f9f7 477 hcryp->Instance->K1RR = __REV(*(uint32_t*)(hcryp->Init.pKey+4));
<> 144:ef7eb2e8f9f7 478
<> 144:ef7eb2e8f9f7 479 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 480 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 481
<> 144:ef7eb2e8f9f7 482 /* Set the phase */
<> 144:ef7eb2e8f9f7 483 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 484 }
<> 144:ef7eb2e8f9f7 485 }
<> 144:ef7eb2e8f9f7 486
<> 144:ef7eb2e8f9f7 487 /**
<> 144:ef7eb2e8f9f7 488 * @brief Sets the CRYP peripheral in DES CBC mode.
<> 144:ef7eb2e8f9f7 489 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 490 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 491 * @param Direction: Encryption or decryption
<> 144:ef7eb2e8f9f7 492 * @retval None
<> 144:ef7eb2e8f9f7 493 */
<> 144:ef7eb2e8f9f7 494 static void CRYP_SetDESCBCMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction)
<> 144:ef7eb2e8f9f7 495 {
<> 144:ef7eb2e8f9f7 496 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 497 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 498 {
<> 144:ef7eb2e8f9f7 499 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 500 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_DES_CBC | Direction);
<> 144:ef7eb2e8f9f7 501
<> 144:ef7eb2e8f9f7 502 /* Set the key */
<> 144:ef7eb2e8f9f7 503 hcryp->Instance->K1LR = __REV(*(uint32_t*)(hcryp->Init.pKey));
<> 144:ef7eb2e8f9f7 504 hcryp->Instance->K1RR = __REV(*(uint32_t*)(hcryp->Init.pKey+4));
<> 144:ef7eb2e8f9f7 505
<> 144:ef7eb2e8f9f7 506 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 507 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_256B);
<> 144:ef7eb2e8f9f7 508
<> 144:ef7eb2e8f9f7 509 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 510 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 511
<> 144:ef7eb2e8f9f7 512 /* Set the phase */
<> 144:ef7eb2e8f9f7 513 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 514 }
<> 144:ef7eb2e8f9f7 515 }
<> 144:ef7eb2e8f9f7 516
<> 144:ef7eb2e8f9f7 517 /**
<> 144:ef7eb2e8f9f7 518 * @brief Sets the CRYP peripheral in TDES ECB mode.
<> 144:ef7eb2e8f9f7 519 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 520 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 521 * @param Direction: Encryption or decryption
<> 144:ef7eb2e8f9f7 522 * @retval None
<> 144:ef7eb2e8f9f7 523 */
<> 144:ef7eb2e8f9f7 524 static void CRYP_SetTDESECBMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction)
<> 144:ef7eb2e8f9f7 525 {
<> 144:ef7eb2e8f9f7 526 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 527 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 528 {
<> 144:ef7eb2e8f9f7 529 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 530 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_TDES_ECB | Direction);
<> 144:ef7eb2e8f9f7 531
<> 144:ef7eb2e8f9f7 532 /* Set the key */
<> 144:ef7eb2e8f9f7 533 CRYP_SetKey(hcryp, hcryp->Init.pKey, CRYP_KEYSIZE_192B);
<> 144:ef7eb2e8f9f7 534
<> 144:ef7eb2e8f9f7 535 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 536 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 537
<> 144:ef7eb2e8f9f7 538 /* Set the phase */
<> 144:ef7eb2e8f9f7 539 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 540 }
<> 144:ef7eb2e8f9f7 541 }
<> 144:ef7eb2e8f9f7 542
<> 144:ef7eb2e8f9f7 543 /**
<> 144:ef7eb2e8f9f7 544 * @brief Sets the CRYP peripheral in TDES CBC mode
<> 144:ef7eb2e8f9f7 545 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 546 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 547 * @param Direction: Encryption or decryption
<> 144:ef7eb2e8f9f7 548 * @retval None
<> 144:ef7eb2e8f9f7 549 */
<> 144:ef7eb2e8f9f7 550 static void CRYP_SetTDESCBCMode(CRYP_HandleTypeDef *hcryp, uint32_t Direction)
<> 144:ef7eb2e8f9f7 551 {
<> 144:ef7eb2e8f9f7 552 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 553 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 554 {
<> 144:ef7eb2e8f9f7 555 /* Set the CRYP peripheral in AES CBC mode */
<> 144:ef7eb2e8f9f7 556 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_TDES_CBC | Direction);
<> 144:ef7eb2e8f9f7 557
<> 144:ef7eb2e8f9f7 558 /* Set the key */
<> 144:ef7eb2e8f9f7 559 CRYP_SetKey(hcryp, hcryp->Init.pKey, CRYP_KEYSIZE_192B);
<> 144:ef7eb2e8f9f7 560
<> 144:ef7eb2e8f9f7 561 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 562 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_256B);
<> 144:ef7eb2e8f9f7 563
<> 144:ef7eb2e8f9f7 564 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 565 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 566
<> 144:ef7eb2e8f9f7 567 /* Set the phase */
<> 144:ef7eb2e8f9f7 568 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 569 }
<> 144:ef7eb2e8f9f7 570 }
<> 144:ef7eb2e8f9f7 571
<> 144:ef7eb2e8f9f7 572 /**
<> 144:ef7eb2e8f9f7 573 * @}
<> 144:ef7eb2e8f9f7 574 */
<> 144:ef7eb2e8f9f7 575
<> 144:ef7eb2e8f9f7 576 /* Exported functions --------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 577 /** @addtogroup CRYP_Exported_Functions
<> 144:ef7eb2e8f9f7 578 * @{
<> 144:ef7eb2e8f9f7 579 */
<> 144:ef7eb2e8f9f7 580
<> 144:ef7eb2e8f9f7 581 /** @defgroup CRYP_Exported_Functions_Group1 Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 582 * @brief Initialization and Configuration functions.
<> 144:ef7eb2e8f9f7 583 *
<> 144:ef7eb2e8f9f7 584 @verbatim
<> 144:ef7eb2e8f9f7 585 ==============================================================================
<> 144:ef7eb2e8f9f7 586 ##### Initialization and de-initialization functions #####
<> 144:ef7eb2e8f9f7 587 ==============================================================================
<> 144:ef7eb2e8f9f7 588 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 589 (+) Initialize the CRYP according to the specified parameters
<> 144:ef7eb2e8f9f7 590 in the CRYP_InitTypeDef and creates the associated handle
<> 144:ef7eb2e8f9f7 591 (+) DeInitialize the CRYP peripheral
<> 144:ef7eb2e8f9f7 592 (+) Initialize the CRYP MSP
<> 144:ef7eb2e8f9f7 593 (+) DeInitialize CRYP MSP
<> 144:ef7eb2e8f9f7 594
<> 144:ef7eb2e8f9f7 595 @endverbatim
<> 144:ef7eb2e8f9f7 596 * @{
<> 144:ef7eb2e8f9f7 597 */
<> 144:ef7eb2e8f9f7 598
<> 144:ef7eb2e8f9f7 599 /**
<> 144:ef7eb2e8f9f7 600 * @brief Initializes the CRYP according to the specified
<> 144:ef7eb2e8f9f7 601 * parameters in the CRYP_InitTypeDef and creates the associated handle.
<> 144:ef7eb2e8f9f7 602 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 603 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 604 * @retval HAL status
<> 144:ef7eb2e8f9f7 605 */
<> 144:ef7eb2e8f9f7 606 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 607 {
<> 144:ef7eb2e8f9f7 608 /* Check the CRYP handle allocation */
<> 144:ef7eb2e8f9f7 609 if(hcryp == NULL)
<> 144:ef7eb2e8f9f7 610 {
<> 144:ef7eb2e8f9f7 611 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 612 }
<> 144:ef7eb2e8f9f7 613
<> 144:ef7eb2e8f9f7 614 /* Check the parameters */
<> 144:ef7eb2e8f9f7 615 assert_param(IS_CRYP_KEYSIZE(hcryp->Init.KeySize));
<> 144:ef7eb2e8f9f7 616 assert_param(IS_CRYP_DATATYPE(hcryp->Init.DataType));
<> 144:ef7eb2e8f9f7 617
<> 144:ef7eb2e8f9f7 618 if(hcryp->State == HAL_CRYP_STATE_RESET)
<> 144:ef7eb2e8f9f7 619 {
<> 144:ef7eb2e8f9f7 620 /* Allocate lock resource and initialize it */
<> 144:ef7eb2e8f9f7 621 hcryp->Lock = HAL_UNLOCKED;
<> 144:ef7eb2e8f9f7 622 /* Init the low level hardware */
<> 144:ef7eb2e8f9f7 623 HAL_CRYP_MspInit(hcryp);
<> 144:ef7eb2e8f9f7 624 }
<> 144:ef7eb2e8f9f7 625
<> 144:ef7eb2e8f9f7 626 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 627 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 628
<> 144:ef7eb2e8f9f7 629 /* Set the key size and data type*/
<> 144:ef7eb2e8f9f7 630 CRYP->CR = (uint32_t) (hcryp->Init.KeySize | hcryp->Init.DataType);
<> 144:ef7eb2e8f9f7 631
<> 144:ef7eb2e8f9f7 632 /* Reset CrypInCount and CrypOutCount */
<> 144:ef7eb2e8f9f7 633 hcryp->CrypInCount = 0;
<> 144:ef7eb2e8f9f7 634 hcryp->CrypOutCount = 0;
<> 144:ef7eb2e8f9f7 635
<> 144:ef7eb2e8f9f7 636 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 637 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 638
<> 144:ef7eb2e8f9f7 639 /* Set the default CRYP phase */
<> 144:ef7eb2e8f9f7 640 hcryp->Phase = HAL_CRYP_PHASE_READY;
<> 144:ef7eb2e8f9f7 641
<> 144:ef7eb2e8f9f7 642 /* Return function status */
<> 144:ef7eb2e8f9f7 643 return HAL_OK;
<> 144:ef7eb2e8f9f7 644 }
<> 144:ef7eb2e8f9f7 645
<> 144:ef7eb2e8f9f7 646 /**
<> 144:ef7eb2e8f9f7 647 * @brief DeInitializes the CRYP peripheral.
<> 144:ef7eb2e8f9f7 648 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 649 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 650 * @retval HAL status
<> 144:ef7eb2e8f9f7 651 */
<> 144:ef7eb2e8f9f7 652 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 653 {
<> 144:ef7eb2e8f9f7 654 /* Check the CRYP handle allocation */
<> 144:ef7eb2e8f9f7 655 if(hcryp == NULL)
<> 144:ef7eb2e8f9f7 656 {
<> 144:ef7eb2e8f9f7 657 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 658 }
<> 144:ef7eb2e8f9f7 659
<> 144:ef7eb2e8f9f7 660 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 661 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 662
<> 144:ef7eb2e8f9f7 663 /* Set the default CRYP phase */
<> 144:ef7eb2e8f9f7 664 hcryp->Phase = HAL_CRYP_PHASE_READY;
<> 144:ef7eb2e8f9f7 665
<> 144:ef7eb2e8f9f7 666 /* Reset CrypInCount and CrypOutCount */
<> 144:ef7eb2e8f9f7 667 hcryp->CrypInCount = 0;
<> 144:ef7eb2e8f9f7 668 hcryp->CrypOutCount = 0;
<> 144:ef7eb2e8f9f7 669
<> 144:ef7eb2e8f9f7 670 /* Disable the CRYP Peripheral Clock */
<> 144:ef7eb2e8f9f7 671 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 672
<> 144:ef7eb2e8f9f7 673 /* DeInit the low level hardware: CLOCK, NVIC.*/
<> 144:ef7eb2e8f9f7 674 HAL_CRYP_MspDeInit(hcryp);
<> 144:ef7eb2e8f9f7 675
<> 144:ef7eb2e8f9f7 676 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 677 hcryp->State = HAL_CRYP_STATE_RESET;
<> 144:ef7eb2e8f9f7 678
<> 144:ef7eb2e8f9f7 679 /* Release Lock */
<> 144:ef7eb2e8f9f7 680 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 681
<> 144:ef7eb2e8f9f7 682 /* Return function status */
<> 144:ef7eb2e8f9f7 683 return HAL_OK;
<> 144:ef7eb2e8f9f7 684 }
<> 144:ef7eb2e8f9f7 685
<> 144:ef7eb2e8f9f7 686 /**
<> 144:ef7eb2e8f9f7 687 * @brief Initializes the CRYP MSP.
<> 144:ef7eb2e8f9f7 688 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 689 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 690 * @retval None
<> 144:ef7eb2e8f9f7 691 */
<> 144:ef7eb2e8f9f7 692 __weak void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 693 {
<> 144:ef7eb2e8f9f7 694 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 695 UNUSED(hcryp);
<> 144:ef7eb2e8f9f7 696
<> 144:ef7eb2e8f9f7 697 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 698 the HAL_CRYP_MspInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 699 */
<> 144:ef7eb2e8f9f7 700 }
<> 144:ef7eb2e8f9f7 701
<> 144:ef7eb2e8f9f7 702 /**
<> 144:ef7eb2e8f9f7 703 * @brief DeInitializes CRYP MSP.
<> 144:ef7eb2e8f9f7 704 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 705 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 706 * @retval None
<> 144:ef7eb2e8f9f7 707 */
<> 144:ef7eb2e8f9f7 708 __weak void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 709 {
<> 144:ef7eb2e8f9f7 710 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 711 UNUSED(hcryp);
<> 144:ef7eb2e8f9f7 712
<> 144:ef7eb2e8f9f7 713 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 714 the HAL_CRYP_MspDeInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 715 */
<> 144:ef7eb2e8f9f7 716 }
<> 144:ef7eb2e8f9f7 717
<> 144:ef7eb2e8f9f7 718 /**
<> 144:ef7eb2e8f9f7 719 * @}
<> 144:ef7eb2e8f9f7 720 */
<> 144:ef7eb2e8f9f7 721
<> 144:ef7eb2e8f9f7 722 /** @defgroup CRYP_Exported_Functions_Group2 AES processing functions
<> 144:ef7eb2e8f9f7 723 * @brief processing functions.
<> 144:ef7eb2e8f9f7 724 *
<> 144:ef7eb2e8f9f7 725 @verbatim
<> 144:ef7eb2e8f9f7 726 ==============================================================================
<> 144:ef7eb2e8f9f7 727 ##### AES processing functions #####
<> 144:ef7eb2e8f9f7 728 ==============================================================================
<> 144:ef7eb2e8f9f7 729 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 730 (+) Encrypt plaintext using AES-128/192/256 using chaining modes
<> 144:ef7eb2e8f9f7 731 (+) Decrypt cyphertext using AES-128/192/256 using chaining modes
<> 144:ef7eb2e8f9f7 732 [..] Three processing functions are available:
<> 144:ef7eb2e8f9f7 733 (+) Polling mode
<> 144:ef7eb2e8f9f7 734 (+) Interrupt mode
<> 144:ef7eb2e8f9f7 735 (+) DMA mode
<> 144:ef7eb2e8f9f7 736
<> 144:ef7eb2e8f9f7 737 @endverbatim
<> 144:ef7eb2e8f9f7 738 * @{
<> 144:ef7eb2e8f9f7 739 */
<> 144:ef7eb2e8f9f7 740
<> 144:ef7eb2e8f9f7 741 /**
<> 144:ef7eb2e8f9f7 742 * @brief Initializes the CRYP peripheral in AES ECB encryption mode
<> 144:ef7eb2e8f9f7 743 * then encrypt pPlainData. The cypher data are available in pCypherData
<> 144:ef7eb2e8f9f7 744 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 745 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 746 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 747 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 748 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 749 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 750 * @retval HAL status
<> 144:ef7eb2e8f9f7 751 */
<> 144:ef7eb2e8f9f7 752 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 753 {
<> 144:ef7eb2e8f9f7 754 /* Process Locked */
<> 144:ef7eb2e8f9f7 755 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 756
<> 144:ef7eb2e8f9f7 757 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 758 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 759
<> 144:ef7eb2e8f9f7 760 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 761 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 762 {
<> 144:ef7eb2e8f9f7 763 /* Set the key */
<> 144:ef7eb2e8f9f7 764 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 765
<> 144:ef7eb2e8f9f7 766 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 767 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB);
<> 144:ef7eb2e8f9f7 768
<> 144:ef7eb2e8f9f7 769 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 770 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 771
<> 144:ef7eb2e8f9f7 772 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 773 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 774
<> 144:ef7eb2e8f9f7 775 /* Set the phase */
<> 144:ef7eb2e8f9f7 776 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 777 }
<> 144:ef7eb2e8f9f7 778
<> 144:ef7eb2e8f9f7 779 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 780 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 781 {
<> 144:ef7eb2e8f9f7 782 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 783 }
<> 144:ef7eb2e8f9f7 784
<> 144:ef7eb2e8f9f7 785 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 786 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 787
<> 144:ef7eb2e8f9f7 788 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 789 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 790
<> 144:ef7eb2e8f9f7 791 /* Return function status */
<> 144:ef7eb2e8f9f7 792 return HAL_OK;
<> 144:ef7eb2e8f9f7 793 }
<> 144:ef7eb2e8f9f7 794
<> 144:ef7eb2e8f9f7 795 /**
<> 144:ef7eb2e8f9f7 796 * @brief Initializes the CRYP peripheral in AES CBC encryption mode
<> 144:ef7eb2e8f9f7 797 * then encrypt pPlainData. The cypher data are available in pCypherData
<> 144:ef7eb2e8f9f7 798 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 799 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 800 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 801 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 802 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 803 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 804 * @retval HAL status
<> 144:ef7eb2e8f9f7 805 */
<> 144:ef7eb2e8f9f7 806 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 807 {
<> 144:ef7eb2e8f9f7 808 /* Process Locked */
<> 144:ef7eb2e8f9f7 809 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 810
<> 144:ef7eb2e8f9f7 811 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 812 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 813
<> 144:ef7eb2e8f9f7 814 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 815 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 816 {
<> 144:ef7eb2e8f9f7 817 /* Set the key */
<> 144:ef7eb2e8f9f7 818 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 819
<> 144:ef7eb2e8f9f7 820 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 821 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC);
<> 144:ef7eb2e8f9f7 822
<> 144:ef7eb2e8f9f7 823 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 824 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 825
<> 144:ef7eb2e8f9f7 826 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 827 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 828
<> 144:ef7eb2e8f9f7 829 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 830 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 831
<> 144:ef7eb2e8f9f7 832 /* Set the phase */
<> 144:ef7eb2e8f9f7 833 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 834 }
<> 144:ef7eb2e8f9f7 835
<> 144:ef7eb2e8f9f7 836 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 837 if(CRYP_ProcessData(hcryp,pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 838 {
<> 144:ef7eb2e8f9f7 839 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 840 }
<> 144:ef7eb2e8f9f7 841
<> 144:ef7eb2e8f9f7 842 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 843 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 844
<> 144:ef7eb2e8f9f7 845 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 846 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 847
<> 144:ef7eb2e8f9f7 848 /* Return function status */
<> 144:ef7eb2e8f9f7 849 return HAL_OK;
<> 144:ef7eb2e8f9f7 850 }
<> 144:ef7eb2e8f9f7 851
<> 144:ef7eb2e8f9f7 852 /**
<> 144:ef7eb2e8f9f7 853 * @brief Initializes the CRYP peripheral in AES CTR encryption mode
<> 144:ef7eb2e8f9f7 854 * then encrypt pPlainData. The cypher data are available in pCypherData
<> 144:ef7eb2e8f9f7 855 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 856 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 857 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 858 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 859 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 860 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 861 * @retval HAL status
<> 144:ef7eb2e8f9f7 862 */
<> 144:ef7eb2e8f9f7 863 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 864 {
<> 144:ef7eb2e8f9f7 865 /* Process Locked */
<> 144:ef7eb2e8f9f7 866 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 867
<> 144:ef7eb2e8f9f7 868 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 869 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 870
<> 144:ef7eb2e8f9f7 871 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 872 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 873 {
<> 144:ef7eb2e8f9f7 874 /* Set the key */
<> 144:ef7eb2e8f9f7 875 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 876
<> 144:ef7eb2e8f9f7 877 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 878 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR);
<> 144:ef7eb2e8f9f7 879
<> 144:ef7eb2e8f9f7 880 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 881 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 882
<> 144:ef7eb2e8f9f7 883 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 884 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 885
<> 144:ef7eb2e8f9f7 886 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 887 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 888
<> 144:ef7eb2e8f9f7 889 /* Set the phase */
<> 144:ef7eb2e8f9f7 890 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 891 }
<> 144:ef7eb2e8f9f7 892
<> 144:ef7eb2e8f9f7 893 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 894 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 895 {
<> 144:ef7eb2e8f9f7 896 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 897 }
<> 144:ef7eb2e8f9f7 898
<> 144:ef7eb2e8f9f7 899 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 900 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 901
<> 144:ef7eb2e8f9f7 902 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 903 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 904
<> 144:ef7eb2e8f9f7 905 /* Return function status */
<> 144:ef7eb2e8f9f7 906 return HAL_OK;
<> 144:ef7eb2e8f9f7 907 }
<> 144:ef7eb2e8f9f7 908
<> 144:ef7eb2e8f9f7 909
<> 144:ef7eb2e8f9f7 910
<> 144:ef7eb2e8f9f7 911 /**
<> 144:ef7eb2e8f9f7 912 * @brief Initializes the CRYP peripheral in AES ECB decryption mode
<> 144:ef7eb2e8f9f7 913 * then decrypted pCypherData. The cypher data are available in pPlainData
<> 144:ef7eb2e8f9f7 914 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 915 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 916 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 917 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 918 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 919 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 920 * @retval HAL status
<> 144:ef7eb2e8f9f7 921 */
<> 144:ef7eb2e8f9f7 922 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 923 {
<> 144:ef7eb2e8f9f7 924 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 925
<> 144:ef7eb2e8f9f7 926 /* Process Locked */
<> 144:ef7eb2e8f9f7 927 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 928
<> 144:ef7eb2e8f9f7 929 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 930 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 931
<> 144:ef7eb2e8f9f7 932 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 933 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 934 {
<> 144:ef7eb2e8f9f7 935 /* Set the key */
<> 144:ef7eb2e8f9f7 936 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 937
<> 144:ef7eb2e8f9f7 938 /* Set the CRYP peripheral in AES Key mode */
<> 144:ef7eb2e8f9f7 939 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 940
<> 144:ef7eb2e8f9f7 941 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 942 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 943
<> 144:ef7eb2e8f9f7 944 /* Get tick */
<> 144:ef7eb2e8f9f7 945 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 946
<> 144:ef7eb2e8f9f7 947 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
<> 144:ef7eb2e8f9f7 948 {
<> 144:ef7eb2e8f9f7 949 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 950 if(Timeout != HAL_MAX_DELAY)
<> 144:ef7eb2e8f9f7 951 {
<> 144:ef7eb2e8f9f7 952 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
<> 144:ef7eb2e8f9f7 953 {
<> 144:ef7eb2e8f9f7 954 /* Change state */
<> 144:ef7eb2e8f9f7 955 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 956
<> 144:ef7eb2e8f9f7 957 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 958 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 959
<> 144:ef7eb2e8f9f7 960 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 961 }
<> 144:ef7eb2e8f9f7 962 }
<> 144:ef7eb2e8f9f7 963 }
<> 144:ef7eb2e8f9f7 964
<> 144:ef7eb2e8f9f7 965 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 966 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 967
<> 144:ef7eb2e8f9f7 968 /* Reset the ALGOMODE bits*/
<> 144:ef7eb2e8f9f7 969 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
<> 144:ef7eb2e8f9f7 970
<> 144:ef7eb2e8f9f7 971 /* Set the CRYP peripheral in AES ECB decryption mode */
<> 144:ef7eb2e8f9f7 972 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 973 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 974 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 975
<> 144:ef7eb2e8f9f7 976 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 977 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 978
<> 144:ef7eb2e8f9f7 979 /* Set the phase */
<> 144:ef7eb2e8f9f7 980 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 981 }
<> 144:ef7eb2e8f9f7 982
<> 144:ef7eb2e8f9f7 983 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 984 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 985 {
<> 144:ef7eb2e8f9f7 986 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 987 }
<> 144:ef7eb2e8f9f7 988
<> 144:ef7eb2e8f9f7 989 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 990 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 991
<> 144:ef7eb2e8f9f7 992 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 993 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 994
<> 144:ef7eb2e8f9f7 995 /* Return function status */
<> 144:ef7eb2e8f9f7 996 return HAL_OK;
<> 144:ef7eb2e8f9f7 997 }
<> 144:ef7eb2e8f9f7 998
<> 144:ef7eb2e8f9f7 999 /**
<> 144:ef7eb2e8f9f7 1000 * @brief Initializes the CRYP peripheral in AES ECB decryption mode
<> 144:ef7eb2e8f9f7 1001 * then decrypted pCypherData. The cypher data are available in pPlainData
<> 144:ef7eb2e8f9f7 1002 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1003 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1004 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1005 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 1006 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1007 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 1008 * @retval HAL status
<> 144:ef7eb2e8f9f7 1009 */
<> 144:ef7eb2e8f9f7 1010 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 1011 {
<> 144:ef7eb2e8f9f7 1012 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 1013
<> 144:ef7eb2e8f9f7 1014 /* Process Locked */
<> 144:ef7eb2e8f9f7 1015 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1016
<> 144:ef7eb2e8f9f7 1017 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1018 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1019
<> 144:ef7eb2e8f9f7 1020 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1021 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1022 {
<> 144:ef7eb2e8f9f7 1023 /* Set the key */
<> 144:ef7eb2e8f9f7 1024 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1025
<> 144:ef7eb2e8f9f7 1026 /* Set the CRYP peripheral in AES Key mode */
<> 144:ef7eb2e8f9f7 1027 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1028
<> 144:ef7eb2e8f9f7 1029 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1030 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1031
<> 144:ef7eb2e8f9f7 1032 /* Get tick */
<> 144:ef7eb2e8f9f7 1033 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 1034
<> 144:ef7eb2e8f9f7 1035 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
<> 144:ef7eb2e8f9f7 1036 {
<> 144:ef7eb2e8f9f7 1037 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 1038 if(Timeout != HAL_MAX_DELAY)
<> 144:ef7eb2e8f9f7 1039 {
<> 144:ef7eb2e8f9f7 1040 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
<> 144:ef7eb2e8f9f7 1041 {
<> 144:ef7eb2e8f9f7 1042 /* Change state */
<> 144:ef7eb2e8f9f7 1043 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 1044
<> 144:ef7eb2e8f9f7 1045 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1046 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1047
<> 144:ef7eb2e8f9f7 1048 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 1049 }
<> 144:ef7eb2e8f9f7 1050 }
<> 144:ef7eb2e8f9f7 1051 }
<> 144:ef7eb2e8f9f7 1052
<> 144:ef7eb2e8f9f7 1053 /* Reset the ALGOMODE bits*/
<> 144:ef7eb2e8f9f7 1054 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
<> 144:ef7eb2e8f9f7 1055
<> 144:ef7eb2e8f9f7 1056 /* Set the CRYP peripheral in AES CBC decryption mode */
<> 144:ef7eb2e8f9f7 1057 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1058
<> 144:ef7eb2e8f9f7 1059 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1060 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1061
<> 144:ef7eb2e8f9f7 1062 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1063 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1064
<> 144:ef7eb2e8f9f7 1065 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1066 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1067
<> 144:ef7eb2e8f9f7 1068 /* Set the phase */
<> 144:ef7eb2e8f9f7 1069 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1070 }
<> 144:ef7eb2e8f9f7 1071
<> 144:ef7eb2e8f9f7 1072 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 1073 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 1074 {
<> 144:ef7eb2e8f9f7 1075 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 1076 }
<> 144:ef7eb2e8f9f7 1077
<> 144:ef7eb2e8f9f7 1078 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1079 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1080
<> 144:ef7eb2e8f9f7 1081 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1082 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1083
<> 144:ef7eb2e8f9f7 1084 /* Return function status */
<> 144:ef7eb2e8f9f7 1085 return HAL_OK;
<> 144:ef7eb2e8f9f7 1086 }
<> 144:ef7eb2e8f9f7 1087
<> 144:ef7eb2e8f9f7 1088 /**
<> 144:ef7eb2e8f9f7 1089 * @brief Initializes the CRYP peripheral in AES CTR decryption mode
<> 144:ef7eb2e8f9f7 1090 * then decrypted pCypherData. The cypher data are available in pPlainData
<> 144:ef7eb2e8f9f7 1091 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1092 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1093 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1094 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 1095 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1096 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 1097 * @retval HAL status
<> 144:ef7eb2e8f9f7 1098 */
<> 144:ef7eb2e8f9f7 1099 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 1100 {
<> 144:ef7eb2e8f9f7 1101 /* Process Locked */
<> 144:ef7eb2e8f9f7 1102 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1103
<> 144:ef7eb2e8f9f7 1104 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1105 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1106 {
<> 144:ef7eb2e8f9f7 1107 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1108 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1109
<> 144:ef7eb2e8f9f7 1110 /* Set the key */
<> 144:ef7eb2e8f9f7 1111 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1112
<> 144:ef7eb2e8f9f7 1113 /* Set the CRYP peripheral in AES CTR mode */
<> 144:ef7eb2e8f9f7 1114 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1115
<> 144:ef7eb2e8f9f7 1116 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1117 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1118
<> 144:ef7eb2e8f9f7 1119 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1120 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1121
<> 144:ef7eb2e8f9f7 1122 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1123 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1124
<> 144:ef7eb2e8f9f7 1125 /* Set the phase */
<> 144:ef7eb2e8f9f7 1126 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1127 }
<> 144:ef7eb2e8f9f7 1128
<> 144:ef7eb2e8f9f7 1129 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 1130 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 1131 {
<> 144:ef7eb2e8f9f7 1132 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 1133 }
<> 144:ef7eb2e8f9f7 1134
<> 144:ef7eb2e8f9f7 1135 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1136 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1137
<> 144:ef7eb2e8f9f7 1138 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1139 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1140
<> 144:ef7eb2e8f9f7 1141 /* Return function status */
<> 144:ef7eb2e8f9f7 1142 return HAL_OK;
<> 144:ef7eb2e8f9f7 1143 }
<> 144:ef7eb2e8f9f7 1144
<> 144:ef7eb2e8f9f7 1145 /**
<> 144:ef7eb2e8f9f7 1146 * @brief Initializes the CRYP peripheral in AES ECB encryption mode using Interrupt.
<> 144:ef7eb2e8f9f7 1147 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1148 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1149 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1150 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
<> 144:ef7eb2e8f9f7 1151 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1152 * @retval HAL status
<> 144:ef7eb2e8f9f7 1153 */
<> 144:ef7eb2e8f9f7 1154 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 1155 {
<> 144:ef7eb2e8f9f7 1156 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1157 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1158
<> 144:ef7eb2e8f9f7 1159 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 1160 {
<> 144:ef7eb2e8f9f7 1161 /* Process Locked */
<> 144:ef7eb2e8f9f7 1162 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1163
<> 144:ef7eb2e8f9f7 1164 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 1165 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 1166 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 1167 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 1168
<> 144:ef7eb2e8f9f7 1169 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1170 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1171
<> 144:ef7eb2e8f9f7 1172 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1173 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1174 {
<> 144:ef7eb2e8f9f7 1175 /* Set the key */
<> 144:ef7eb2e8f9f7 1176 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1177
<> 144:ef7eb2e8f9f7 1178 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 1179 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB);
<> 144:ef7eb2e8f9f7 1180
<> 144:ef7eb2e8f9f7 1181 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1182 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1183
<> 144:ef7eb2e8f9f7 1184 /* Set the phase */
<> 144:ef7eb2e8f9f7 1185 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1186 }
<> 144:ef7eb2e8f9f7 1187
<> 144:ef7eb2e8f9f7 1188 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 1189 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1190
<> 144:ef7eb2e8f9f7 1191 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1192 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1193
<> 144:ef7eb2e8f9f7 1194 /* Return function status */
<> 144:ef7eb2e8f9f7 1195 return HAL_OK;
<> 144:ef7eb2e8f9f7 1196 }
<> 144:ef7eb2e8f9f7 1197 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 1198 {
<> 144:ef7eb2e8f9f7 1199 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 1200 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 1201 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1202 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1203 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1204 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1205 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1206 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1207 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1208 hcryp->pCrypInBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1209 hcryp->CrypInCount -= 16;
<> 144:ef7eb2e8f9f7 1210 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 1211 {
<> 144:ef7eb2e8f9f7 1212 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 1213 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 1214 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1215 }
<> 144:ef7eb2e8f9f7 1216 }
<> 144:ef7eb2e8f9f7 1217 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 1218 {
<> 144:ef7eb2e8f9f7 1219 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 1220 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 1221 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1222 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1223 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1224 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1225 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1226 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1227 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1228 hcryp->pCrypOutBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1229 hcryp->CrypOutCount -= 16;
<> 144:ef7eb2e8f9f7 1230 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 1231 {
<> 144:ef7eb2e8f9f7 1232 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1233 /* Process Locked */
<> 144:ef7eb2e8f9f7 1234 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1235 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1236 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1237 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 1238 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1239 }
<> 144:ef7eb2e8f9f7 1240 }
<> 144:ef7eb2e8f9f7 1241
<> 144:ef7eb2e8f9f7 1242 /* Return function status */
<> 144:ef7eb2e8f9f7 1243 return HAL_OK;
<> 144:ef7eb2e8f9f7 1244 }
<> 144:ef7eb2e8f9f7 1245
<> 144:ef7eb2e8f9f7 1246 /**
<> 144:ef7eb2e8f9f7 1247 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using Interrupt.
<> 144:ef7eb2e8f9f7 1248 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1249 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1250 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1251 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
<> 144:ef7eb2e8f9f7 1252 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1253 * @retval HAL status
<> 144:ef7eb2e8f9f7 1254 */
<> 144:ef7eb2e8f9f7 1255 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 1256 {
<> 144:ef7eb2e8f9f7 1257 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1258 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1259
<> 144:ef7eb2e8f9f7 1260 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 1261 {
<> 144:ef7eb2e8f9f7 1262 /* Process Locked */
<> 144:ef7eb2e8f9f7 1263 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1264
<> 144:ef7eb2e8f9f7 1265 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 1266 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 1267 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 1268 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 1269
<> 144:ef7eb2e8f9f7 1270 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1271 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1272
<> 144:ef7eb2e8f9f7 1273 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1274 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1275 {
<> 144:ef7eb2e8f9f7 1276 /* Set the key */
<> 144:ef7eb2e8f9f7 1277 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1278
<> 144:ef7eb2e8f9f7 1279 /* Set the CRYP peripheral in AES CBC mode */
<> 144:ef7eb2e8f9f7 1280 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC);
<> 144:ef7eb2e8f9f7 1281
<> 144:ef7eb2e8f9f7 1282 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1283 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1284
<> 144:ef7eb2e8f9f7 1285 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1286 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1287
<> 144:ef7eb2e8f9f7 1288 /* Set the phase */
<> 144:ef7eb2e8f9f7 1289 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1290 }
<> 144:ef7eb2e8f9f7 1291 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 1292 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1293
<> 144:ef7eb2e8f9f7 1294 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1295 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1296
<> 144:ef7eb2e8f9f7 1297 /* Return function status */
<> 144:ef7eb2e8f9f7 1298 return HAL_OK;
<> 144:ef7eb2e8f9f7 1299 }
<> 144:ef7eb2e8f9f7 1300 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 1301 {
<> 144:ef7eb2e8f9f7 1302 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 1303 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 1304 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1305 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1306 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1307 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1308 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1309 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1310 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1311 hcryp->pCrypInBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1312 hcryp->CrypInCount -= 16;
<> 144:ef7eb2e8f9f7 1313 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 1314 {
<> 144:ef7eb2e8f9f7 1315 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 1316 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 1317 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1318 }
<> 144:ef7eb2e8f9f7 1319 }
<> 144:ef7eb2e8f9f7 1320 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 1321 {
<> 144:ef7eb2e8f9f7 1322 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 1323 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 1324 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1325 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1326 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1327 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1328 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1329 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1330 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1331 hcryp->pCrypOutBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1332 hcryp->CrypOutCount -= 16;
<> 144:ef7eb2e8f9f7 1333 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 1334 {
<> 144:ef7eb2e8f9f7 1335 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1336 /* Process Locked */
<> 144:ef7eb2e8f9f7 1337 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1338 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1339 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1340 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 1341 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1342 }
<> 144:ef7eb2e8f9f7 1343 }
<> 144:ef7eb2e8f9f7 1344
<> 144:ef7eb2e8f9f7 1345 /* Return function status */
<> 144:ef7eb2e8f9f7 1346 return HAL_OK;
<> 144:ef7eb2e8f9f7 1347 }
<> 144:ef7eb2e8f9f7 1348
<> 144:ef7eb2e8f9f7 1349 /**
<> 144:ef7eb2e8f9f7 1350 * @brief Initializes the CRYP peripheral in AES CTR encryption mode using Interrupt.
<> 144:ef7eb2e8f9f7 1351 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1352 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1353 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1354 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
<> 144:ef7eb2e8f9f7 1355 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1356 * @retval HAL status
<> 144:ef7eb2e8f9f7 1357 */
<> 144:ef7eb2e8f9f7 1358 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 1359 {
<> 144:ef7eb2e8f9f7 1360 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1361 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1362
<> 144:ef7eb2e8f9f7 1363 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 1364 {
<> 144:ef7eb2e8f9f7 1365 /* Process Locked */
<> 144:ef7eb2e8f9f7 1366 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1367
<> 144:ef7eb2e8f9f7 1368 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 1369 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 1370 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 1371 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 1372
<> 144:ef7eb2e8f9f7 1373 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1374 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1375
<> 144:ef7eb2e8f9f7 1376 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1377 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1378 {
<> 144:ef7eb2e8f9f7 1379 /* Set the key */
<> 144:ef7eb2e8f9f7 1380 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1381
<> 144:ef7eb2e8f9f7 1382 /* Set the CRYP peripheral in AES CTR mode */
<> 144:ef7eb2e8f9f7 1383 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR);
<> 144:ef7eb2e8f9f7 1384
<> 144:ef7eb2e8f9f7 1385 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1386 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1387
<> 144:ef7eb2e8f9f7 1388 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1389 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1390
<> 144:ef7eb2e8f9f7 1391 /* Set the phase */
<> 144:ef7eb2e8f9f7 1392 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1393 }
<> 144:ef7eb2e8f9f7 1394 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 1395 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1396
<> 144:ef7eb2e8f9f7 1397 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1398 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1399
<> 144:ef7eb2e8f9f7 1400 /* Return function status */
<> 144:ef7eb2e8f9f7 1401 return HAL_OK;
<> 144:ef7eb2e8f9f7 1402 }
<> 144:ef7eb2e8f9f7 1403 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 1404 {
<> 144:ef7eb2e8f9f7 1405 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 1406 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 1407 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1408 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1409 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1410 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1411 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1412 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1413 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1414 hcryp->pCrypInBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1415 hcryp->CrypInCount -= 16;
<> 144:ef7eb2e8f9f7 1416 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 1417 {
<> 144:ef7eb2e8f9f7 1418 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 1419 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 1420 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1421 }
<> 144:ef7eb2e8f9f7 1422 }
<> 144:ef7eb2e8f9f7 1423 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 1424 {
<> 144:ef7eb2e8f9f7 1425 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 1426 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 1427 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1428 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1429 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1430 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1431 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1432 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1433 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1434 hcryp->pCrypOutBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1435 hcryp->CrypOutCount -= 16;
<> 144:ef7eb2e8f9f7 1436 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 1437 {
<> 144:ef7eb2e8f9f7 1438 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1439 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1440 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1441 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1442 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1443 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 1444 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1445 }
<> 144:ef7eb2e8f9f7 1446 }
<> 144:ef7eb2e8f9f7 1447
<> 144:ef7eb2e8f9f7 1448 /* Return function status */
<> 144:ef7eb2e8f9f7 1449 return HAL_OK;
<> 144:ef7eb2e8f9f7 1450 }
<> 144:ef7eb2e8f9f7 1451
<> 144:ef7eb2e8f9f7 1452
<> 144:ef7eb2e8f9f7 1453 /**
<> 144:ef7eb2e8f9f7 1454 * @brief Initializes the CRYP peripheral in AES ECB decryption mode using Interrupt.
<> 144:ef7eb2e8f9f7 1455 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1456 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1457 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1458 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 1459 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1460 * @retval HAL status
<> 144:ef7eb2e8f9f7 1461 */
<> 144:ef7eb2e8f9f7 1462 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 1463 {
<> 144:ef7eb2e8f9f7 1464 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 1465
<> 144:ef7eb2e8f9f7 1466 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1467 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1468
<> 144:ef7eb2e8f9f7 1469 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 1470 {
<> 144:ef7eb2e8f9f7 1471 /* Process Locked */
<> 144:ef7eb2e8f9f7 1472 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1473
<> 144:ef7eb2e8f9f7 1474 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 1475 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 1476 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 1477 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 1478
<> 144:ef7eb2e8f9f7 1479 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1480 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1481
<> 144:ef7eb2e8f9f7 1482 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1483 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1484 {
<> 144:ef7eb2e8f9f7 1485 /* Set the key */
<> 144:ef7eb2e8f9f7 1486 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1487
<> 144:ef7eb2e8f9f7 1488 /* Set the CRYP peripheral in AES Key mode */
<> 144:ef7eb2e8f9f7 1489 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1490 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1491 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1492
<> 144:ef7eb2e8f9f7 1493 /* Get tick */
<> 144:ef7eb2e8f9f7 1494 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 1495
<> 144:ef7eb2e8f9f7 1496 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
<> 144:ef7eb2e8f9f7 1497 {
<> 144:ef7eb2e8f9f7 1498 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 1499 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
<> 144:ef7eb2e8f9f7 1500 {
<> 144:ef7eb2e8f9f7 1501 /* Change state */
<> 144:ef7eb2e8f9f7 1502 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 1503
<> 144:ef7eb2e8f9f7 1504 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1505 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1506
<> 144:ef7eb2e8f9f7 1507 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 1508 }
<> 144:ef7eb2e8f9f7 1509 }
<> 144:ef7eb2e8f9f7 1510
<> 144:ef7eb2e8f9f7 1511 /* Reset the ALGOMODE bits*/
<> 144:ef7eb2e8f9f7 1512 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
<> 144:ef7eb2e8f9f7 1513
<> 144:ef7eb2e8f9f7 1514 /* Set the CRYP peripheral in AES ECB decryption mode */
<> 144:ef7eb2e8f9f7 1515 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1516
<> 144:ef7eb2e8f9f7 1517 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1518 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1519
<> 144:ef7eb2e8f9f7 1520 /* Set the phase */
<> 144:ef7eb2e8f9f7 1521 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1522 }
<> 144:ef7eb2e8f9f7 1523
<> 144:ef7eb2e8f9f7 1524 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 1525 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1526
<> 144:ef7eb2e8f9f7 1527 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1528 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1529
<> 144:ef7eb2e8f9f7 1530 /* Return function status */
<> 144:ef7eb2e8f9f7 1531 return HAL_OK;
<> 144:ef7eb2e8f9f7 1532 }
<> 144:ef7eb2e8f9f7 1533 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 1534 {
<> 144:ef7eb2e8f9f7 1535 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 1536 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 1537 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1538 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1539 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1540 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1541 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1542 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1543 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1544 hcryp->pCrypInBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1545 hcryp->CrypInCount -= 16;
<> 144:ef7eb2e8f9f7 1546 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 1547 {
<> 144:ef7eb2e8f9f7 1548 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 1549 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 1550 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1551 }
<> 144:ef7eb2e8f9f7 1552 }
<> 144:ef7eb2e8f9f7 1553 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 1554 {
<> 144:ef7eb2e8f9f7 1555 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 1556 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 1557 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1558 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1559 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1560 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1561 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1562 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1563 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1564 hcryp->pCrypOutBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1565 hcryp->CrypOutCount -= 16;
<> 144:ef7eb2e8f9f7 1566 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 1567 {
<> 144:ef7eb2e8f9f7 1568 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1569 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1570 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1571 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1572 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1573 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 1574 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1575 }
<> 144:ef7eb2e8f9f7 1576 }
<> 144:ef7eb2e8f9f7 1577
<> 144:ef7eb2e8f9f7 1578 /* Return function status */
<> 144:ef7eb2e8f9f7 1579 return HAL_OK;
<> 144:ef7eb2e8f9f7 1580 }
<> 144:ef7eb2e8f9f7 1581
<> 144:ef7eb2e8f9f7 1582 /**
<> 144:ef7eb2e8f9f7 1583 * @brief Initializes the CRYP peripheral in AES CBC decryption mode using IT.
<> 144:ef7eb2e8f9f7 1584 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1585 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1586 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1587 * @param Size: Length of the plaintext buffer, must be a multiple of 16
<> 144:ef7eb2e8f9f7 1588 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1589 * @retval HAL status
<> 144:ef7eb2e8f9f7 1590 */
<> 144:ef7eb2e8f9f7 1591 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 1592 {
<> 144:ef7eb2e8f9f7 1593
<> 144:ef7eb2e8f9f7 1594 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 1595 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1596 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1597
<> 144:ef7eb2e8f9f7 1598 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 1599 {
<> 144:ef7eb2e8f9f7 1600 /* Process Locked */
<> 144:ef7eb2e8f9f7 1601 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1602
<> 144:ef7eb2e8f9f7 1603 /* Get the buffer addresses and sizes */
<> 144:ef7eb2e8f9f7 1604 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 1605 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 1606 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 1607 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 1608
<> 144:ef7eb2e8f9f7 1609 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1610 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1611
<> 144:ef7eb2e8f9f7 1612 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1613 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1614 {
<> 144:ef7eb2e8f9f7 1615 /* Set the key */
<> 144:ef7eb2e8f9f7 1616 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1617
<> 144:ef7eb2e8f9f7 1618 /* Set the CRYP peripheral in AES Key mode */
<> 144:ef7eb2e8f9f7 1619 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1620
<> 144:ef7eb2e8f9f7 1621 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1622 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1623
<> 144:ef7eb2e8f9f7 1624 /* Get tick */
<> 144:ef7eb2e8f9f7 1625 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 1626
<> 144:ef7eb2e8f9f7 1627 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
<> 144:ef7eb2e8f9f7 1628 {
<> 144:ef7eb2e8f9f7 1629 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 1630 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
<> 144:ef7eb2e8f9f7 1631 {
<> 144:ef7eb2e8f9f7 1632 /* Change state */
<> 144:ef7eb2e8f9f7 1633 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 1634
<> 144:ef7eb2e8f9f7 1635 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1636 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1637
<> 144:ef7eb2e8f9f7 1638 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 1639 }
<> 144:ef7eb2e8f9f7 1640 }
<> 144:ef7eb2e8f9f7 1641
<> 144:ef7eb2e8f9f7 1642 /* Reset the ALGOMODE bits*/
<> 144:ef7eb2e8f9f7 1643 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
<> 144:ef7eb2e8f9f7 1644
<> 144:ef7eb2e8f9f7 1645 /* Set the CRYP peripheral in AES CBC decryption mode */
<> 144:ef7eb2e8f9f7 1646 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1647
<> 144:ef7eb2e8f9f7 1648 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1649 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1650
<> 144:ef7eb2e8f9f7 1651 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1652 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1653
<> 144:ef7eb2e8f9f7 1654 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1655 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1656
<> 144:ef7eb2e8f9f7 1657 /* Set the phase */
<> 144:ef7eb2e8f9f7 1658 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1659 }
<> 144:ef7eb2e8f9f7 1660
<> 144:ef7eb2e8f9f7 1661 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 1662 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1663
<> 144:ef7eb2e8f9f7 1664 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1665 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1666
<> 144:ef7eb2e8f9f7 1667 /* Return function status */
<> 144:ef7eb2e8f9f7 1668 return HAL_OK;
<> 144:ef7eb2e8f9f7 1669 }
<> 144:ef7eb2e8f9f7 1670 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 1671 {
<> 144:ef7eb2e8f9f7 1672 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 1673 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 1674 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1675 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1676 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1677 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1678 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1679 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1680 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1681 hcryp->pCrypInBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1682 hcryp->CrypInCount -= 16;
<> 144:ef7eb2e8f9f7 1683 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 1684 {
<> 144:ef7eb2e8f9f7 1685 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 1686 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 1687 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1688 }
<> 144:ef7eb2e8f9f7 1689 }
<> 144:ef7eb2e8f9f7 1690 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 1691 {
<> 144:ef7eb2e8f9f7 1692 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 1693 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 1694 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1695 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1696 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1697 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1698 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1699 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1700 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1701 hcryp->pCrypOutBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1702 hcryp->CrypOutCount -= 16;
<> 144:ef7eb2e8f9f7 1703 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 1704 {
<> 144:ef7eb2e8f9f7 1705 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1706 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1707 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1708 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1709 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1710 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 1711 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1712 }
<> 144:ef7eb2e8f9f7 1713 }
<> 144:ef7eb2e8f9f7 1714
<> 144:ef7eb2e8f9f7 1715 /* Return function status */
<> 144:ef7eb2e8f9f7 1716 return HAL_OK;
<> 144:ef7eb2e8f9f7 1717 }
<> 144:ef7eb2e8f9f7 1718
<> 144:ef7eb2e8f9f7 1719 /**
<> 144:ef7eb2e8f9f7 1720 * @brief Initializes the CRYP peripheral in AES CTR decryption mode using Interrupt.
<> 144:ef7eb2e8f9f7 1721 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1722 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1723 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1724 * @param Size: Length of the plaintext buffer, must be a multiple of 16
<> 144:ef7eb2e8f9f7 1725 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1726 * @retval HAL status
<> 144:ef7eb2e8f9f7 1727 */
<> 144:ef7eb2e8f9f7 1728 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 1729 {
<> 144:ef7eb2e8f9f7 1730 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1731 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1732
<> 144:ef7eb2e8f9f7 1733 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 1734 {
<> 144:ef7eb2e8f9f7 1735 /* Process Locked */
<> 144:ef7eb2e8f9f7 1736 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1737
<> 144:ef7eb2e8f9f7 1738 /* Get the buffer addresses and sizes */
<> 144:ef7eb2e8f9f7 1739 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 1740 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 1741 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 1742 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 1743
<> 144:ef7eb2e8f9f7 1744 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1745 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1746
<> 144:ef7eb2e8f9f7 1747 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1748 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1749 {
<> 144:ef7eb2e8f9f7 1750 /* Set the key */
<> 144:ef7eb2e8f9f7 1751 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1752
<> 144:ef7eb2e8f9f7 1753 /* Set the CRYP peripheral in AES CTR mode */
<> 144:ef7eb2e8f9f7 1754 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 1755
<> 144:ef7eb2e8f9f7 1756 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1757 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1758
<> 144:ef7eb2e8f9f7 1759 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1760 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1761
<> 144:ef7eb2e8f9f7 1762 /* Set the phase */
<> 144:ef7eb2e8f9f7 1763 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1764 }
<> 144:ef7eb2e8f9f7 1765
<> 144:ef7eb2e8f9f7 1766 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 1767 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1768
<> 144:ef7eb2e8f9f7 1769 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 1770 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 1771
<> 144:ef7eb2e8f9f7 1772 /* Return function status */
<> 144:ef7eb2e8f9f7 1773 return HAL_OK;
<> 144:ef7eb2e8f9f7 1774 }
<> 144:ef7eb2e8f9f7 1775 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 1776 {
<> 144:ef7eb2e8f9f7 1777 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 1778 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 1779 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1780 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1781 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1782 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1783 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1784 inputaddr+=4;
<> 144:ef7eb2e8f9f7 1785 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 1786 hcryp->pCrypInBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1787 hcryp->CrypInCount -= 16;
<> 144:ef7eb2e8f9f7 1788 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 1789 {
<> 144:ef7eb2e8f9f7 1790 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 1791 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 1792 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1793 }
<> 144:ef7eb2e8f9f7 1794 }
<> 144:ef7eb2e8f9f7 1795 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 1796 {
<> 144:ef7eb2e8f9f7 1797 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 1798 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 1799 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1800 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1801 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1802 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1803 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1804 outputaddr+=4;
<> 144:ef7eb2e8f9f7 1805 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 1806 hcryp->pCrypOutBuffPtr += 16;
<> 144:ef7eb2e8f9f7 1807 hcryp->CrypOutCount -= 16;
<> 144:ef7eb2e8f9f7 1808 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 1809 {
<> 144:ef7eb2e8f9f7 1810 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 1811 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1812 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1813 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1814 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 1815 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 1816 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 1817 }
<> 144:ef7eb2e8f9f7 1818 }
<> 144:ef7eb2e8f9f7 1819
<> 144:ef7eb2e8f9f7 1820 /* Return function status */
<> 144:ef7eb2e8f9f7 1821 return HAL_OK;
<> 144:ef7eb2e8f9f7 1822 }
<> 144:ef7eb2e8f9f7 1823
<> 144:ef7eb2e8f9f7 1824 /**
<> 144:ef7eb2e8f9f7 1825 * @brief Initializes the CRYP peripheral in AES ECB encryption mode using DMA.
<> 144:ef7eb2e8f9f7 1826 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1827 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1828 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1829 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
<> 144:ef7eb2e8f9f7 1830 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1831 * @retval HAL status
<> 144:ef7eb2e8f9f7 1832 */
<> 144:ef7eb2e8f9f7 1833 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 1834 {
<> 144:ef7eb2e8f9f7 1835 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1836 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1837
<> 144:ef7eb2e8f9f7 1838 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 1839 {
<> 144:ef7eb2e8f9f7 1840 /* Process Locked */
<> 144:ef7eb2e8f9f7 1841 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1842
<> 144:ef7eb2e8f9f7 1843 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 1844 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 1845
<> 144:ef7eb2e8f9f7 1846 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1847 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1848
<> 144:ef7eb2e8f9f7 1849 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1850 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1851 {
<> 144:ef7eb2e8f9f7 1852 /* Set the key */
<> 144:ef7eb2e8f9f7 1853 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1854
<> 144:ef7eb2e8f9f7 1855 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 1856 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB);
<> 144:ef7eb2e8f9f7 1857
<> 144:ef7eb2e8f9f7 1858 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1859 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1860
<> 144:ef7eb2e8f9f7 1861 /* Set the phase */
<> 144:ef7eb2e8f9f7 1862 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1863 }
<> 144:ef7eb2e8f9f7 1864 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 1865 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 1866
<> 144:ef7eb2e8f9f7 1867 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1868 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1869
<> 144:ef7eb2e8f9f7 1870 /* Return function status */
<> 144:ef7eb2e8f9f7 1871 return HAL_OK;
<> 144:ef7eb2e8f9f7 1872 }
<> 144:ef7eb2e8f9f7 1873 else
<> 144:ef7eb2e8f9f7 1874 {
<> 144:ef7eb2e8f9f7 1875 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 1876 }
<> 144:ef7eb2e8f9f7 1877 }
<> 144:ef7eb2e8f9f7 1878
<> 144:ef7eb2e8f9f7 1879 /**
<> 144:ef7eb2e8f9f7 1880 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using DMA.
<> 144:ef7eb2e8f9f7 1881 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1882 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1883 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1884 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 1885 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1886 * @retval HAL status
<> 144:ef7eb2e8f9f7 1887 */
<> 144:ef7eb2e8f9f7 1888 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 1889 {
<> 144:ef7eb2e8f9f7 1890 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1891 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1892
<> 144:ef7eb2e8f9f7 1893 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 1894 {
<> 144:ef7eb2e8f9f7 1895 /* Process Locked */
<> 144:ef7eb2e8f9f7 1896 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1897
<> 144:ef7eb2e8f9f7 1898 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 1899 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 1900
<> 144:ef7eb2e8f9f7 1901 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1902 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1903
<> 144:ef7eb2e8f9f7 1904 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1905 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1906 {
<> 144:ef7eb2e8f9f7 1907 /* Set the key */
<> 144:ef7eb2e8f9f7 1908 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1909
<> 144:ef7eb2e8f9f7 1910 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 1911 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC);
<> 144:ef7eb2e8f9f7 1912
<> 144:ef7eb2e8f9f7 1913 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1914 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1915
<> 144:ef7eb2e8f9f7 1916 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1917 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1918
<> 144:ef7eb2e8f9f7 1919 /* Set the phase */
<> 144:ef7eb2e8f9f7 1920 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1921 }
<> 144:ef7eb2e8f9f7 1922 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 1923 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 1924
<> 144:ef7eb2e8f9f7 1925 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1926 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1927
<> 144:ef7eb2e8f9f7 1928 /* Return function status */
<> 144:ef7eb2e8f9f7 1929 return HAL_OK;
<> 144:ef7eb2e8f9f7 1930 }
<> 144:ef7eb2e8f9f7 1931 else
<> 144:ef7eb2e8f9f7 1932 {
<> 144:ef7eb2e8f9f7 1933 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 1934 }
<> 144:ef7eb2e8f9f7 1935 }
<> 144:ef7eb2e8f9f7 1936
<> 144:ef7eb2e8f9f7 1937 /**
<> 144:ef7eb2e8f9f7 1938 * @brief Initializes the CRYP peripheral in AES CTR encryption mode using DMA.
<> 144:ef7eb2e8f9f7 1939 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1940 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 1941 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 1942 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
<> 144:ef7eb2e8f9f7 1943 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 1944 * @retval HAL status
<> 144:ef7eb2e8f9f7 1945 */
<> 144:ef7eb2e8f9f7 1946 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 1947 {
<> 144:ef7eb2e8f9f7 1948 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 1949 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 1950
<> 144:ef7eb2e8f9f7 1951 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 1952 {
<> 144:ef7eb2e8f9f7 1953 /* Process Locked */
<> 144:ef7eb2e8f9f7 1954 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 1955
<> 144:ef7eb2e8f9f7 1956 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 1957 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 1958
<> 144:ef7eb2e8f9f7 1959 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 1960 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1961
<> 144:ef7eb2e8f9f7 1962 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 1963 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 1964 {
<> 144:ef7eb2e8f9f7 1965 /* Set the key */
<> 144:ef7eb2e8f9f7 1966 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 1967
<> 144:ef7eb2e8f9f7 1968 /* Set the CRYP peripheral in AES ECB mode */
<> 144:ef7eb2e8f9f7 1969 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR);
<> 144:ef7eb2e8f9f7 1970
<> 144:ef7eb2e8f9f7 1971 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 1972 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 1973
<> 144:ef7eb2e8f9f7 1974 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 1975 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 1976
<> 144:ef7eb2e8f9f7 1977 /* Set the phase */
<> 144:ef7eb2e8f9f7 1978 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 1979 }
<> 144:ef7eb2e8f9f7 1980
<> 144:ef7eb2e8f9f7 1981 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 1982 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 1983
<> 144:ef7eb2e8f9f7 1984 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 1985 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 1986
<> 144:ef7eb2e8f9f7 1987 /* Return function status */
<> 144:ef7eb2e8f9f7 1988 return HAL_OK;
<> 144:ef7eb2e8f9f7 1989 }
<> 144:ef7eb2e8f9f7 1990 else
<> 144:ef7eb2e8f9f7 1991 {
<> 144:ef7eb2e8f9f7 1992 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 1993 }
<> 144:ef7eb2e8f9f7 1994 }
<> 144:ef7eb2e8f9f7 1995
<> 144:ef7eb2e8f9f7 1996 /**
<> 144:ef7eb2e8f9f7 1997 * @brief Initializes the CRYP peripheral in AES ECB decryption mode using DMA.
<> 144:ef7eb2e8f9f7 1998 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1999 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2000 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2001 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
<> 144:ef7eb2e8f9f7 2002 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2003 * @retval HAL status
<> 144:ef7eb2e8f9f7 2004 */
<> 144:ef7eb2e8f9f7 2005 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2006 {
<> 144:ef7eb2e8f9f7 2007 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 2008 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2009 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2010
<> 144:ef7eb2e8f9f7 2011 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2012 {
<> 144:ef7eb2e8f9f7 2013 /* Process Locked */
<> 144:ef7eb2e8f9f7 2014 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2015
<> 144:ef7eb2e8f9f7 2016 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2017 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2018
<> 144:ef7eb2e8f9f7 2019 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2020 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2021
<> 144:ef7eb2e8f9f7 2022 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 2023 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 2024 {
<> 144:ef7eb2e8f9f7 2025 /* Set the key */
<> 144:ef7eb2e8f9f7 2026 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 2027
<> 144:ef7eb2e8f9f7 2028 /* Set the CRYP peripheral in AES Key mode */
<> 144:ef7eb2e8f9f7 2029 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2030
<> 144:ef7eb2e8f9f7 2031 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2032 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2033
<> 144:ef7eb2e8f9f7 2034 /* Get tick */
<> 144:ef7eb2e8f9f7 2035 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 2036
<> 144:ef7eb2e8f9f7 2037 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
<> 144:ef7eb2e8f9f7 2038 {
<> 144:ef7eb2e8f9f7 2039 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 2040 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
<> 144:ef7eb2e8f9f7 2041 {
<> 144:ef7eb2e8f9f7 2042 /* Change state */
<> 144:ef7eb2e8f9f7 2043 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 2044
<> 144:ef7eb2e8f9f7 2045 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2046 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2047
<> 144:ef7eb2e8f9f7 2048 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2049 }
<> 144:ef7eb2e8f9f7 2050 }
<> 144:ef7eb2e8f9f7 2051
<> 144:ef7eb2e8f9f7 2052 /* Reset the ALGOMODE bits*/
<> 144:ef7eb2e8f9f7 2053 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
<> 144:ef7eb2e8f9f7 2054
<> 144:ef7eb2e8f9f7 2055 /* Set the CRYP peripheral in AES ECB decryption mode */
<> 144:ef7eb2e8f9f7 2056 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2057
<> 144:ef7eb2e8f9f7 2058 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 2059 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 2060
<> 144:ef7eb2e8f9f7 2061 /* Set the phase */
<> 144:ef7eb2e8f9f7 2062 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 2063 }
<> 144:ef7eb2e8f9f7 2064
<> 144:ef7eb2e8f9f7 2065 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2066 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2067
<> 144:ef7eb2e8f9f7 2068 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2069 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2070
<> 144:ef7eb2e8f9f7 2071 /* Return function status */
<> 144:ef7eb2e8f9f7 2072 return HAL_OK;
<> 144:ef7eb2e8f9f7 2073 }
<> 144:ef7eb2e8f9f7 2074 else
<> 144:ef7eb2e8f9f7 2075 {
<> 144:ef7eb2e8f9f7 2076 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2077 }
<> 144:ef7eb2e8f9f7 2078 }
<> 144:ef7eb2e8f9f7 2079
<> 144:ef7eb2e8f9f7 2080 /**
<> 144:ef7eb2e8f9f7 2081 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using DMA.
<> 144:ef7eb2e8f9f7 2082 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2083 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2084 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2085 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
<> 144:ef7eb2e8f9f7 2086 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2087 * @retval HAL status
<> 144:ef7eb2e8f9f7 2088 */
<> 144:ef7eb2e8f9f7 2089 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2090 {
<> 144:ef7eb2e8f9f7 2091 uint32_t tickstart = 0;
<> 144:ef7eb2e8f9f7 2092 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2093 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2094
<> 144:ef7eb2e8f9f7 2095 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2096 {
<> 144:ef7eb2e8f9f7 2097 /* Process Locked */
<> 144:ef7eb2e8f9f7 2098 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2099
<> 144:ef7eb2e8f9f7 2100 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2101 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2102
<> 144:ef7eb2e8f9f7 2103 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2104 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2105
<> 144:ef7eb2e8f9f7 2106 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 2107 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 2108 {
<> 144:ef7eb2e8f9f7 2109 /* Set the key */
<> 144:ef7eb2e8f9f7 2110 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 2111
<> 144:ef7eb2e8f9f7 2112 /* Set the CRYP peripheral in AES Key mode */
<> 144:ef7eb2e8f9f7 2113 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2114
<> 144:ef7eb2e8f9f7 2115 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2116 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2117
<> 144:ef7eb2e8f9f7 2118 /* Get tick */
<> 144:ef7eb2e8f9f7 2119 tickstart = HAL_GetTick();
<> 144:ef7eb2e8f9f7 2120
<> 144:ef7eb2e8f9f7 2121 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
<> 144:ef7eb2e8f9f7 2122 {
<> 144:ef7eb2e8f9f7 2123 /* Check for the Timeout */
<> 144:ef7eb2e8f9f7 2124 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
<> 144:ef7eb2e8f9f7 2125 {
<> 144:ef7eb2e8f9f7 2126 /* Change state */
<> 144:ef7eb2e8f9f7 2127 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
<> 144:ef7eb2e8f9f7 2128
<> 144:ef7eb2e8f9f7 2129 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2130 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2131
<> 144:ef7eb2e8f9f7 2132 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2133 }
<> 144:ef7eb2e8f9f7 2134 }
<> 144:ef7eb2e8f9f7 2135
<> 144:ef7eb2e8f9f7 2136 /* Reset the ALGOMODE bits*/
<> 144:ef7eb2e8f9f7 2137 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
<> 144:ef7eb2e8f9f7 2138
<> 144:ef7eb2e8f9f7 2139 /* Set the CRYP peripheral in AES CBC decryption mode */
<> 144:ef7eb2e8f9f7 2140 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2141
<> 144:ef7eb2e8f9f7 2142 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 2143 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 2144
<> 144:ef7eb2e8f9f7 2145 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 2146 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 2147
<> 144:ef7eb2e8f9f7 2148 /* Set the phase */
<> 144:ef7eb2e8f9f7 2149 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 2150 }
<> 144:ef7eb2e8f9f7 2151
<> 144:ef7eb2e8f9f7 2152 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2153 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2154
<> 144:ef7eb2e8f9f7 2155 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2156 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2157
<> 144:ef7eb2e8f9f7 2158 /* Return function status */
<> 144:ef7eb2e8f9f7 2159 return HAL_OK;
<> 144:ef7eb2e8f9f7 2160 }
<> 144:ef7eb2e8f9f7 2161 else
<> 144:ef7eb2e8f9f7 2162 {
<> 144:ef7eb2e8f9f7 2163 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2164 }
<> 144:ef7eb2e8f9f7 2165 }
<> 144:ef7eb2e8f9f7 2166
<> 144:ef7eb2e8f9f7 2167 /**
<> 144:ef7eb2e8f9f7 2168 * @brief Initializes the CRYP peripheral in AES CTR decryption mode using DMA.
<> 144:ef7eb2e8f9f7 2169 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2170 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2171 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2172 * @param Size: Length of the plaintext buffer, must be a multiple of 16
<> 144:ef7eb2e8f9f7 2173 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2174 * @retval HAL status
<> 144:ef7eb2e8f9f7 2175 */
<> 144:ef7eb2e8f9f7 2176 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2177 {
<> 144:ef7eb2e8f9f7 2178 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2179 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2180
<> 144:ef7eb2e8f9f7 2181 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2182 {
<> 144:ef7eb2e8f9f7 2183 /* Process Locked */
<> 144:ef7eb2e8f9f7 2184 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2185
<> 144:ef7eb2e8f9f7 2186 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2187 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2188
<> 144:ef7eb2e8f9f7 2189 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2190 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2191
<> 144:ef7eb2e8f9f7 2192 /* Check if initialization phase has already been performed */
<> 144:ef7eb2e8f9f7 2193 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
<> 144:ef7eb2e8f9f7 2194 {
<> 144:ef7eb2e8f9f7 2195 /* Set the key */
<> 144:ef7eb2e8f9f7 2196 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
<> 144:ef7eb2e8f9f7 2197
<> 144:ef7eb2e8f9f7 2198 /* Set the CRYP peripheral in AES CTR mode */
<> 144:ef7eb2e8f9f7 2199 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR | CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2200
<> 144:ef7eb2e8f9f7 2201 /* Set the Initialization Vector */
<> 144:ef7eb2e8f9f7 2202 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
<> 144:ef7eb2e8f9f7 2203
<> 144:ef7eb2e8f9f7 2204 /* Flush FIFO */
<> 144:ef7eb2e8f9f7 2205 __HAL_CRYP_FIFO_FLUSH(hcryp);
<> 144:ef7eb2e8f9f7 2206
<> 144:ef7eb2e8f9f7 2207 /* Set the phase */
<> 144:ef7eb2e8f9f7 2208 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
<> 144:ef7eb2e8f9f7 2209 }
<> 144:ef7eb2e8f9f7 2210
<> 144:ef7eb2e8f9f7 2211 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2212 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2213
<> 144:ef7eb2e8f9f7 2214 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2215 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2216
<> 144:ef7eb2e8f9f7 2217 /* Return function status */
<> 144:ef7eb2e8f9f7 2218 return HAL_OK;
<> 144:ef7eb2e8f9f7 2219 }
<> 144:ef7eb2e8f9f7 2220 else
<> 144:ef7eb2e8f9f7 2221 {
<> 144:ef7eb2e8f9f7 2222 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2223 }
<> 144:ef7eb2e8f9f7 2224 }
<> 144:ef7eb2e8f9f7 2225
<> 144:ef7eb2e8f9f7 2226
<> 144:ef7eb2e8f9f7 2227 /**
<> 144:ef7eb2e8f9f7 2228 * @}
<> 144:ef7eb2e8f9f7 2229 */
<> 144:ef7eb2e8f9f7 2230
<> 144:ef7eb2e8f9f7 2231 /** @defgroup CRYP_Exported_Functions_Group3 DES processing functions
<> 144:ef7eb2e8f9f7 2232 * @brief processing functions.
<> 144:ef7eb2e8f9f7 2233 *
<> 144:ef7eb2e8f9f7 2234 @verbatim
<> 144:ef7eb2e8f9f7 2235 ==============================================================================
<> 144:ef7eb2e8f9f7 2236 ##### DES processing functions #####
<> 144:ef7eb2e8f9f7 2237 ==============================================================================
<> 144:ef7eb2e8f9f7 2238 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 2239 (+) Encrypt plaintext using DES using ECB or CBC chaining modes
<> 144:ef7eb2e8f9f7 2240 (+) Decrypt cyphertext using ECB or CBC chaining modes
<> 144:ef7eb2e8f9f7 2241 [..] Three processing functions are available:
<> 144:ef7eb2e8f9f7 2242 (+) Polling mode
<> 144:ef7eb2e8f9f7 2243 (+) Interrupt mode
<> 144:ef7eb2e8f9f7 2244 (+) DMA mode
<> 144:ef7eb2e8f9f7 2245
<> 144:ef7eb2e8f9f7 2246 @endverbatim
<> 144:ef7eb2e8f9f7 2247 * @{
<> 144:ef7eb2e8f9f7 2248 */
<> 144:ef7eb2e8f9f7 2249
<> 144:ef7eb2e8f9f7 2250 /**
<> 144:ef7eb2e8f9f7 2251 * @brief Initializes the CRYP peripheral in DES ECB encryption mode.
<> 144:ef7eb2e8f9f7 2252 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2253 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2254 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2255 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2256 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2257 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 2258 * @retval HAL status
<> 144:ef7eb2e8f9f7 2259 */
<> 144:ef7eb2e8f9f7 2260 HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 2261 {
<> 144:ef7eb2e8f9f7 2262 /* Process Locked */
<> 144:ef7eb2e8f9f7 2263 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2264
<> 144:ef7eb2e8f9f7 2265 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2266 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2267
<> 144:ef7eb2e8f9f7 2268 /* Set CRYP peripheral in DES ECB encryption mode */
<> 144:ef7eb2e8f9f7 2269 CRYP_SetDESECBMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2270
<> 144:ef7eb2e8f9f7 2271 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2272 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2273
<> 144:ef7eb2e8f9f7 2274 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 2275 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 2276 {
<> 144:ef7eb2e8f9f7 2277 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2278 }
<> 144:ef7eb2e8f9f7 2279
<> 144:ef7eb2e8f9f7 2280 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2281 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2282
<> 144:ef7eb2e8f9f7 2283 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2284 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2285
<> 144:ef7eb2e8f9f7 2286 /* Return function status */
<> 144:ef7eb2e8f9f7 2287 return HAL_OK;
<> 144:ef7eb2e8f9f7 2288 }
<> 144:ef7eb2e8f9f7 2289
<> 144:ef7eb2e8f9f7 2290 /**
<> 144:ef7eb2e8f9f7 2291 * @brief Initializes the CRYP peripheral in DES ECB decryption mode.
<> 144:ef7eb2e8f9f7 2292 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2293 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2294 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2295 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2296 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2297 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 2298 * @retval HAL status
<> 144:ef7eb2e8f9f7 2299 */
<> 144:ef7eb2e8f9f7 2300 HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 2301 {
<> 144:ef7eb2e8f9f7 2302 /* Process Locked */
<> 144:ef7eb2e8f9f7 2303 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2304
<> 144:ef7eb2e8f9f7 2305 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2306 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2307
<> 144:ef7eb2e8f9f7 2308 /* Set CRYP peripheral in DES ECB decryption mode */
<> 144:ef7eb2e8f9f7 2309 CRYP_SetDESECBMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2310
<> 144:ef7eb2e8f9f7 2311 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2312 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2313
<> 144:ef7eb2e8f9f7 2314 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 2315 if(CRYP_ProcessData2Words(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 2316 {
<> 144:ef7eb2e8f9f7 2317 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2318 }
<> 144:ef7eb2e8f9f7 2319
<> 144:ef7eb2e8f9f7 2320 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2321 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2322
<> 144:ef7eb2e8f9f7 2323 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2324 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2325
<> 144:ef7eb2e8f9f7 2326 /* Return function status */
<> 144:ef7eb2e8f9f7 2327 return HAL_OK;
<> 144:ef7eb2e8f9f7 2328 }
<> 144:ef7eb2e8f9f7 2329
<> 144:ef7eb2e8f9f7 2330 /**
<> 144:ef7eb2e8f9f7 2331 * @brief Initializes the CRYP peripheral in DES CBC encryption mode.
<> 144:ef7eb2e8f9f7 2332 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2333 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2334 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2335 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2336 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2337 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 2338 * @retval HAL status
<> 144:ef7eb2e8f9f7 2339 */
<> 144:ef7eb2e8f9f7 2340 HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 2341 {
<> 144:ef7eb2e8f9f7 2342 /* Process Locked */
<> 144:ef7eb2e8f9f7 2343 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2344
<> 144:ef7eb2e8f9f7 2345 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2346 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2347
<> 144:ef7eb2e8f9f7 2348 /* Set CRYP peripheral in DES CBC encryption mode */
<> 144:ef7eb2e8f9f7 2349 CRYP_SetDESCBCMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2350
<> 144:ef7eb2e8f9f7 2351 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2352 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2353
<> 144:ef7eb2e8f9f7 2354 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 2355 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 2356 {
<> 144:ef7eb2e8f9f7 2357 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2358 }
<> 144:ef7eb2e8f9f7 2359
<> 144:ef7eb2e8f9f7 2360 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2361 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2362
<> 144:ef7eb2e8f9f7 2363 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2364 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2365
<> 144:ef7eb2e8f9f7 2366 /* Return function status */
<> 144:ef7eb2e8f9f7 2367 return HAL_OK;
<> 144:ef7eb2e8f9f7 2368 }
<> 144:ef7eb2e8f9f7 2369
<> 144:ef7eb2e8f9f7 2370 /**
<> 144:ef7eb2e8f9f7 2371 * @brief Initializes the CRYP peripheral in DES ECB decryption mode.
<> 144:ef7eb2e8f9f7 2372 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2373 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2374 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2375 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2376 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2377 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 2378 * @retval HAL status
<> 144:ef7eb2e8f9f7 2379 */
<> 144:ef7eb2e8f9f7 2380 HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 2381 {
<> 144:ef7eb2e8f9f7 2382 /* Process Locked */
<> 144:ef7eb2e8f9f7 2383 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2384
<> 144:ef7eb2e8f9f7 2385 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2386 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2387
<> 144:ef7eb2e8f9f7 2388 /* Set CRYP peripheral in DES CBC decryption mode */
<> 144:ef7eb2e8f9f7 2389 CRYP_SetDESCBCMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2390
<> 144:ef7eb2e8f9f7 2391 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2392 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2393
<> 144:ef7eb2e8f9f7 2394 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 2395 if(CRYP_ProcessData2Words(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 2396 {
<> 144:ef7eb2e8f9f7 2397 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2398 }
<> 144:ef7eb2e8f9f7 2399
<> 144:ef7eb2e8f9f7 2400 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2401 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2402
<> 144:ef7eb2e8f9f7 2403 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2404 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2405
<> 144:ef7eb2e8f9f7 2406 /* Return function status */
<> 144:ef7eb2e8f9f7 2407 return HAL_OK;
<> 144:ef7eb2e8f9f7 2408 }
<> 144:ef7eb2e8f9f7 2409
<> 144:ef7eb2e8f9f7 2410 /**
<> 144:ef7eb2e8f9f7 2411 * @brief Initializes the CRYP peripheral in DES ECB encryption mode using IT.
<> 144:ef7eb2e8f9f7 2412 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2413 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2414 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2415 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2416 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2417 * @retval HAL status
<> 144:ef7eb2e8f9f7 2418 */
<> 144:ef7eb2e8f9f7 2419 HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 2420 {
<> 144:ef7eb2e8f9f7 2421 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2422 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2423
<> 144:ef7eb2e8f9f7 2424 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 2425 {
<> 144:ef7eb2e8f9f7 2426 /* Process Locked */
<> 144:ef7eb2e8f9f7 2427 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2428
<> 144:ef7eb2e8f9f7 2429 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 2430 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 2431 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 2432 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 2433
<> 144:ef7eb2e8f9f7 2434 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2435 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2436
<> 144:ef7eb2e8f9f7 2437 /* Set CRYP peripheral in DES ECB encryption mode */
<> 144:ef7eb2e8f9f7 2438 CRYP_SetDESECBMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2439
<> 144:ef7eb2e8f9f7 2440 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 2441 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2442
<> 144:ef7eb2e8f9f7 2443 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2444 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2445
<> 144:ef7eb2e8f9f7 2446 /* Return function status */
<> 144:ef7eb2e8f9f7 2447 return HAL_OK;
<> 144:ef7eb2e8f9f7 2448 }
<> 144:ef7eb2e8f9f7 2449 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 2450 {
<> 144:ef7eb2e8f9f7 2451 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 2452 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 2453 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2454 inputaddr+=4;
<> 144:ef7eb2e8f9f7 2455 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2456
<> 144:ef7eb2e8f9f7 2457 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2458 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 2459 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 2460 {
<> 144:ef7eb2e8f9f7 2461 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 2462 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 2463 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2464 }
<> 144:ef7eb2e8f9f7 2465 }
<> 144:ef7eb2e8f9f7 2466 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 2467 {
<> 144:ef7eb2e8f9f7 2468 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 2469 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 2470 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2471 outputaddr+=4;
<> 144:ef7eb2e8f9f7 2472 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2473
<> 144:ef7eb2e8f9f7 2474 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2475 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 2476 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 2477 {
<> 144:ef7eb2e8f9f7 2478 /* Disable IT */
<> 144:ef7eb2e8f9f7 2479 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2480 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 2481 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 2482 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2483 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2484 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2485 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2486 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 2487 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2488 }
<> 144:ef7eb2e8f9f7 2489 }
<> 144:ef7eb2e8f9f7 2490
<> 144:ef7eb2e8f9f7 2491 /* Return function status */
<> 144:ef7eb2e8f9f7 2492 return HAL_OK;
<> 144:ef7eb2e8f9f7 2493 }
<> 144:ef7eb2e8f9f7 2494
<> 144:ef7eb2e8f9f7 2495 /**
<> 144:ef7eb2e8f9f7 2496 * @brief Initializes the CRYP peripheral in DES CBC encryption mode using interrupt.
<> 144:ef7eb2e8f9f7 2497 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2498 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2499 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2500 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2501 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2502 * @retval HAL status
<> 144:ef7eb2e8f9f7 2503 */
<> 144:ef7eb2e8f9f7 2504 HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 2505 {
<> 144:ef7eb2e8f9f7 2506 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2507 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2508
<> 144:ef7eb2e8f9f7 2509 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 2510 {
<> 144:ef7eb2e8f9f7 2511 /* Process Locked */
<> 144:ef7eb2e8f9f7 2512 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2513
<> 144:ef7eb2e8f9f7 2514 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 2515 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 2516 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 2517 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 2518
<> 144:ef7eb2e8f9f7 2519 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2520 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2521
<> 144:ef7eb2e8f9f7 2522 /* Set CRYP peripheral in DES CBC encryption mode */
<> 144:ef7eb2e8f9f7 2523 CRYP_SetDESCBCMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2524
<> 144:ef7eb2e8f9f7 2525 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 2526 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2527
<> 144:ef7eb2e8f9f7 2528 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2529 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2530
<> 144:ef7eb2e8f9f7 2531 /* Return function status */
<> 144:ef7eb2e8f9f7 2532 return HAL_OK;
<> 144:ef7eb2e8f9f7 2533 }
<> 144:ef7eb2e8f9f7 2534
<> 144:ef7eb2e8f9f7 2535 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 2536 {
<> 144:ef7eb2e8f9f7 2537 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 2538 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 2539 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2540 inputaddr+=4;
<> 144:ef7eb2e8f9f7 2541 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2542
<> 144:ef7eb2e8f9f7 2543 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2544 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 2545 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 2546 {
<> 144:ef7eb2e8f9f7 2547 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 2548 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 2549 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2550 }
<> 144:ef7eb2e8f9f7 2551 }
<> 144:ef7eb2e8f9f7 2552 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 2553 {
<> 144:ef7eb2e8f9f7 2554 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 2555 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 2556 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2557 outputaddr+=4;
<> 144:ef7eb2e8f9f7 2558 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2559
<> 144:ef7eb2e8f9f7 2560 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2561 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 2562 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 2563 {
<> 144:ef7eb2e8f9f7 2564 /* Disable IT */
<> 144:ef7eb2e8f9f7 2565 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2566 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 2567 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 2568 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2569 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2570 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2571 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2572 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 2573 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2574 }
<> 144:ef7eb2e8f9f7 2575 }
<> 144:ef7eb2e8f9f7 2576
<> 144:ef7eb2e8f9f7 2577 /* Return function status */
<> 144:ef7eb2e8f9f7 2578 return HAL_OK;
<> 144:ef7eb2e8f9f7 2579 }
<> 144:ef7eb2e8f9f7 2580
<> 144:ef7eb2e8f9f7 2581 /**
<> 144:ef7eb2e8f9f7 2582 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using IT.
<> 144:ef7eb2e8f9f7 2583 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2584 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2585 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2586 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2587 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2588 * @retval HAL status
<> 144:ef7eb2e8f9f7 2589 */
<> 144:ef7eb2e8f9f7 2590 HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2591 {
<> 144:ef7eb2e8f9f7 2592 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2593 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2594
<> 144:ef7eb2e8f9f7 2595 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 2596 {
<> 144:ef7eb2e8f9f7 2597 /* Process Locked */
<> 144:ef7eb2e8f9f7 2598 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2599
<> 144:ef7eb2e8f9f7 2600 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 2601 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 2602 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 2603 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 2604
<> 144:ef7eb2e8f9f7 2605 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2606 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2607
<> 144:ef7eb2e8f9f7 2608 /* Set CRYP peripheral in DES ECB decryption mode */
<> 144:ef7eb2e8f9f7 2609 CRYP_SetDESECBMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2610
<> 144:ef7eb2e8f9f7 2611 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 2612 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2613
<> 144:ef7eb2e8f9f7 2614 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2615 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2616
<> 144:ef7eb2e8f9f7 2617 /* Return function status */
<> 144:ef7eb2e8f9f7 2618 return HAL_OK;
<> 144:ef7eb2e8f9f7 2619 }
<> 144:ef7eb2e8f9f7 2620 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 2621 {
<> 144:ef7eb2e8f9f7 2622 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 2623 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 2624 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2625 inputaddr+=4;
<> 144:ef7eb2e8f9f7 2626 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2627
<> 144:ef7eb2e8f9f7 2628 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2629 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 2630 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 2631 {
<> 144:ef7eb2e8f9f7 2632 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 2633 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 2634 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2635 }
<> 144:ef7eb2e8f9f7 2636 }
<> 144:ef7eb2e8f9f7 2637 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 2638 {
<> 144:ef7eb2e8f9f7 2639 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 2640 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 2641 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2642 outputaddr+=4;
<> 144:ef7eb2e8f9f7 2643 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2644
<> 144:ef7eb2e8f9f7 2645 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2646 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 2647 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 2648 {
<> 144:ef7eb2e8f9f7 2649 /* Disable IT */
<> 144:ef7eb2e8f9f7 2650 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2651 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 2652 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 2653 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2654 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2655 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2656 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2657 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 2658 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2659 }
<> 144:ef7eb2e8f9f7 2660 }
<> 144:ef7eb2e8f9f7 2661
<> 144:ef7eb2e8f9f7 2662 /* Return function status */
<> 144:ef7eb2e8f9f7 2663 return HAL_OK;
<> 144:ef7eb2e8f9f7 2664 }
<> 144:ef7eb2e8f9f7 2665
<> 144:ef7eb2e8f9f7 2666 /**
<> 144:ef7eb2e8f9f7 2667 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using interrupt.
<> 144:ef7eb2e8f9f7 2668 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2669 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2670 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2671 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2672 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2673 * @retval HAL status
<> 144:ef7eb2e8f9f7 2674 */
<> 144:ef7eb2e8f9f7 2675 HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2676 {
<> 144:ef7eb2e8f9f7 2677 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2678 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2679
<> 144:ef7eb2e8f9f7 2680 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 2681 {
<> 144:ef7eb2e8f9f7 2682 /* Process Locked */
<> 144:ef7eb2e8f9f7 2683 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2684
<> 144:ef7eb2e8f9f7 2685 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 2686 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 2687 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 2688 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 2689
<> 144:ef7eb2e8f9f7 2690 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2691 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2692
<> 144:ef7eb2e8f9f7 2693 /* Set CRYP peripheral in DES CBC decryption mode */
<> 144:ef7eb2e8f9f7 2694 CRYP_SetDESCBCMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2695
<> 144:ef7eb2e8f9f7 2696 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 2697 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2698
<> 144:ef7eb2e8f9f7 2699 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2700 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2701
<> 144:ef7eb2e8f9f7 2702 /* Return function status */
<> 144:ef7eb2e8f9f7 2703 return HAL_OK;
<> 144:ef7eb2e8f9f7 2704 }
<> 144:ef7eb2e8f9f7 2705 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 2706 {
<> 144:ef7eb2e8f9f7 2707 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 2708 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 2709 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2710 inputaddr+=4;
<> 144:ef7eb2e8f9f7 2711 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 2712
<> 144:ef7eb2e8f9f7 2713 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2714 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 2715 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 2716 {
<> 144:ef7eb2e8f9f7 2717 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 2718 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 2719 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2720 }
<> 144:ef7eb2e8f9f7 2721 }
<> 144:ef7eb2e8f9f7 2722 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 2723 {
<> 144:ef7eb2e8f9f7 2724 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 2725 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 2726 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2727 outputaddr+=4;
<> 144:ef7eb2e8f9f7 2728 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 2729
<> 144:ef7eb2e8f9f7 2730 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 2731 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 2732 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 2733 {
<> 144:ef7eb2e8f9f7 2734 /* Disable IT */
<> 144:ef7eb2e8f9f7 2735 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 2736 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 2737 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 2738 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2739 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2740 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2741 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2742 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 2743 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 2744 }
<> 144:ef7eb2e8f9f7 2745 }
<> 144:ef7eb2e8f9f7 2746
<> 144:ef7eb2e8f9f7 2747 /* Return function status */
<> 144:ef7eb2e8f9f7 2748 return HAL_OK;
<> 144:ef7eb2e8f9f7 2749 }
<> 144:ef7eb2e8f9f7 2750
<> 144:ef7eb2e8f9f7 2751 /**
<> 144:ef7eb2e8f9f7 2752 * @brief Initializes the CRYP peripheral in DES ECB encryption mode using DMA.
<> 144:ef7eb2e8f9f7 2753 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2754 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2755 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2756 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2757 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2758 * @retval HAL status
<> 144:ef7eb2e8f9f7 2759 */
<> 144:ef7eb2e8f9f7 2760 HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 2761 {
<> 144:ef7eb2e8f9f7 2762 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2763 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2764
<> 144:ef7eb2e8f9f7 2765 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2766 {
<> 144:ef7eb2e8f9f7 2767 /* Process Locked */
<> 144:ef7eb2e8f9f7 2768 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2769
<> 144:ef7eb2e8f9f7 2770 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2771 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2772
<> 144:ef7eb2e8f9f7 2773 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2774 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2775
<> 144:ef7eb2e8f9f7 2776 /* Set CRYP peripheral in DES ECB encryption mode */
<> 144:ef7eb2e8f9f7 2777 CRYP_SetDESECBMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2778
<> 144:ef7eb2e8f9f7 2779 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2780 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2781
<> 144:ef7eb2e8f9f7 2782 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2783 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2784
<> 144:ef7eb2e8f9f7 2785 /* Return function status */
<> 144:ef7eb2e8f9f7 2786 return HAL_OK;
<> 144:ef7eb2e8f9f7 2787 }
<> 144:ef7eb2e8f9f7 2788 else
<> 144:ef7eb2e8f9f7 2789 {
<> 144:ef7eb2e8f9f7 2790 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2791 }
<> 144:ef7eb2e8f9f7 2792 }
<> 144:ef7eb2e8f9f7 2793
<> 144:ef7eb2e8f9f7 2794 /**
<> 144:ef7eb2e8f9f7 2795 * @brief Initializes the CRYP peripheral in DES CBC encryption mode using DMA.
<> 144:ef7eb2e8f9f7 2796 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2797 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2798 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2799 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2800 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2801 * @retval HAL status
<> 144:ef7eb2e8f9f7 2802 */
<> 144:ef7eb2e8f9f7 2803 HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 2804 {
<> 144:ef7eb2e8f9f7 2805 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2806 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2807
<> 144:ef7eb2e8f9f7 2808 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2809 {
<> 144:ef7eb2e8f9f7 2810 /* Process Locked */
<> 144:ef7eb2e8f9f7 2811 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2812
<> 144:ef7eb2e8f9f7 2813 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2814 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2815
<> 144:ef7eb2e8f9f7 2816 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2817 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2818
<> 144:ef7eb2e8f9f7 2819 /* Set CRYP peripheral in DES CBC encryption mode */
<> 144:ef7eb2e8f9f7 2820 CRYP_SetDESCBCMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2821
<> 144:ef7eb2e8f9f7 2822 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2823 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2824
<> 144:ef7eb2e8f9f7 2825 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2826 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2827
<> 144:ef7eb2e8f9f7 2828 /* Return function status */
<> 144:ef7eb2e8f9f7 2829 return HAL_OK;
<> 144:ef7eb2e8f9f7 2830 }
<> 144:ef7eb2e8f9f7 2831 else
<> 144:ef7eb2e8f9f7 2832 {
<> 144:ef7eb2e8f9f7 2833 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2834 }
<> 144:ef7eb2e8f9f7 2835 }
<> 144:ef7eb2e8f9f7 2836
<> 144:ef7eb2e8f9f7 2837 /**
<> 144:ef7eb2e8f9f7 2838 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using DMA.
<> 144:ef7eb2e8f9f7 2839 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2840 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2841 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2842 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2843 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2844 * @retval HAL status
<> 144:ef7eb2e8f9f7 2845 */
<> 144:ef7eb2e8f9f7 2846 HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2847 {
<> 144:ef7eb2e8f9f7 2848 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2849 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2850
<> 144:ef7eb2e8f9f7 2851 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2852 {
<> 144:ef7eb2e8f9f7 2853 /* Process Locked */
<> 144:ef7eb2e8f9f7 2854 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2855
<> 144:ef7eb2e8f9f7 2856 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2857 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2858
<> 144:ef7eb2e8f9f7 2859 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2860 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2861
<> 144:ef7eb2e8f9f7 2862 /* Set CRYP peripheral in DES ECB decryption mode */
<> 144:ef7eb2e8f9f7 2863 CRYP_SetDESECBMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2864
<> 144:ef7eb2e8f9f7 2865 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2866 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2867
<> 144:ef7eb2e8f9f7 2868 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2869 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2870
<> 144:ef7eb2e8f9f7 2871 /* Return function status */
<> 144:ef7eb2e8f9f7 2872 return HAL_OK;
<> 144:ef7eb2e8f9f7 2873 }
<> 144:ef7eb2e8f9f7 2874 else
<> 144:ef7eb2e8f9f7 2875 {
<> 144:ef7eb2e8f9f7 2876 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2877 }
<> 144:ef7eb2e8f9f7 2878 }
<> 144:ef7eb2e8f9f7 2879
<> 144:ef7eb2e8f9f7 2880 /**
<> 144:ef7eb2e8f9f7 2881 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using DMA.
<> 144:ef7eb2e8f9f7 2882 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2883 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2884 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2885 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2886 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2887 * @retval HAL status
<> 144:ef7eb2e8f9f7 2888 */
<> 144:ef7eb2e8f9f7 2889 HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 2890 {
<> 144:ef7eb2e8f9f7 2891 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 2892 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 2893
<> 144:ef7eb2e8f9f7 2894 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 2895 {
<> 144:ef7eb2e8f9f7 2896 /* Process Locked */
<> 144:ef7eb2e8f9f7 2897 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2898
<> 144:ef7eb2e8f9f7 2899 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 2900 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 2901
<> 144:ef7eb2e8f9f7 2902 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2903 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2904
<> 144:ef7eb2e8f9f7 2905 /* Set CRYP peripheral in DES CBC decryption mode */
<> 144:ef7eb2e8f9f7 2906 CRYP_SetDESCBCMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 2907
<> 144:ef7eb2e8f9f7 2908 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 2909 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 2910
<> 144:ef7eb2e8f9f7 2911 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2912 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2913
<> 144:ef7eb2e8f9f7 2914 /* Return function status */
<> 144:ef7eb2e8f9f7 2915 return HAL_OK;
<> 144:ef7eb2e8f9f7 2916 }
<> 144:ef7eb2e8f9f7 2917 else
<> 144:ef7eb2e8f9f7 2918 {
<> 144:ef7eb2e8f9f7 2919 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 2920 }
<> 144:ef7eb2e8f9f7 2921 }
<> 144:ef7eb2e8f9f7 2922
<> 144:ef7eb2e8f9f7 2923 /**
<> 144:ef7eb2e8f9f7 2924 * @}
<> 144:ef7eb2e8f9f7 2925 */
<> 144:ef7eb2e8f9f7 2926
<> 144:ef7eb2e8f9f7 2927 /** @defgroup CRYP_Exported_Functions_Group4 TDES processing functions
<> 144:ef7eb2e8f9f7 2928 * @brief processing functions.
<> 144:ef7eb2e8f9f7 2929 *
<> 144:ef7eb2e8f9f7 2930 @verbatim
<> 144:ef7eb2e8f9f7 2931 ==============================================================================
<> 144:ef7eb2e8f9f7 2932 ##### TDES processing functions #####
<> 144:ef7eb2e8f9f7 2933 ==============================================================================
<> 144:ef7eb2e8f9f7 2934 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 2935 (+) Encrypt plaintext using TDES based on ECB or CBC chaining modes
<> 144:ef7eb2e8f9f7 2936 (+) Decrypt cyphertext using TDES based on ECB or CBC chaining modes
<> 144:ef7eb2e8f9f7 2937 [..] Three processing functions are available:
<> 144:ef7eb2e8f9f7 2938 (+) Polling mode
<> 144:ef7eb2e8f9f7 2939 (+) Interrupt mode
<> 144:ef7eb2e8f9f7 2940 (+) DMA mode
<> 144:ef7eb2e8f9f7 2941
<> 144:ef7eb2e8f9f7 2942 @endverbatim
<> 144:ef7eb2e8f9f7 2943 * @{
<> 144:ef7eb2e8f9f7 2944 */
<> 144:ef7eb2e8f9f7 2945
<> 144:ef7eb2e8f9f7 2946 /**
<> 144:ef7eb2e8f9f7 2947 * @brief Initializes the CRYP peripheral in TDES ECB encryption mode
<> 144:ef7eb2e8f9f7 2948 * then encrypt pPlainData. The cypher data are available in pCypherData
<> 144:ef7eb2e8f9f7 2949 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2950 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2951 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2952 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2953 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2954 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 2955 * @retval HAL status
<> 144:ef7eb2e8f9f7 2956 */
<> 144:ef7eb2e8f9f7 2957 HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 2958 {
<> 144:ef7eb2e8f9f7 2959 /* Process Locked */
<> 144:ef7eb2e8f9f7 2960 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 2961
<> 144:ef7eb2e8f9f7 2962 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2963 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 2964
<> 144:ef7eb2e8f9f7 2965 /* Set CRYP peripheral in TDES ECB encryption mode */
<> 144:ef7eb2e8f9f7 2966 CRYP_SetTDESECBMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 2967
<> 144:ef7eb2e8f9f7 2968 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 2969 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 2970
<> 144:ef7eb2e8f9f7 2971 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 2972 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 2973 {
<> 144:ef7eb2e8f9f7 2974 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 2975 }
<> 144:ef7eb2e8f9f7 2976
<> 144:ef7eb2e8f9f7 2977 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 2978 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 2979
<> 144:ef7eb2e8f9f7 2980 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 2981 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 2982
<> 144:ef7eb2e8f9f7 2983 /* Return function status */
<> 144:ef7eb2e8f9f7 2984 return HAL_OK;
<> 144:ef7eb2e8f9f7 2985 }
<> 144:ef7eb2e8f9f7 2986
<> 144:ef7eb2e8f9f7 2987 /**
<> 144:ef7eb2e8f9f7 2988 * @brief Initializes the CRYP peripheral in TDES ECB decryption mode
<> 144:ef7eb2e8f9f7 2989 * then decrypted pCypherData. The cypher data are available in pPlainData
<> 144:ef7eb2e8f9f7 2990 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 2991 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 2992 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 2993 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 2994 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 2995 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 2996 * @retval HAL status
<> 144:ef7eb2e8f9f7 2997 */
<> 144:ef7eb2e8f9f7 2998 HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 2999 {
<> 144:ef7eb2e8f9f7 3000 /* Process Locked */
<> 144:ef7eb2e8f9f7 3001 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3002
<> 144:ef7eb2e8f9f7 3003 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3004 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3005
<> 144:ef7eb2e8f9f7 3006 /* Set CRYP peripheral in TDES ECB decryption mode */
<> 144:ef7eb2e8f9f7 3007 CRYP_SetTDESECBMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 3008
<> 144:ef7eb2e8f9f7 3009 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3010 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3011
<> 144:ef7eb2e8f9f7 3012 /* Write Cypher Data and Get Plain Data */
<> 144:ef7eb2e8f9f7 3013 if(CRYP_ProcessData2Words(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 3014 {
<> 144:ef7eb2e8f9f7 3015 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 3016 }
<> 144:ef7eb2e8f9f7 3017
<> 144:ef7eb2e8f9f7 3018 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3019 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3020
<> 144:ef7eb2e8f9f7 3021 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3022 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3023
<> 144:ef7eb2e8f9f7 3024 /* Return function status */
<> 144:ef7eb2e8f9f7 3025 return HAL_OK;
<> 144:ef7eb2e8f9f7 3026 }
<> 144:ef7eb2e8f9f7 3027
<> 144:ef7eb2e8f9f7 3028 /**
<> 144:ef7eb2e8f9f7 3029 * @brief Initializes the CRYP peripheral in TDES CBC encryption mode
<> 144:ef7eb2e8f9f7 3030 * then encrypt pPlainData. The cypher data are available in pCypherData
<> 144:ef7eb2e8f9f7 3031 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3032 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3033 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3034 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3035 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3036 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 3037 * @retval HAL status
<> 144:ef7eb2e8f9f7 3038 */
<> 144:ef7eb2e8f9f7 3039 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 3040 {
<> 144:ef7eb2e8f9f7 3041 /* Process Locked */
<> 144:ef7eb2e8f9f7 3042 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3043
<> 144:ef7eb2e8f9f7 3044 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3045 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3046
<> 144:ef7eb2e8f9f7 3047 /* Set CRYP peripheral in TDES CBC encryption mode */
<> 144:ef7eb2e8f9f7 3048 CRYP_SetTDESCBCMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 3049
<> 144:ef7eb2e8f9f7 3050 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3051 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3052
<> 144:ef7eb2e8f9f7 3053 /* Write Plain Data and Get Cypher Data */
<> 144:ef7eb2e8f9f7 3054 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 3055 {
<> 144:ef7eb2e8f9f7 3056 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 3057 }
<> 144:ef7eb2e8f9f7 3058
<> 144:ef7eb2e8f9f7 3059 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3060 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3061
<> 144:ef7eb2e8f9f7 3062 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3063 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3064
<> 144:ef7eb2e8f9f7 3065 /* Return function status */
<> 144:ef7eb2e8f9f7 3066 return HAL_OK;
<> 144:ef7eb2e8f9f7 3067 }
<> 144:ef7eb2e8f9f7 3068
<> 144:ef7eb2e8f9f7 3069 /**
<> 144:ef7eb2e8f9f7 3070 * @brief Initializes the CRYP peripheral in TDES CBC decryption mode
<> 144:ef7eb2e8f9f7 3071 * then decrypted pCypherData. The cypher data are available in pPlainData
<> 144:ef7eb2e8f9f7 3072 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3073 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3074 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3075 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3076 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3077 * @param Timeout: Specify Timeout value
<> 144:ef7eb2e8f9f7 3078 * @retval HAL status
<> 144:ef7eb2e8f9f7 3079 */
<> 144:ef7eb2e8f9f7 3080 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
<> 144:ef7eb2e8f9f7 3081 {
<> 144:ef7eb2e8f9f7 3082 /* Process Locked */
<> 144:ef7eb2e8f9f7 3083 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3084
<> 144:ef7eb2e8f9f7 3085 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3086 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3087
<> 144:ef7eb2e8f9f7 3088 /* Set CRYP peripheral in TDES CBC decryption mode */
<> 144:ef7eb2e8f9f7 3089 CRYP_SetTDESCBCMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 3090
<> 144:ef7eb2e8f9f7 3091 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3092 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3093
<> 144:ef7eb2e8f9f7 3094 /* Write Cypher Data and Get Plain Data */
<> 144:ef7eb2e8f9f7 3095 if(CRYP_ProcessData2Words(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
<> 144:ef7eb2e8f9f7 3096 {
<> 144:ef7eb2e8f9f7 3097 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 3098 }
<> 144:ef7eb2e8f9f7 3099
<> 144:ef7eb2e8f9f7 3100 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3101 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3102
<> 144:ef7eb2e8f9f7 3103 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3104 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3105
<> 144:ef7eb2e8f9f7 3106 /* Return function status */
<> 144:ef7eb2e8f9f7 3107 return HAL_OK;
<> 144:ef7eb2e8f9f7 3108 }
<> 144:ef7eb2e8f9f7 3109
<> 144:ef7eb2e8f9f7 3110 /**
<> 144:ef7eb2e8f9f7 3111 * @brief Initializes the CRYP peripheral in TDES ECB encryption mode using interrupt.
<> 144:ef7eb2e8f9f7 3112 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3113 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3114 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3115 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3116 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3117 * @retval HAL status
<> 144:ef7eb2e8f9f7 3118 */
<> 144:ef7eb2e8f9f7 3119 HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 3120 {
<> 144:ef7eb2e8f9f7 3121 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3122 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3123
<> 144:ef7eb2e8f9f7 3124 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 3125 {
<> 144:ef7eb2e8f9f7 3126 /* Process Locked */
<> 144:ef7eb2e8f9f7 3127 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3128
<> 144:ef7eb2e8f9f7 3129 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 3130 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 3131 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 3132 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 3133
<> 144:ef7eb2e8f9f7 3134 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3135 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3136
<> 144:ef7eb2e8f9f7 3137 /* Set CRYP peripheral in TDES ECB encryption mode */
<> 144:ef7eb2e8f9f7 3138 CRYP_SetTDESECBMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 3139
<> 144:ef7eb2e8f9f7 3140 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 3141 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3142
<> 144:ef7eb2e8f9f7 3143 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3144 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3145
<> 144:ef7eb2e8f9f7 3146 /* Return function status */
<> 144:ef7eb2e8f9f7 3147 return HAL_OK;
<> 144:ef7eb2e8f9f7 3148 }
<> 144:ef7eb2e8f9f7 3149 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 3150 {
<> 144:ef7eb2e8f9f7 3151 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 3152 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 3153 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3154 inputaddr+=4;
<> 144:ef7eb2e8f9f7 3155 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3156
<> 144:ef7eb2e8f9f7 3157 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3158 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 3159 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 3160 {
<> 144:ef7eb2e8f9f7 3161 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 3162 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 3163 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3164 }
<> 144:ef7eb2e8f9f7 3165 }
<> 144:ef7eb2e8f9f7 3166 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 3167 {
<> 144:ef7eb2e8f9f7 3168 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 3169 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 3170 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3171 outputaddr+=4;
<> 144:ef7eb2e8f9f7 3172 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3173
<> 144:ef7eb2e8f9f7 3174 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3175 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 3176 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 3177 {
<> 144:ef7eb2e8f9f7 3178 /* Disable IT */
<> 144:ef7eb2e8f9f7 3179 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3180 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 3181 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 3182 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3183 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3184 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3185 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3186 /* Call the Output data transfer complete callback */
<> 144:ef7eb2e8f9f7 3187 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3188 }
<> 144:ef7eb2e8f9f7 3189 }
<> 144:ef7eb2e8f9f7 3190
<> 144:ef7eb2e8f9f7 3191 /* Return function status */
<> 144:ef7eb2e8f9f7 3192 return HAL_OK;
<> 144:ef7eb2e8f9f7 3193 }
<> 144:ef7eb2e8f9f7 3194
<> 144:ef7eb2e8f9f7 3195 /**
<> 144:ef7eb2e8f9f7 3196 * @brief Initializes the CRYP peripheral in TDES CBC encryption mode.
<> 144:ef7eb2e8f9f7 3197 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3198 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3199 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3200 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3201 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3202 * @retval HAL status
<> 144:ef7eb2e8f9f7 3203 */
<> 144:ef7eb2e8f9f7 3204 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 3205 {
<> 144:ef7eb2e8f9f7 3206 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3207 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3208
<> 144:ef7eb2e8f9f7 3209 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 3210 {
<> 144:ef7eb2e8f9f7 3211 /* Process Locked */
<> 144:ef7eb2e8f9f7 3212 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3213
<> 144:ef7eb2e8f9f7 3214 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 3215 hcryp->pCrypInBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 3216 hcryp->pCrypOutBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 3217 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 3218
<> 144:ef7eb2e8f9f7 3219 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3220 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3221
<> 144:ef7eb2e8f9f7 3222 /* Set CRYP peripheral in TDES CBC encryption mode */
<> 144:ef7eb2e8f9f7 3223 CRYP_SetTDESCBCMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 3224
<> 144:ef7eb2e8f9f7 3225 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 3226 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3227
<> 144:ef7eb2e8f9f7 3228 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3229 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3230
<> 144:ef7eb2e8f9f7 3231 /* Return function status */
<> 144:ef7eb2e8f9f7 3232 return HAL_OK;
<> 144:ef7eb2e8f9f7 3233 }
<> 144:ef7eb2e8f9f7 3234 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 3235 {
<> 144:ef7eb2e8f9f7 3236 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 3237 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 3238 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3239 inputaddr+=4;
<> 144:ef7eb2e8f9f7 3240 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3241
<> 144:ef7eb2e8f9f7 3242 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3243 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 3244 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 3245 {
<> 144:ef7eb2e8f9f7 3246 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 3247 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 3248 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3249 }
<> 144:ef7eb2e8f9f7 3250 }
<> 144:ef7eb2e8f9f7 3251 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 3252 {
<> 144:ef7eb2e8f9f7 3253 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 3254 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 3255 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3256 outputaddr+=4;
<> 144:ef7eb2e8f9f7 3257 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3258
<> 144:ef7eb2e8f9f7 3259 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3260 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 3261 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 3262 {
<> 144:ef7eb2e8f9f7 3263 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3264 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 3265 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 3266 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3267 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3268 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3269 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3270 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 3271 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3272 }
<> 144:ef7eb2e8f9f7 3273 }
<> 144:ef7eb2e8f9f7 3274
<> 144:ef7eb2e8f9f7 3275 /* Return function status */
<> 144:ef7eb2e8f9f7 3276 return HAL_OK;
<> 144:ef7eb2e8f9f7 3277 }
<> 144:ef7eb2e8f9f7 3278
<> 144:ef7eb2e8f9f7 3279 /**
<> 144:ef7eb2e8f9f7 3280 * @brief Initializes the CRYP peripheral in TDES ECB decryption mode.
<> 144:ef7eb2e8f9f7 3281 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3282 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3283 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3284 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3285 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3286 * @retval HAL status
<> 144:ef7eb2e8f9f7 3287 */
<> 144:ef7eb2e8f9f7 3288 HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 3289 {
<> 144:ef7eb2e8f9f7 3290 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3291 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3292
<> 144:ef7eb2e8f9f7 3293 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 3294 {
<> 144:ef7eb2e8f9f7 3295 /* Process Locked */
<> 144:ef7eb2e8f9f7 3296 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3297
<> 144:ef7eb2e8f9f7 3298 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 3299 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 3300 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 3301 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 3302
<> 144:ef7eb2e8f9f7 3303 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3304 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3305
<> 144:ef7eb2e8f9f7 3306 /* Set CRYP peripheral in TDES ECB decryption mode */
<> 144:ef7eb2e8f9f7 3307 CRYP_SetTDESECBMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 3308
<> 144:ef7eb2e8f9f7 3309 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 3310 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3311
<> 144:ef7eb2e8f9f7 3312 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3313 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3314
<> 144:ef7eb2e8f9f7 3315 /* Return function status */
<> 144:ef7eb2e8f9f7 3316 return HAL_OK;
<> 144:ef7eb2e8f9f7 3317 }
<> 144:ef7eb2e8f9f7 3318 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 3319 {
<> 144:ef7eb2e8f9f7 3320 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 3321 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 3322 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3323 inputaddr+=4;
<> 144:ef7eb2e8f9f7 3324 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3325
<> 144:ef7eb2e8f9f7 3326 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3327 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 3328 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 3329 {
<> 144:ef7eb2e8f9f7 3330 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 3331 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 3332 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3333 }
<> 144:ef7eb2e8f9f7 3334 }
<> 144:ef7eb2e8f9f7 3335 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 3336 {
<> 144:ef7eb2e8f9f7 3337 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 3338 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 3339 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3340 outputaddr+=4;
<> 144:ef7eb2e8f9f7 3341 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3342
<> 144:ef7eb2e8f9f7 3343 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3344 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 3345 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 3346 {
<> 144:ef7eb2e8f9f7 3347 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3348 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 3349 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 3350 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3351 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3352 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3353 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3354 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 3355 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3356 }
<> 144:ef7eb2e8f9f7 3357 }
<> 144:ef7eb2e8f9f7 3358
<> 144:ef7eb2e8f9f7 3359 /* Return function status */
<> 144:ef7eb2e8f9f7 3360 return HAL_OK;
<> 144:ef7eb2e8f9f7 3361 }
<> 144:ef7eb2e8f9f7 3362
<> 144:ef7eb2e8f9f7 3363 /**
<> 144:ef7eb2e8f9f7 3364 * @brief Initializes the CRYP peripheral in TDES CBC decryption mode.
<> 144:ef7eb2e8f9f7 3365 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3366 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3367 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3368 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3369 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3370 * @retval HAL status
<> 144:ef7eb2e8f9f7 3371 */
<> 144:ef7eb2e8f9f7 3372 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 3373 {
<> 144:ef7eb2e8f9f7 3374 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3375 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3376
<> 144:ef7eb2e8f9f7 3377 if(hcryp->State == HAL_CRYP_STATE_READY)
<> 144:ef7eb2e8f9f7 3378 {
<> 144:ef7eb2e8f9f7 3379 /* Process Locked */
<> 144:ef7eb2e8f9f7 3380 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3381
<> 144:ef7eb2e8f9f7 3382 hcryp->CrypInCount = Size;
<> 144:ef7eb2e8f9f7 3383 hcryp->pCrypInBuffPtr = pCypherData;
<> 144:ef7eb2e8f9f7 3384 hcryp->pCrypOutBuffPtr = pPlainData;
<> 144:ef7eb2e8f9f7 3385 hcryp->CrypOutCount = Size;
<> 144:ef7eb2e8f9f7 3386
<> 144:ef7eb2e8f9f7 3387 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3388 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3389
<> 144:ef7eb2e8f9f7 3390 /* Set CRYP peripheral in TDES CBC decryption mode */
<> 144:ef7eb2e8f9f7 3391 CRYP_SetTDESCBCMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 3392
<> 144:ef7eb2e8f9f7 3393 /* Enable Interrupts */
<> 144:ef7eb2e8f9f7 3394 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3395
<> 144:ef7eb2e8f9f7 3396 /* Enable CRYP */
<> 144:ef7eb2e8f9f7 3397 __HAL_CRYP_ENABLE(hcryp);
<> 144:ef7eb2e8f9f7 3398
<> 144:ef7eb2e8f9f7 3399 /* Return function status */
<> 144:ef7eb2e8f9f7 3400 return HAL_OK;
<> 144:ef7eb2e8f9f7 3401 }
<> 144:ef7eb2e8f9f7 3402 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
<> 144:ef7eb2e8f9f7 3403 {
<> 144:ef7eb2e8f9f7 3404 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
<> 144:ef7eb2e8f9f7 3405 /* Write the Input block in the IN FIFO */
<> 144:ef7eb2e8f9f7 3406 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3407 inputaddr+=4;
<> 144:ef7eb2e8f9f7 3408 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
<> 144:ef7eb2e8f9f7 3409
<> 144:ef7eb2e8f9f7 3410 hcryp->pCrypInBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3411 hcryp->CrypInCount -= 8;
<> 144:ef7eb2e8f9f7 3412 if(hcryp->CrypInCount == 0)
<> 144:ef7eb2e8f9f7 3413 {
<> 144:ef7eb2e8f9f7 3414 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
<> 144:ef7eb2e8f9f7 3415 /* Call the Input data transfer complete callback */
<> 144:ef7eb2e8f9f7 3416 HAL_CRYP_InCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3417 }
<> 144:ef7eb2e8f9f7 3418 }
<> 144:ef7eb2e8f9f7 3419 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
<> 144:ef7eb2e8f9f7 3420 {
<> 144:ef7eb2e8f9f7 3421 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
<> 144:ef7eb2e8f9f7 3422 /* Read the Output block from the Output FIFO */
<> 144:ef7eb2e8f9f7 3423 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3424 outputaddr+=4;
<> 144:ef7eb2e8f9f7 3425 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
<> 144:ef7eb2e8f9f7 3426
<> 144:ef7eb2e8f9f7 3427 hcryp->pCrypOutBuffPtr += 8;
<> 144:ef7eb2e8f9f7 3428 hcryp->CrypOutCount -= 8;
<> 144:ef7eb2e8f9f7 3429 if(hcryp->CrypOutCount == 0)
<> 144:ef7eb2e8f9f7 3430 {
<> 144:ef7eb2e8f9f7 3431 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
<> 144:ef7eb2e8f9f7 3432 /* Disable CRYP */
<> 144:ef7eb2e8f9f7 3433 __HAL_CRYP_DISABLE(hcryp);
<> 144:ef7eb2e8f9f7 3434 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3435 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3436 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3437 hcryp->State = HAL_CRYP_STATE_READY;
<> 144:ef7eb2e8f9f7 3438 /* Call Input transfer complete callback */
<> 144:ef7eb2e8f9f7 3439 HAL_CRYP_OutCpltCallback(hcryp);
<> 144:ef7eb2e8f9f7 3440 }
<> 144:ef7eb2e8f9f7 3441 }
<> 144:ef7eb2e8f9f7 3442
<> 144:ef7eb2e8f9f7 3443 /* Return function status */
<> 144:ef7eb2e8f9f7 3444 return HAL_OK;
<> 144:ef7eb2e8f9f7 3445 }
<> 144:ef7eb2e8f9f7 3446
<> 144:ef7eb2e8f9f7 3447 /**
<> 144:ef7eb2e8f9f7 3448 * @brief Initializes the CRYP peripheral in TDES ECB encryption mode using DMA.
<> 144:ef7eb2e8f9f7 3449 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3450 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3451 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3452 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3453 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3454 * @retval HAL status
<> 144:ef7eb2e8f9f7 3455 */
<> 144:ef7eb2e8f9f7 3456 HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 3457 {
<> 144:ef7eb2e8f9f7 3458 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3459 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3460
<> 144:ef7eb2e8f9f7 3461 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 3462 {
<> 144:ef7eb2e8f9f7 3463 /* Process Locked */
<> 144:ef7eb2e8f9f7 3464 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3465
<> 144:ef7eb2e8f9f7 3466 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 3467 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 3468
<> 144:ef7eb2e8f9f7 3469 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3470 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3471
<> 144:ef7eb2e8f9f7 3472 /* Set CRYP peripheral in TDES ECB encryption mode */
<> 144:ef7eb2e8f9f7 3473 CRYP_SetTDESECBMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 3474
<> 144:ef7eb2e8f9f7 3475 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 3476 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 3477
<> 144:ef7eb2e8f9f7 3478 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3479 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3480
<> 144:ef7eb2e8f9f7 3481 /* Return function status */
<> 144:ef7eb2e8f9f7 3482 return HAL_OK;
<> 144:ef7eb2e8f9f7 3483 }
<> 144:ef7eb2e8f9f7 3484 else
<> 144:ef7eb2e8f9f7 3485 {
<> 144:ef7eb2e8f9f7 3486 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 3487 }
<> 144:ef7eb2e8f9f7 3488 }
<> 144:ef7eb2e8f9f7 3489
<> 144:ef7eb2e8f9f7 3490 /**
<> 144:ef7eb2e8f9f7 3491 * @brief Initializes the CRYP peripheral in TDES CBC encryption mode using DMA.
<> 144:ef7eb2e8f9f7 3492 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3493 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3494 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3495 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3496 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3497 * @retval HAL status
<> 144:ef7eb2e8f9f7 3498 */
<> 144:ef7eb2e8f9f7 3499 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
<> 144:ef7eb2e8f9f7 3500 {
<> 144:ef7eb2e8f9f7 3501 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3502 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3503
<> 144:ef7eb2e8f9f7 3504 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 3505 {
<> 144:ef7eb2e8f9f7 3506 /* Process Locked */
<> 144:ef7eb2e8f9f7 3507 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3508
<> 144:ef7eb2e8f9f7 3509 inputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 3510 outputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 3511
<> 144:ef7eb2e8f9f7 3512 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3513 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3514
<> 144:ef7eb2e8f9f7 3515 /* Set CRYP peripheral in TDES CBC encryption mode */
<> 144:ef7eb2e8f9f7 3516 CRYP_SetTDESCBCMode(hcryp, 0);
<> 144:ef7eb2e8f9f7 3517
<> 144:ef7eb2e8f9f7 3518 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 3519 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 3520
<> 144:ef7eb2e8f9f7 3521 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3522 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3523
<> 144:ef7eb2e8f9f7 3524 /* Return function status */
<> 144:ef7eb2e8f9f7 3525 return HAL_OK;
<> 144:ef7eb2e8f9f7 3526 }
<> 144:ef7eb2e8f9f7 3527 else
<> 144:ef7eb2e8f9f7 3528 {
<> 144:ef7eb2e8f9f7 3529 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 3530 }
<> 144:ef7eb2e8f9f7 3531 }
<> 144:ef7eb2e8f9f7 3532
<> 144:ef7eb2e8f9f7 3533 /**
<> 144:ef7eb2e8f9f7 3534 * @brief Initializes the CRYP peripheral in TDES ECB decryption mode using DMA.
<> 144:ef7eb2e8f9f7 3535 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3536 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3537 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3538 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3539 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3540 * @retval HAL status
<> 144:ef7eb2e8f9f7 3541 */
<> 144:ef7eb2e8f9f7 3542 HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 3543 {
<> 144:ef7eb2e8f9f7 3544 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3545 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3546
<> 144:ef7eb2e8f9f7 3547 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 3548 {
<> 144:ef7eb2e8f9f7 3549 /* Process Locked */
<> 144:ef7eb2e8f9f7 3550 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3551
<> 144:ef7eb2e8f9f7 3552 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 3553 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 3554
<> 144:ef7eb2e8f9f7 3555 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3556 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3557
<> 144:ef7eb2e8f9f7 3558 /* Set CRYP peripheral in TDES ECB decryption mode */
<> 144:ef7eb2e8f9f7 3559 CRYP_SetTDESECBMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 3560
<> 144:ef7eb2e8f9f7 3561 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 3562 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 3563
<> 144:ef7eb2e8f9f7 3564 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3565 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3566
<> 144:ef7eb2e8f9f7 3567 /* Return function status */
<> 144:ef7eb2e8f9f7 3568 return HAL_OK;
<> 144:ef7eb2e8f9f7 3569 }
<> 144:ef7eb2e8f9f7 3570 else
<> 144:ef7eb2e8f9f7 3571 {
<> 144:ef7eb2e8f9f7 3572 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 3573 }
<> 144:ef7eb2e8f9f7 3574 }
<> 144:ef7eb2e8f9f7 3575
<> 144:ef7eb2e8f9f7 3576 /**
<> 144:ef7eb2e8f9f7 3577 * @brief Initializes the CRYP peripheral in TDES CBC decryption mode using DMA.
<> 144:ef7eb2e8f9f7 3578 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3579 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3580 * @param pCypherData: Pointer to the cyphertext buffer
<> 144:ef7eb2e8f9f7 3581 * @param Size: Length of the plaintext buffer, must be a multiple of 8
<> 144:ef7eb2e8f9f7 3582 * @param pPlainData: Pointer to the plaintext buffer
<> 144:ef7eb2e8f9f7 3583 * @retval HAL status
<> 144:ef7eb2e8f9f7 3584 */
<> 144:ef7eb2e8f9f7 3585 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
<> 144:ef7eb2e8f9f7 3586 {
<> 144:ef7eb2e8f9f7 3587 uint32_t inputaddr;
<> 144:ef7eb2e8f9f7 3588 uint32_t outputaddr;
<> 144:ef7eb2e8f9f7 3589
<> 144:ef7eb2e8f9f7 3590 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
<> 144:ef7eb2e8f9f7 3591 {
<> 144:ef7eb2e8f9f7 3592 /* Process Locked */
<> 144:ef7eb2e8f9f7 3593 __HAL_LOCK(hcryp);
<> 144:ef7eb2e8f9f7 3594
<> 144:ef7eb2e8f9f7 3595 inputaddr = (uint32_t)pCypherData;
<> 144:ef7eb2e8f9f7 3596 outputaddr = (uint32_t)pPlainData;
<> 144:ef7eb2e8f9f7 3597
<> 144:ef7eb2e8f9f7 3598 /* Change the CRYP state */
<> 144:ef7eb2e8f9f7 3599 hcryp->State = HAL_CRYP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 3600
<> 144:ef7eb2e8f9f7 3601 /* Set CRYP peripheral in TDES CBC decryption mode */
<> 144:ef7eb2e8f9f7 3602 CRYP_SetTDESCBCMode(hcryp, CRYP_CR_ALGODIR);
<> 144:ef7eb2e8f9f7 3603
<> 144:ef7eb2e8f9f7 3604 /* Set the input and output addresses and start DMA transfer */
<> 144:ef7eb2e8f9f7 3605 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
<> 144:ef7eb2e8f9f7 3606
<> 144:ef7eb2e8f9f7 3607 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 3608 __HAL_UNLOCK(hcryp);
<> 144:ef7eb2e8f9f7 3609
<> 144:ef7eb2e8f9f7 3610 /* Return function status */
<> 144:ef7eb2e8f9f7 3611 return HAL_OK;
<> 144:ef7eb2e8f9f7 3612 }
<> 144:ef7eb2e8f9f7 3613 else
<> 144:ef7eb2e8f9f7 3614 {
<> 144:ef7eb2e8f9f7 3615 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 3616 }
<> 144:ef7eb2e8f9f7 3617 }
<> 144:ef7eb2e8f9f7 3618
<> 144:ef7eb2e8f9f7 3619 /**
<> 144:ef7eb2e8f9f7 3620 * @}
<> 144:ef7eb2e8f9f7 3621 */
<> 144:ef7eb2e8f9f7 3622
<> 144:ef7eb2e8f9f7 3623 /** @defgroup CRYP_Exported_Functions_Group5 DMA callback functions
<> 144:ef7eb2e8f9f7 3624 * @brief DMA callback functions.
<> 144:ef7eb2e8f9f7 3625 *
<> 144:ef7eb2e8f9f7 3626 @verbatim
<> 144:ef7eb2e8f9f7 3627 ==============================================================================
<> 144:ef7eb2e8f9f7 3628 ##### DMA callback functions #####
<> 144:ef7eb2e8f9f7 3629 ==============================================================================
<> 144:ef7eb2e8f9f7 3630 [..] This section provides DMA callback functions:
<> 144:ef7eb2e8f9f7 3631 (+) DMA Input data transfer complete
<> 144:ef7eb2e8f9f7 3632 (+) DMA Output data transfer complete
<> 144:ef7eb2e8f9f7 3633 (+) DMA error
<> 144:ef7eb2e8f9f7 3634
<> 144:ef7eb2e8f9f7 3635 @endverbatim
<> 144:ef7eb2e8f9f7 3636 * @{
<> 144:ef7eb2e8f9f7 3637 */
<> 144:ef7eb2e8f9f7 3638
<> 144:ef7eb2e8f9f7 3639 /**
<> 144:ef7eb2e8f9f7 3640 * @brief Input FIFO transfer completed callbacks.
<> 144:ef7eb2e8f9f7 3641 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3642 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3643 * @retval None
<> 144:ef7eb2e8f9f7 3644 */
<> 144:ef7eb2e8f9f7 3645 __weak void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 3646 {
<> 144:ef7eb2e8f9f7 3647 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 3648 UNUSED(hcryp);
<> 144:ef7eb2e8f9f7 3649
<> 144:ef7eb2e8f9f7 3650 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 3651 the HAL_CRYP_InCpltCallback could be implemented in the user file
<> 144:ef7eb2e8f9f7 3652 */
<> 144:ef7eb2e8f9f7 3653 }
<> 144:ef7eb2e8f9f7 3654
<> 144:ef7eb2e8f9f7 3655 /**
<> 144:ef7eb2e8f9f7 3656 * @brief Output FIFO transfer completed callbacks.
<> 144:ef7eb2e8f9f7 3657 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3658 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3659 * @retval None
<> 144:ef7eb2e8f9f7 3660 */
<> 144:ef7eb2e8f9f7 3661 __weak void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 3662 {
<> 144:ef7eb2e8f9f7 3663 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 3664 UNUSED(hcryp);
<> 144:ef7eb2e8f9f7 3665
<> 144:ef7eb2e8f9f7 3666 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 3667 the HAL_CRYP_OutCpltCallback could be implemented in the user file
<> 144:ef7eb2e8f9f7 3668 */
<> 144:ef7eb2e8f9f7 3669 }
<> 144:ef7eb2e8f9f7 3670
<> 144:ef7eb2e8f9f7 3671 /**
<> 144:ef7eb2e8f9f7 3672 * @brief CRYP error callbacks.
<> 144:ef7eb2e8f9f7 3673 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3674 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3675 * @retval None
<> 144:ef7eb2e8f9f7 3676 */
<> 144:ef7eb2e8f9f7 3677 __weak void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 3678 {
<> 144:ef7eb2e8f9f7 3679 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 3680 UNUSED(hcryp);
<> 144:ef7eb2e8f9f7 3681
<> 144:ef7eb2e8f9f7 3682 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 3683 the HAL_CRYP_ErrorCallback could be implemented in the user file
<> 144:ef7eb2e8f9f7 3684 */
<> 144:ef7eb2e8f9f7 3685 }
<> 144:ef7eb2e8f9f7 3686
<> 144:ef7eb2e8f9f7 3687 /**
<> 144:ef7eb2e8f9f7 3688 * @}
<> 144:ef7eb2e8f9f7 3689 */
<> 144:ef7eb2e8f9f7 3690
<> 144:ef7eb2e8f9f7 3691 /** @defgroup CRYP_Exported_Functions_Group6 CRYP IRQ handler management
<> 144:ef7eb2e8f9f7 3692 * @brief CRYP IRQ handler.
<> 144:ef7eb2e8f9f7 3693 *
<> 144:ef7eb2e8f9f7 3694 @verbatim
<> 144:ef7eb2e8f9f7 3695 ==============================================================================
<> 144:ef7eb2e8f9f7 3696 ##### CRYP IRQ handler management #####
<> 144:ef7eb2e8f9f7 3697 ==============================================================================
<> 144:ef7eb2e8f9f7 3698 [..] This section provides CRYP IRQ handler function.
<> 144:ef7eb2e8f9f7 3699
<> 144:ef7eb2e8f9f7 3700 @endverbatim
<> 144:ef7eb2e8f9f7 3701 * @{
<> 144:ef7eb2e8f9f7 3702 */
<> 144:ef7eb2e8f9f7 3703
<> 144:ef7eb2e8f9f7 3704 /**
<> 144:ef7eb2e8f9f7 3705 * @brief This function handles CRYP interrupt request.
<> 144:ef7eb2e8f9f7 3706 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3707 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3708 * @retval None
<> 144:ef7eb2e8f9f7 3709 */
<> 144:ef7eb2e8f9f7 3710 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 3711 {
<> 144:ef7eb2e8f9f7 3712 switch(CRYP->CR & CRYP_CR_ALGOMODE_DIRECTION)
<> 144:ef7eb2e8f9f7 3713 {
<> 144:ef7eb2e8f9f7 3714 case CRYP_CR_ALGOMODE_TDES_ECB_ENCRYPT:
<> 144:ef7eb2e8f9f7 3715 HAL_CRYP_TDESECB_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3716 break;
<> 144:ef7eb2e8f9f7 3717
<> 144:ef7eb2e8f9f7 3718 case CRYP_CR_ALGOMODE_TDES_ECB_DECRYPT:
<> 144:ef7eb2e8f9f7 3719 HAL_CRYP_TDESECB_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3720 break;
<> 144:ef7eb2e8f9f7 3721
<> 144:ef7eb2e8f9f7 3722 case CRYP_CR_ALGOMODE_TDES_CBC_ENCRYPT:
<> 144:ef7eb2e8f9f7 3723 HAL_CRYP_TDESCBC_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3724 break;
<> 144:ef7eb2e8f9f7 3725
<> 144:ef7eb2e8f9f7 3726 case CRYP_CR_ALGOMODE_TDES_CBC_DECRYPT:
<> 144:ef7eb2e8f9f7 3727 HAL_CRYP_TDESCBC_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3728 break;
<> 144:ef7eb2e8f9f7 3729
<> 144:ef7eb2e8f9f7 3730 case CRYP_CR_ALGOMODE_DES_ECB_ENCRYPT:
<> 144:ef7eb2e8f9f7 3731 HAL_CRYP_DESECB_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3732 break;
<> 144:ef7eb2e8f9f7 3733
<> 144:ef7eb2e8f9f7 3734 case CRYP_CR_ALGOMODE_DES_ECB_DECRYPT:
<> 144:ef7eb2e8f9f7 3735 HAL_CRYP_DESECB_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3736 break;
<> 144:ef7eb2e8f9f7 3737
<> 144:ef7eb2e8f9f7 3738 case CRYP_CR_ALGOMODE_DES_CBC_ENCRYPT:
<> 144:ef7eb2e8f9f7 3739 HAL_CRYP_DESCBC_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3740 break;
<> 144:ef7eb2e8f9f7 3741
<> 144:ef7eb2e8f9f7 3742 case CRYP_CR_ALGOMODE_DES_CBC_DECRYPT:
<> 144:ef7eb2e8f9f7 3743 HAL_CRYP_DESCBC_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3744 break;
<> 144:ef7eb2e8f9f7 3745
<> 144:ef7eb2e8f9f7 3746 case CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT:
<> 144:ef7eb2e8f9f7 3747 HAL_CRYP_AESECB_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3748 break;
<> 144:ef7eb2e8f9f7 3749
<> 144:ef7eb2e8f9f7 3750 case CRYP_CR_ALGOMODE_AES_ECB_DECRYPT:
<> 144:ef7eb2e8f9f7 3751 HAL_CRYP_AESECB_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3752 break;
<> 144:ef7eb2e8f9f7 3753
<> 144:ef7eb2e8f9f7 3754 case CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT:
<> 144:ef7eb2e8f9f7 3755 HAL_CRYP_AESCBC_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3756 break;
<> 144:ef7eb2e8f9f7 3757
<> 144:ef7eb2e8f9f7 3758 case CRYP_CR_ALGOMODE_AES_CBC_DECRYPT:
<> 144:ef7eb2e8f9f7 3759 HAL_CRYP_AESCBC_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3760 break;
<> 144:ef7eb2e8f9f7 3761
<> 144:ef7eb2e8f9f7 3762 case CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT:
<> 144:ef7eb2e8f9f7 3763 HAL_CRYP_AESCTR_Encrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3764 break;
<> 144:ef7eb2e8f9f7 3765
<> 144:ef7eb2e8f9f7 3766 case CRYP_CR_ALGOMODE_AES_CTR_DECRYPT:
<> 144:ef7eb2e8f9f7 3767 HAL_CRYP_AESCTR_Decrypt_IT(hcryp, NULL, 0, NULL);
<> 144:ef7eb2e8f9f7 3768 break;
<> 144:ef7eb2e8f9f7 3769
<> 144:ef7eb2e8f9f7 3770 default:
<> 144:ef7eb2e8f9f7 3771 break;
<> 144:ef7eb2e8f9f7 3772 }
<> 144:ef7eb2e8f9f7 3773 }
<> 144:ef7eb2e8f9f7 3774
<> 144:ef7eb2e8f9f7 3775 /**
<> 144:ef7eb2e8f9f7 3776 * @}
<> 144:ef7eb2e8f9f7 3777 */
<> 144:ef7eb2e8f9f7 3778
<> 144:ef7eb2e8f9f7 3779 /** @defgroup CRYP_Exported_Functions_Group7 Peripheral State functions
<> 144:ef7eb2e8f9f7 3780 * @brief Peripheral State functions.
<> 144:ef7eb2e8f9f7 3781 *
<> 144:ef7eb2e8f9f7 3782 @verbatim
<> 144:ef7eb2e8f9f7 3783 ==============================================================================
<> 144:ef7eb2e8f9f7 3784 ##### Peripheral State functions #####
<> 144:ef7eb2e8f9f7 3785 ==============================================================================
<> 144:ef7eb2e8f9f7 3786 [..]
<> 144:ef7eb2e8f9f7 3787 This subsection permits to get in run-time the status of the peripheral.
<> 144:ef7eb2e8f9f7 3788
<> 144:ef7eb2e8f9f7 3789 @endverbatim
<> 144:ef7eb2e8f9f7 3790 * @{
<> 144:ef7eb2e8f9f7 3791 */
<> 144:ef7eb2e8f9f7 3792
<> 144:ef7eb2e8f9f7 3793 /**
<> 144:ef7eb2e8f9f7 3794 * @brief Returns the CRYP state.
<> 144:ef7eb2e8f9f7 3795 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 3796 * the configuration information for CRYP module
<> 144:ef7eb2e8f9f7 3797 * @retval HAL state
<> 144:ef7eb2e8f9f7 3798 */
<> 144:ef7eb2e8f9f7 3799 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
<> 144:ef7eb2e8f9f7 3800 {
<> 144:ef7eb2e8f9f7 3801 return hcryp->State;
<> 144:ef7eb2e8f9f7 3802 }
<> 144:ef7eb2e8f9f7 3803
<> 144:ef7eb2e8f9f7 3804 /**
<> 144:ef7eb2e8f9f7 3805 * @}
<> 144:ef7eb2e8f9f7 3806 */
<> 144:ef7eb2e8f9f7 3807
<> 144:ef7eb2e8f9f7 3808 /**
<> 144:ef7eb2e8f9f7 3809 * @}
<> 144:ef7eb2e8f9f7 3810 */
<> 144:ef7eb2e8f9f7 3811
<> 144:ef7eb2e8f9f7 3812 #endif /* HAL_CRYP_MODULE_ENABLED */
<> 144:ef7eb2e8f9f7 3813
<> 144:ef7eb2e8f9f7 3814
<> 144:ef7eb2e8f9f7 3815 /**
<> 144:ef7eb2e8f9f7 3816 * @}
<> 144:ef7eb2e8f9f7 3817 */
<> 144:ef7eb2e8f9f7 3818 #endif /* STM32F756xx || STM32F777xx || STM32F779xx */
<> 144:ef7eb2e8f9f7 3819 /**
<> 144:ef7eb2e8f9f7 3820 * @}
<> 144:ef7eb2e8f9f7 3821 */
<> 144:ef7eb2e8f9f7 3822
<> 144:ef7eb2e8f9f7 3823 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/