anyThing Connected Team / mbed-dev

Dependents:   BREAK_SENSOR_LED

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Mon Mar 07 10:00:14 2016 +0000
Revision:
83:a036322b8637
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
Synchronized with git revision ee20d03969aa5c570152f88e8f3d8a4739eed40b

Full URL: https://github.com/mbedmicro/mbed/commit/ee20d03969aa5c570152f88e8f3d8a4739eed40b/

[STM32F7] Update STM32F7Cube_FW version

Who changed what in which revision?

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