fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

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

Replaces mbed-src (now inactive)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32f7xx_hal_cryp.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.0.1
bogdanm 0:9b334a45a8ff 6 * @date 25-June-2015
bogdanm 0:9b334a45a8ff 7 * @brief CRYP HAL module driver.
bogdanm 0:9b334a45a8ff 8 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 9 * functionalities of the Cryptography (CRYP) peripheral:
bogdanm 0:9b334a45a8ff 10 * + Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 11 * + 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 */
bogdanm 0:9b334a45a8ff 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 {
bogdanm 0:9b334a45a8ff 694 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 695 the HAL_CRYP_MspInit could be implemented in the user file
bogdanm 0:9b334a45a8ff 696 */
bogdanm 0:9b334a45a8ff 697 }
bogdanm 0:9b334a45a8ff 698
bogdanm 0:9b334a45a8ff 699 /**
bogdanm 0:9b334a45a8ff 700 * @brief DeInitializes CRYP MSP.
bogdanm 0:9b334a45a8ff 701 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 702 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 703 * @retval None
bogdanm 0:9b334a45a8ff 704 */
bogdanm 0:9b334a45a8ff 705 __weak void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 706 {
bogdanm 0:9b334a45a8ff 707 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 708 the HAL_CRYP_MspDeInit could be implemented in the user file
bogdanm 0:9b334a45a8ff 709 */
bogdanm 0:9b334a45a8ff 710 }
bogdanm 0:9b334a45a8ff 711
bogdanm 0:9b334a45a8ff 712 /**
bogdanm 0:9b334a45a8ff 713 * @}
bogdanm 0:9b334a45a8ff 714 */
bogdanm 0:9b334a45a8ff 715
bogdanm 0:9b334a45a8ff 716 /** @defgroup CRYP_Exported_Functions_Group2 AES processing functions
bogdanm 0:9b334a45a8ff 717 * @brief processing functions.
bogdanm 0:9b334a45a8ff 718 *
bogdanm 0:9b334a45a8ff 719 @verbatim
bogdanm 0:9b334a45a8ff 720 ==============================================================================
bogdanm 0:9b334a45a8ff 721 ##### AES processing functions #####
bogdanm 0:9b334a45a8ff 722 ==============================================================================
bogdanm 0:9b334a45a8ff 723 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 724 (+) Encrypt plaintext using AES-128/192/256 using chaining modes
bogdanm 0:9b334a45a8ff 725 (+) Decrypt cyphertext using AES-128/192/256 using chaining modes
bogdanm 0:9b334a45a8ff 726 [..] Three processing functions are available:
bogdanm 0:9b334a45a8ff 727 (+) Polling mode
bogdanm 0:9b334a45a8ff 728 (+) Interrupt mode
bogdanm 0:9b334a45a8ff 729 (+) DMA mode
bogdanm 0:9b334a45a8ff 730
bogdanm 0:9b334a45a8ff 731 @endverbatim
bogdanm 0:9b334a45a8ff 732 * @{
bogdanm 0:9b334a45a8ff 733 */
bogdanm 0:9b334a45a8ff 734
bogdanm 0:9b334a45a8ff 735 /**
bogdanm 0:9b334a45a8ff 736 * @brief Initializes the CRYP peripheral in AES ECB encryption mode
bogdanm 0:9b334a45a8ff 737 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 738 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 739 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 740 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 741 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 742 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 743 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 744 * @retval HAL status
bogdanm 0:9b334a45a8ff 745 */
bogdanm 0:9b334a45a8ff 746 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 747 {
bogdanm 0:9b334a45a8ff 748 /* Process Locked */
bogdanm 0:9b334a45a8ff 749 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 750
bogdanm 0:9b334a45a8ff 751 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 752 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 753
bogdanm 0:9b334a45a8ff 754 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 755 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 756 {
bogdanm 0:9b334a45a8ff 757 /* Set the key */
bogdanm 0:9b334a45a8ff 758 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 759
bogdanm 0:9b334a45a8ff 760 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 761 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB);
bogdanm 0:9b334a45a8ff 762
bogdanm 0:9b334a45a8ff 763 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 764 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 765
bogdanm 0:9b334a45a8ff 766 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 767 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 768
bogdanm 0:9b334a45a8ff 769 /* Set the phase */
bogdanm 0:9b334a45a8ff 770 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 771 }
bogdanm 0:9b334a45a8ff 772
bogdanm 0:9b334a45a8ff 773 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 774 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 775 {
bogdanm 0:9b334a45a8ff 776 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 777 }
bogdanm 0:9b334a45a8ff 778
bogdanm 0:9b334a45a8ff 779 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 780 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 781
bogdanm 0:9b334a45a8ff 782 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 783 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 784
bogdanm 0:9b334a45a8ff 785 /* Return function status */
bogdanm 0:9b334a45a8ff 786 return HAL_OK;
bogdanm 0:9b334a45a8ff 787 }
bogdanm 0:9b334a45a8ff 788
bogdanm 0:9b334a45a8ff 789 /**
bogdanm 0:9b334a45a8ff 790 * @brief Initializes the CRYP peripheral in AES CBC encryption mode
bogdanm 0:9b334a45a8ff 791 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 792 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 793 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 794 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 795 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 796 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 797 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 798 * @retval HAL status
bogdanm 0:9b334a45a8ff 799 */
bogdanm 0:9b334a45a8ff 800 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 801 {
bogdanm 0:9b334a45a8ff 802 /* Process Locked */
bogdanm 0:9b334a45a8ff 803 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 804
bogdanm 0:9b334a45a8ff 805 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 806 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 807
bogdanm 0:9b334a45a8ff 808 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 809 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 810 {
bogdanm 0:9b334a45a8ff 811 /* Set the key */
bogdanm 0:9b334a45a8ff 812 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 813
bogdanm 0:9b334a45a8ff 814 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 815 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC);
bogdanm 0:9b334a45a8ff 816
bogdanm 0:9b334a45a8ff 817 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 818 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 819
bogdanm 0:9b334a45a8ff 820 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 821 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 822
bogdanm 0:9b334a45a8ff 823 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 824 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 825
bogdanm 0:9b334a45a8ff 826 /* Set the phase */
bogdanm 0:9b334a45a8ff 827 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 828 }
bogdanm 0:9b334a45a8ff 829
bogdanm 0:9b334a45a8ff 830 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 831 if(CRYP_ProcessData(hcryp,pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 832 {
bogdanm 0:9b334a45a8ff 833 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 834 }
bogdanm 0:9b334a45a8ff 835
bogdanm 0:9b334a45a8ff 836 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 837 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 838
bogdanm 0:9b334a45a8ff 839 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 840 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 841
bogdanm 0:9b334a45a8ff 842 /* Return function status */
bogdanm 0:9b334a45a8ff 843 return HAL_OK;
bogdanm 0:9b334a45a8ff 844 }
bogdanm 0:9b334a45a8ff 845
bogdanm 0:9b334a45a8ff 846 /**
bogdanm 0:9b334a45a8ff 847 * @brief Initializes the CRYP peripheral in AES CTR encryption mode
bogdanm 0:9b334a45a8ff 848 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 849 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 850 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 851 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 852 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 853 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 854 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 855 * @retval HAL status
bogdanm 0:9b334a45a8ff 856 */
bogdanm 0:9b334a45a8ff 857 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 858 {
bogdanm 0:9b334a45a8ff 859 /* Process Locked */
bogdanm 0:9b334a45a8ff 860 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 861
bogdanm 0:9b334a45a8ff 862 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 863 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 864
bogdanm 0:9b334a45a8ff 865 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 866 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 867 {
bogdanm 0:9b334a45a8ff 868 /* Set the key */
bogdanm 0:9b334a45a8ff 869 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 870
bogdanm 0:9b334a45a8ff 871 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 872 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR);
bogdanm 0:9b334a45a8ff 873
bogdanm 0:9b334a45a8ff 874 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 875 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 876
bogdanm 0:9b334a45a8ff 877 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 878 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 879
bogdanm 0:9b334a45a8ff 880 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 881 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 882
bogdanm 0:9b334a45a8ff 883 /* Set the phase */
bogdanm 0:9b334a45a8ff 884 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 885 }
bogdanm 0:9b334a45a8ff 886
bogdanm 0:9b334a45a8ff 887 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 888 if(CRYP_ProcessData(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 889 {
bogdanm 0:9b334a45a8ff 890 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 891 }
bogdanm 0:9b334a45a8ff 892
bogdanm 0:9b334a45a8ff 893 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 894 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 895
bogdanm 0:9b334a45a8ff 896 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 897 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 898
bogdanm 0:9b334a45a8ff 899 /* Return function status */
bogdanm 0:9b334a45a8ff 900 return HAL_OK;
bogdanm 0:9b334a45a8ff 901 }
bogdanm 0:9b334a45a8ff 902
bogdanm 0:9b334a45a8ff 903
bogdanm 0:9b334a45a8ff 904
bogdanm 0:9b334a45a8ff 905 /**
bogdanm 0:9b334a45a8ff 906 * @brief Initializes the CRYP peripheral in AES ECB decryption mode
bogdanm 0:9b334a45a8ff 907 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 908 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 909 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 910 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 911 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 912 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 913 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 914 * @retval HAL status
bogdanm 0:9b334a45a8ff 915 */
bogdanm 0:9b334a45a8ff 916 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 917 {
bogdanm 0:9b334a45a8ff 918 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 919
bogdanm 0:9b334a45a8ff 920 /* Process Locked */
bogdanm 0:9b334a45a8ff 921 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 922
bogdanm 0:9b334a45a8ff 923 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 924 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 925
bogdanm 0:9b334a45a8ff 926 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 927 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 928 {
bogdanm 0:9b334a45a8ff 929 /* Set the key */
bogdanm 0:9b334a45a8ff 930 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 931
bogdanm 0:9b334a45a8ff 932 /* Set the CRYP peripheral in AES Key mode */
bogdanm 0:9b334a45a8ff 933 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 934
bogdanm 0:9b334a45a8ff 935 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 936 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 937
bogdanm 0:9b334a45a8ff 938 /* Get tick */
bogdanm 0:9b334a45a8ff 939 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 940
bogdanm 0:9b334a45a8ff 941 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
bogdanm 0:9b334a45a8ff 942 {
bogdanm 0:9b334a45a8ff 943 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 944 if(Timeout != HAL_MAX_DELAY)
bogdanm 0:9b334a45a8ff 945 {
bogdanm 0:9b334a45a8ff 946 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
bogdanm 0:9b334a45a8ff 947 {
bogdanm 0:9b334a45a8ff 948 /* Change state */
bogdanm 0:9b334a45a8ff 949 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 950
bogdanm 0:9b334a45a8ff 951 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 952 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 953
bogdanm 0:9b334a45a8ff 954 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 955 }
bogdanm 0:9b334a45a8ff 956 }
bogdanm 0:9b334a45a8ff 957 }
bogdanm 0:9b334a45a8ff 958
bogdanm 0:9b334a45a8ff 959 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 960 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 961
bogdanm 0:9b334a45a8ff 962 /* Reset the ALGOMODE bits*/
bogdanm 0:9b334a45a8ff 963 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
bogdanm 0:9b334a45a8ff 964
bogdanm 0:9b334a45a8ff 965 /* Set the CRYP peripheral in AES ECB decryption mode */
bogdanm 0:9b334a45a8ff 966 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 967 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 968 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 969
bogdanm 0:9b334a45a8ff 970 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 971 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 972
bogdanm 0:9b334a45a8ff 973 /* Set the phase */
bogdanm 0:9b334a45a8ff 974 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 975 }
bogdanm 0:9b334a45a8ff 976
bogdanm 0:9b334a45a8ff 977 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 978 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 979 {
bogdanm 0:9b334a45a8ff 980 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 981 }
bogdanm 0:9b334a45a8ff 982
bogdanm 0:9b334a45a8ff 983 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 984 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 985
bogdanm 0:9b334a45a8ff 986 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 987 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 988
bogdanm 0:9b334a45a8ff 989 /* Return function status */
bogdanm 0:9b334a45a8ff 990 return HAL_OK;
bogdanm 0:9b334a45a8ff 991 }
bogdanm 0:9b334a45a8ff 992
bogdanm 0:9b334a45a8ff 993 /**
bogdanm 0:9b334a45a8ff 994 * @brief Initializes the CRYP peripheral in AES ECB decryption mode
bogdanm 0:9b334a45a8ff 995 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 996 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 997 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 998 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 999 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1000 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1001 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 1002 * @retval HAL status
bogdanm 0:9b334a45a8ff 1003 */
bogdanm 0:9b334a45a8ff 1004 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 1005 {
bogdanm 0:9b334a45a8ff 1006 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 1007
bogdanm 0:9b334a45a8ff 1008 /* Process Locked */
bogdanm 0:9b334a45a8ff 1009 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1010
bogdanm 0:9b334a45a8ff 1011 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1012 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1013
bogdanm 0:9b334a45a8ff 1014 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1015 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1016 {
bogdanm 0:9b334a45a8ff 1017 /* Set the key */
bogdanm 0:9b334a45a8ff 1018 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1019
bogdanm 0:9b334a45a8ff 1020 /* Set the CRYP peripheral in AES Key mode */
bogdanm 0:9b334a45a8ff 1021 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1022
bogdanm 0:9b334a45a8ff 1023 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1024 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1025
bogdanm 0:9b334a45a8ff 1026 /* Get tick */
bogdanm 0:9b334a45a8ff 1027 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1028
bogdanm 0:9b334a45a8ff 1029 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
bogdanm 0:9b334a45a8ff 1030 {
bogdanm 0:9b334a45a8ff 1031 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 1032 if(Timeout != HAL_MAX_DELAY)
bogdanm 0:9b334a45a8ff 1033 {
bogdanm 0:9b334a45a8ff 1034 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
bogdanm 0:9b334a45a8ff 1035 {
bogdanm 0:9b334a45a8ff 1036 /* Change state */
bogdanm 0:9b334a45a8ff 1037 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1038
bogdanm 0:9b334a45a8ff 1039 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1040 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1041
bogdanm 0:9b334a45a8ff 1042 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1043 }
bogdanm 0:9b334a45a8ff 1044 }
bogdanm 0:9b334a45a8ff 1045 }
bogdanm 0:9b334a45a8ff 1046
bogdanm 0:9b334a45a8ff 1047 /* Reset the ALGOMODE bits*/
bogdanm 0:9b334a45a8ff 1048 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
bogdanm 0:9b334a45a8ff 1049
bogdanm 0:9b334a45a8ff 1050 /* Set the CRYP peripheral in AES CBC decryption mode */
bogdanm 0:9b334a45a8ff 1051 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1052
bogdanm 0:9b334a45a8ff 1053 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1054 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1055
bogdanm 0:9b334a45a8ff 1056 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1057 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1058
bogdanm 0:9b334a45a8ff 1059 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1060 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1061
bogdanm 0:9b334a45a8ff 1062 /* Set the phase */
bogdanm 0:9b334a45a8ff 1063 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1064 }
bogdanm 0:9b334a45a8ff 1065
bogdanm 0:9b334a45a8ff 1066 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 1067 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 1068 {
bogdanm 0:9b334a45a8ff 1069 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1070 }
bogdanm 0:9b334a45a8ff 1071
bogdanm 0:9b334a45a8ff 1072 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1073 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1074
bogdanm 0:9b334a45a8ff 1075 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1076 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1077
bogdanm 0:9b334a45a8ff 1078 /* Return function status */
bogdanm 0:9b334a45a8ff 1079 return HAL_OK;
bogdanm 0:9b334a45a8ff 1080 }
bogdanm 0:9b334a45a8ff 1081
bogdanm 0:9b334a45a8ff 1082 /**
bogdanm 0:9b334a45a8ff 1083 * @brief Initializes the CRYP peripheral in AES CTR decryption mode
bogdanm 0:9b334a45a8ff 1084 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 1085 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1086 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1087 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1088 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1089 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1090 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 1091 * @retval HAL status
bogdanm 0:9b334a45a8ff 1092 */
bogdanm 0:9b334a45a8ff 1093 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 1094 {
bogdanm 0:9b334a45a8ff 1095 /* Process Locked */
bogdanm 0:9b334a45a8ff 1096 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1097
bogdanm 0:9b334a45a8ff 1098 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1099 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1100 {
bogdanm 0:9b334a45a8ff 1101 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1102 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1103
bogdanm 0:9b334a45a8ff 1104 /* Set the key */
bogdanm 0:9b334a45a8ff 1105 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1106
bogdanm 0:9b334a45a8ff 1107 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 1108 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1109
bogdanm 0:9b334a45a8ff 1110 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1111 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1112
bogdanm 0:9b334a45a8ff 1113 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1114 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1115
bogdanm 0:9b334a45a8ff 1116 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1117 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1118
bogdanm 0:9b334a45a8ff 1119 /* Set the phase */
bogdanm 0:9b334a45a8ff 1120 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1121 }
bogdanm 0:9b334a45a8ff 1122
bogdanm 0:9b334a45a8ff 1123 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 1124 if(CRYP_ProcessData(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 1125 {
bogdanm 0:9b334a45a8ff 1126 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1127 }
bogdanm 0:9b334a45a8ff 1128
bogdanm 0:9b334a45a8ff 1129 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1130 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1131
bogdanm 0:9b334a45a8ff 1132 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1133 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1134
bogdanm 0:9b334a45a8ff 1135 /* Return function status */
bogdanm 0:9b334a45a8ff 1136 return HAL_OK;
bogdanm 0:9b334a45a8ff 1137 }
bogdanm 0:9b334a45a8ff 1138
bogdanm 0:9b334a45a8ff 1139 /**
bogdanm 0:9b334a45a8ff 1140 * @brief Initializes the CRYP peripheral in AES ECB encryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1141 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1142 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1143 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1144 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1145 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1146 * @retval HAL status
bogdanm 0:9b334a45a8ff 1147 */
bogdanm 0:9b334a45a8ff 1148 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1149 {
bogdanm 0:9b334a45a8ff 1150 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1151 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1152
bogdanm 0:9b334a45a8ff 1153 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 1154 {
bogdanm 0:9b334a45a8ff 1155 /* Process Locked */
bogdanm 0:9b334a45a8ff 1156 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1157
bogdanm 0:9b334a45a8ff 1158 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1159 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1160 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1161 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1162
bogdanm 0:9b334a45a8ff 1163 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1164 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1165
bogdanm 0:9b334a45a8ff 1166 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1167 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1168 {
bogdanm 0:9b334a45a8ff 1169 /* Set the key */
bogdanm 0:9b334a45a8ff 1170 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1171
bogdanm 0:9b334a45a8ff 1172 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 1173 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB);
bogdanm 0:9b334a45a8ff 1174
bogdanm 0:9b334a45a8ff 1175 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1176 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1177
bogdanm 0:9b334a45a8ff 1178 /* Set the phase */
bogdanm 0:9b334a45a8ff 1179 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1180 }
bogdanm 0:9b334a45a8ff 1181
bogdanm 0:9b334a45a8ff 1182 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1183 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1184
bogdanm 0:9b334a45a8ff 1185 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1186 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1187
bogdanm 0:9b334a45a8ff 1188 /* Return function status */
bogdanm 0:9b334a45a8ff 1189 return HAL_OK;
bogdanm 0:9b334a45a8ff 1190 }
bogdanm 0:9b334a45a8ff 1191 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 1192 {
bogdanm 0:9b334a45a8ff 1193 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1194 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 1195 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1196 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1197 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1198 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1199 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1200 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1201 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1202 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1203 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1204 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 1205 {
bogdanm 0:9b334a45a8ff 1206 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 1207 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1208 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1209 }
bogdanm 0:9b334a45a8ff 1210 }
bogdanm 0:9b334a45a8ff 1211 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 1212 {
bogdanm 0:9b334a45a8ff 1213 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1214 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 1215 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1216 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1217 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1218 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1219 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1220 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1221 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1222 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1223 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1224 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1225 {
bogdanm 0:9b334a45a8ff 1226 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1227 /* Process Locked */
bogdanm 0:9b334a45a8ff 1228 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1229 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1230 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1231 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 1232 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1233 }
bogdanm 0:9b334a45a8ff 1234 }
bogdanm 0:9b334a45a8ff 1235
bogdanm 0:9b334a45a8ff 1236 /* Return function status */
bogdanm 0:9b334a45a8ff 1237 return HAL_OK;
bogdanm 0:9b334a45a8ff 1238 }
bogdanm 0:9b334a45a8ff 1239
bogdanm 0:9b334a45a8ff 1240 /**
bogdanm 0:9b334a45a8ff 1241 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1242 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1243 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1244 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1245 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1246 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1247 * @retval HAL status
bogdanm 0:9b334a45a8ff 1248 */
bogdanm 0:9b334a45a8ff 1249 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1250 {
bogdanm 0:9b334a45a8ff 1251 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1252 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1253
bogdanm 0:9b334a45a8ff 1254 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 1255 {
bogdanm 0:9b334a45a8ff 1256 /* Process Locked */
bogdanm 0:9b334a45a8ff 1257 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1258
bogdanm 0:9b334a45a8ff 1259 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1260 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1261 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1262 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1263
bogdanm 0:9b334a45a8ff 1264 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1265 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1266
bogdanm 0:9b334a45a8ff 1267 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1268 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1269 {
bogdanm 0:9b334a45a8ff 1270 /* Set the key */
bogdanm 0:9b334a45a8ff 1271 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1272
bogdanm 0:9b334a45a8ff 1273 /* Set the CRYP peripheral in AES CBC mode */
bogdanm 0:9b334a45a8ff 1274 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC);
bogdanm 0:9b334a45a8ff 1275
bogdanm 0:9b334a45a8ff 1276 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1277 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1278
bogdanm 0:9b334a45a8ff 1279 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1280 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1281
bogdanm 0:9b334a45a8ff 1282 /* Set the phase */
bogdanm 0:9b334a45a8ff 1283 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1284 }
bogdanm 0:9b334a45a8ff 1285 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1286 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1287
bogdanm 0:9b334a45a8ff 1288 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1289 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1290
bogdanm 0:9b334a45a8ff 1291 /* Return function status */
bogdanm 0:9b334a45a8ff 1292 return HAL_OK;
bogdanm 0:9b334a45a8ff 1293 }
bogdanm 0:9b334a45a8ff 1294 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 1295 {
bogdanm 0:9b334a45a8ff 1296 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1297 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 1298 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1299 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1300 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1301 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1302 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1303 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1304 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1305 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1306 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1307 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 1308 {
bogdanm 0:9b334a45a8ff 1309 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 1310 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1311 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1312 }
bogdanm 0:9b334a45a8ff 1313 }
bogdanm 0:9b334a45a8ff 1314 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 1315 {
bogdanm 0:9b334a45a8ff 1316 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1317 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 1318 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1319 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1320 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1321 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1322 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1323 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1324 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1325 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1326 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1327 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1328 {
bogdanm 0:9b334a45a8ff 1329 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1330 /* Process Locked */
bogdanm 0:9b334a45a8ff 1331 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1332 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1333 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1334 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 1335 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1336 }
bogdanm 0:9b334a45a8ff 1337 }
bogdanm 0:9b334a45a8ff 1338
bogdanm 0:9b334a45a8ff 1339 /* Return function status */
bogdanm 0:9b334a45a8ff 1340 return HAL_OK;
bogdanm 0:9b334a45a8ff 1341 }
bogdanm 0:9b334a45a8ff 1342
bogdanm 0:9b334a45a8ff 1343 /**
bogdanm 0:9b334a45a8ff 1344 * @brief Initializes the CRYP peripheral in AES CTR encryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1345 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1346 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1347 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1348 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1349 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1350 * @retval HAL status
bogdanm 0:9b334a45a8ff 1351 */
bogdanm 0:9b334a45a8ff 1352 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1353 {
bogdanm 0:9b334a45a8ff 1354 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1355 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1356
bogdanm 0:9b334a45a8ff 1357 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 1358 {
bogdanm 0:9b334a45a8ff 1359 /* Process Locked */
bogdanm 0:9b334a45a8ff 1360 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1361
bogdanm 0:9b334a45a8ff 1362 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1363 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1364 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1365 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1366
bogdanm 0:9b334a45a8ff 1367 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1368 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1369
bogdanm 0:9b334a45a8ff 1370 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1371 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1372 {
bogdanm 0:9b334a45a8ff 1373 /* Set the key */
bogdanm 0:9b334a45a8ff 1374 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1375
bogdanm 0:9b334a45a8ff 1376 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 1377 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR);
bogdanm 0:9b334a45a8ff 1378
bogdanm 0:9b334a45a8ff 1379 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1380 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1381
bogdanm 0:9b334a45a8ff 1382 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1383 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1384
bogdanm 0:9b334a45a8ff 1385 /* Set the phase */
bogdanm 0:9b334a45a8ff 1386 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1387 }
bogdanm 0:9b334a45a8ff 1388 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1389 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1390
bogdanm 0:9b334a45a8ff 1391 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1392 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1393
bogdanm 0:9b334a45a8ff 1394 /* Return function status */
bogdanm 0:9b334a45a8ff 1395 return HAL_OK;
bogdanm 0:9b334a45a8ff 1396 }
bogdanm 0:9b334a45a8ff 1397 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 1398 {
bogdanm 0:9b334a45a8ff 1399 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1400 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 1401 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1402 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1403 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1404 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1405 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1406 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1407 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1408 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1409 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1410 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 1411 {
bogdanm 0:9b334a45a8ff 1412 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 1413 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1414 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1415 }
bogdanm 0:9b334a45a8ff 1416 }
bogdanm 0:9b334a45a8ff 1417 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 1418 {
bogdanm 0:9b334a45a8ff 1419 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1420 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 1421 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1422 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1423 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1424 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1425 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1426 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1427 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1428 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1429 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1430 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1431 {
bogdanm 0:9b334a45a8ff 1432 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1433 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1434 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1435 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1436 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1437 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 1438 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1439 }
bogdanm 0:9b334a45a8ff 1440 }
bogdanm 0:9b334a45a8ff 1441
bogdanm 0:9b334a45a8ff 1442 /* Return function status */
bogdanm 0:9b334a45a8ff 1443 return HAL_OK;
bogdanm 0:9b334a45a8ff 1444 }
bogdanm 0:9b334a45a8ff 1445
bogdanm 0:9b334a45a8ff 1446
bogdanm 0:9b334a45a8ff 1447 /**
bogdanm 0:9b334a45a8ff 1448 * @brief Initializes the CRYP peripheral in AES ECB decryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1449 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1450 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1451 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1452 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1453 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1454 * @retval HAL status
bogdanm 0:9b334a45a8ff 1455 */
bogdanm 0:9b334a45a8ff 1456 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1457 {
bogdanm 0:9b334a45a8ff 1458 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 1459
bogdanm 0:9b334a45a8ff 1460 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1461 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1462
bogdanm 0:9b334a45a8ff 1463 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 1464 {
bogdanm 0:9b334a45a8ff 1465 /* Process Locked */
bogdanm 0:9b334a45a8ff 1466 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1467
bogdanm 0:9b334a45a8ff 1468 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1469 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1470 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1471 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1472
bogdanm 0:9b334a45a8ff 1473 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1474 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1475
bogdanm 0:9b334a45a8ff 1476 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1477 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1478 {
bogdanm 0:9b334a45a8ff 1479 /* Set the key */
bogdanm 0:9b334a45a8ff 1480 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1481
bogdanm 0:9b334a45a8ff 1482 /* Set the CRYP peripheral in AES Key mode */
bogdanm 0:9b334a45a8ff 1483 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1484 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1485 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1486
bogdanm 0:9b334a45a8ff 1487 /* Get tick */
bogdanm 0:9b334a45a8ff 1488 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1489
bogdanm 0:9b334a45a8ff 1490 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
bogdanm 0:9b334a45a8ff 1491 {
bogdanm 0:9b334a45a8ff 1492 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 1493 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1494 {
bogdanm 0:9b334a45a8ff 1495 /* Change state */
bogdanm 0:9b334a45a8ff 1496 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1497
bogdanm 0:9b334a45a8ff 1498 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1499 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1500
bogdanm 0:9b334a45a8ff 1501 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1502 }
bogdanm 0:9b334a45a8ff 1503 }
bogdanm 0:9b334a45a8ff 1504
bogdanm 0:9b334a45a8ff 1505 /* Reset the ALGOMODE bits*/
bogdanm 0:9b334a45a8ff 1506 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
bogdanm 0:9b334a45a8ff 1507
bogdanm 0:9b334a45a8ff 1508 /* Set the CRYP peripheral in AES ECB decryption mode */
bogdanm 0:9b334a45a8ff 1509 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1510
bogdanm 0:9b334a45a8ff 1511 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1512 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1513
bogdanm 0:9b334a45a8ff 1514 /* Set the phase */
bogdanm 0:9b334a45a8ff 1515 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1516 }
bogdanm 0:9b334a45a8ff 1517
bogdanm 0:9b334a45a8ff 1518 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1519 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1520
bogdanm 0:9b334a45a8ff 1521 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1522 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1523
bogdanm 0:9b334a45a8ff 1524 /* Return function status */
bogdanm 0:9b334a45a8ff 1525 return HAL_OK;
bogdanm 0:9b334a45a8ff 1526 }
bogdanm 0:9b334a45a8ff 1527 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 1528 {
bogdanm 0:9b334a45a8ff 1529 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1530 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 1531 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1532 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1533 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1534 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1535 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1536 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1537 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1538 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1539 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1540 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 1541 {
bogdanm 0:9b334a45a8ff 1542 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 1543 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1544 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1545 }
bogdanm 0:9b334a45a8ff 1546 }
bogdanm 0:9b334a45a8ff 1547 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 1548 {
bogdanm 0:9b334a45a8ff 1549 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1550 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 1551 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1552 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1553 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1554 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1555 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1556 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1557 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1558 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1559 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1560 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1561 {
bogdanm 0:9b334a45a8ff 1562 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1563 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1564 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1565 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1566 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1567 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 1568 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1569 }
bogdanm 0:9b334a45a8ff 1570 }
bogdanm 0:9b334a45a8ff 1571
bogdanm 0:9b334a45a8ff 1572 /* Return function status */
bogdanm 0:9b334a45a8ff 1573 return HAL_OK;
bogdanm 0:9b334a45a8ff 1574 }
bogdanm 0:9b334a45a8ff 1575
bogdanm 0:9b334a45a8ff 1576 /**
bogdanm 0:9b334a45a8ff 1577 * @brief Initializes the CRYP peripheral in AES CBC decryption mode using IT.
bogdanm 0:9b334a45a8ff 1578 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1579 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1580 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1581 * @param Size: Length of the plaintext buffer, must be a multiple of 16
bogdanm 0:9b334a45a8ff 1582 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1583 * @retval HAL status
bogdanm 0:9b334a45a8ff 1584 */
bogdanm 0:9b334a45a8ff 1585 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1586 {
bogdanm 0:9b334a45a8ff 1587
bogdanm 0:9b334a45a8ff 1588 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 1589 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1590 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1591
bogdanm 0:9b334a45a8ff 1592 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 1593 {
bogdanm 0:9b334a45a8ff 1594 /* Process Locked */
bogdanm 0:9b334a45a8ff 1595 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1596
bogdanm 0:9b334a45a8ff 1597 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 1598 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1599 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1600 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1601 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1602
bogdanm 0:9b334a45a8ff 1603 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1604 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1605
bogdanm 0:9b334a45a8ff 1606 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1607 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1608 {
bogdanm 0:9b334a45a8ff 1609 /* Set the key */
bogdanm 0:9b334a45a8ff 1610 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1611
bogdanm 0:9b334a45a8ff 1612 /* Set the CRYP peripheral in AES Key mode */
bogdanm 0:9b334a45a8ff 1613 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1614
bogdanm 0:9b334a45a8ff 1615 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1616 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1617
bogdanm 0:9b334a45a8ff 1618 /* Get tick */
bogdanm 0:9b334a45a8ff 1619 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1620
bogdanm 0:9b334a45a8ff 1621 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
bogdanm 0:9b334a45a8ff 1622 {
bogdanm 0:9b334a45a8ff 1623 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 1624 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1625 {
bogdanm 0:9b334a45a8ff 1626 /* Change state */
bogdanm 0:9b334a45a8ff 1627 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1628
bogdanm 0:9b334a45a8ff 1629 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1630 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1631
bogdanm 0:9b334a45a8ff 1632 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1633 }
bogdanm 0:9b334a45a8ff 1634 }
bogdanm 0:9b334a45a8ff 1635
bogdanm 0:9b334a45a8ff 1636 /* Reset the ALGOMODE bits*/
bogdanm 0:9b334a45a8ff 1637 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
bogdanm 0:9b334a45a8ff 1638
bogdanm 0:9b334a45a8ff 1639 /* Set the CRYP peripheral in AES CBC decryption mode */
bogdanm 0:9b334a45a8ff 1640 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1641
bogdanm 0:9b334a45a8ff 1642 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1643 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1644
bogdanm 0:9b334a45a8ff 1645 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1646 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1647
bogdanm 0:9b334a45a8ff 1648 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1649 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1650
bogdanm 0:9b334a45a8ff 1651 /* Set the phase */
bogdanm 0:9b334a45a8ff 1652 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1653 }
bogdanm 0:9b334a45a8ff 1654
bogdanm 0:9b334a45a8ff 1655 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1656 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1657
bogdanm 0:9b334a45a8ff 1658 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1659 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1660
bogdanm 0:9b334a45a8ff 1661 /* Return function status */
bogdanm 0:9b334a45a8ff 1662 return HAL_OK;
bogdanm 0:9b334a45a8ff 1663 }
bogdanm 0:9b334a45a8ff 1664 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 1665 {
bogdanm 0:9b334a45a8ff 1666 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1667 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 1668 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1669 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1670 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1671 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1672 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1673 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1674 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1675 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1676 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1677 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 1678 {
bogdanm 0:9b334a45a8ff 1679 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 1680 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1681 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1682 }
bogdanm 0:9b334a45a8ff 1683 }
bogdanm 0:9b334a45a8ff 1684 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 1685 {
bogdanm 0:9b334a45a8ff 1686 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1687 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 1688 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1689 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1690 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1691 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1692 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1693 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1694 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1695 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1696 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1697 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1698 {
bogdanm 0:9b334a45a8ff 1699 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1700 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1701 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1702 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1703 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1704 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 1705 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1706 }
bogdanm 0:9b334a45a8ff 1707 }
bogdanm 0:9b334a45a8ff 1708
bogdanm 0:9b334a45a8ff 1709 /* Return function status */
bogdanm 0:9b334a45a8ff 1710 return HAL_OK;
bogdanm 0:9b334a45a8ff 1711 }
bogdanm 0:9b334a45a8ff 1712
bogdanm 0:9b334a45a8ff 1713 /**
bogdanm 0:9b334a45a8ff 1714 * @brief Initializes the CRYP peripheral in AES CTR decryption mode using Interrupt.
bogdanm 0:9b334a45a8ff 1715 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1716 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1717 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1718 * @param Size: Length of the plaintext buffer, must be a multiple of 16
bogdanm 0:9b334a45a8ff 1719 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1720 * @retval HAL status
bogdanm 0:9b334a45a8ff 1721 */
bogdanm 0:9b334a45a8ff 1722 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 1723 {
bogdanm 0:9b334a45a8ff 1724 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1725 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1726
bogdanm 0:9b334a45a8ff 1727 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 1728 {
bogdanm 0:9b334a45a8ff 1729 /* Process Locked */
bogdanm 0:9b334a45a8ff 1730 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1731
bogdanm 0:9b334a45a8ff 1732 /* Get the buffer addresses and sizes */
bogdanm 0:9b334a45a8ff 1733 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 1734 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 1735 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 1736 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 1737
bogdanm 0:9b334a45a8ff 1738 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1739 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1740
bogdanm 0:9b334a45a8ff 1741 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1742 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1743 {
bogdanm 0:9b334a45a8ff 1744 /* Set the key */
bogdanm 0:9b334a45a8ff 1745 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1746
bogdanm 0:9b334a45a8ff 1747 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 1748 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 1749
bogdanm 0:9b334a45a8ff 1750 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1751 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1752
bogdanm 0:9b334a45a8ff 1753 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1754 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1755
bogdanm 0:9b334a45a8ff 1756 /* Set the phase */
bogdanm 0:9b334a45a8ff 1757 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1758 }
bogdanm 0:9b334a45a8ff 1759
bogdanm 0:9b334a45a8ff 1760 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 1761 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1762
bogdanm 0:9b334a45a8ff 1763 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 1764 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 1765
bogdanm 0:9b334a45a8ff 1766 /* Return function status */
bogdanm 0:9b334a45a8ff 1767 return HAL_OK;
bogdanm 0:9b334a45a8ff 1768 }
bogdanm 0:9b334a45a8ff 1769 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 1770 {
bogdanm 0:9b334a45a8ff 1771 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 1772 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 1773 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1774 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1775 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1776 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1777 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1778 inputaddr+=4;
bogdanm 0:9b334a45a8ff 1779 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 1780 hcryp->pCrypInBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1781 hcryp->CrypInCount -= 16;
bogdanm 0:9b334a45a8ff 1782 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 1783 {
bogdanm 0:9b334a45a8ff 1784 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 1785 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 1786 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1787 }
bogdanm 0:9b334a45a8ff 1788 }
bogdanm 0:9b334a45a8ff 1789 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 1790 {
bogdanm 0:9b334a45a8ff 1791 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 1792 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 1793 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1794 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1795 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1796 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1797 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1798 outputaddr+=4;
bogdanm 0:9b334a45a8ff 1799 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 1800 hcryp->pCrypOutBuffPtr += 16;
bogdanm 0:9b334a45a8ff 1801 hcryp->CrypOutCount -= 16;
bogdanm 0:9b334a45a8ff 1802 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 1803 {
bogdanm 0:9b334a45a8ff 1804 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 1805 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1806 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1807 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1808 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 1809 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 1810 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 1811 }
bogdanm 0:9b334a45a8ff 1812 }
bogdanm 0:9b334a45a8ff 1813
bogdanm 0:9b334a45a8ff 1814 /* Return function status */
bogdanm 0:9b334a45a8ff 1815 return HAL_OK;
bogdanm 0:9b334a45a8ff 1816 }
bogdanm 0:9b334a45a8ff 1817
bogdanm 0:9b334a45a8ff 1818 /**
bogdanm 0:9b334a45a8ff 1819 * @brief Initializes the CRYP peripheral in AES ECB encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1820 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1821 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1822 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1823 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1824 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1825 * @retval HAL status
bogdanm 0:9b334a45a8ff 1826 */
bogdanm 0:9b334a45a8ff 1827 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1828 {
bogdanm 0:9b334a45a8ff 1829 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1830 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1831
bogdanm 0:9b334a45a8ff 1832 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 1833 {
bogdanm 0:9b334a45a8ff 1834 /* Process Locked */
bogdanm 0:9b334a45a8ff 1835 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1836
bogdanm 0:9b334a45a8ff 1837 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1838 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1839
bogdanm 0:9b334a45a8ff 1840 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1841 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1842
bogdanm 0:9b334a45a8ff 1843 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1844 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1845 {
bogdanm 0:9b334a45a8ff 1846 /* Set the key */
bogdanm 0:9b334a45a8ff 1847 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1848
bogdanm 0:9b334a45a8ff 1849 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 1850 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB);
bogdanm 0:9b334a45a8ff 1851
bogdanm 0:9b334a45a8ff 1852 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1853 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1854
bogdanm 0:9b334a45a8ff 1855 /* Set the phase */
bogdanm 0:9b334a45a8ff 1856 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1857 }
bogdanm 0:9b334a45a8ff 1858 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1859 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1860
bogdanm 0:9b334a45a8ff 1861 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1862 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1863
bogdanm 0:9b334a45a8ff 1864 /* Return function status */
bogdanm 0:9b334a45a8ff 1865 return HAL_OK;
bogdanm 0:9b334a45a8ff 1866 }
bogdanm 0:9b334a45a8ff 1867 else
bogdanm 0:9b334a45a8ff 1868 {
bogdanm 0:9b334a45a8ff 1869 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1870 }
bogdanm 0:9b334a45a8ff 1871 }
bogdanm 0:9b334a45a8ff 1872
bogdanm 0:9b334a45a8ff 1873 /**
bogdanm 0:9b334a45a8ff 1874 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1875 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1876 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1877 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1878 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1879 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1880 * @retval HAL status
bogdanm 0:9b334a45a8ff 1881 */
bogdanm 0:9b334a45a8ff 1882 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1883 {
bogdanm 0:9b334a45a8ff 1884 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1885 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1886
bogdanm 0:9b334a45a8ff 1887 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 1888 {
bogdanm 0:9b334a45a8ff 1889 /* Process Locked */
bogdanm 0:9b334a45a8ff 1890 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1891
bogdanm 0:9b334a45a8ff 1892 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1893 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1894
bogdanm 0:9b334a45a8ff 1895 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1896 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1897
bogdanm 0:9b334a45a8ff 1898 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1899 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1900 {
bogdanm 0:9b334a45a8ff 1901 /* Set the key */
bogdanm 0:9b334a45a8ff 1902 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1903
bogdanm 0:9b334a45a8ff 1904 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 1905 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC);
bogdanm 0:9b334a45a8ff 1906
bogdanm 0:9b334a45a8ff 1907 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1908 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1909
bogdanm 0:9b334a45a8ff 1910 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1911 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1912
bogdanm 0:9b334a45a8ff 1913 /* Set the phase */
bogdanm 0:9b334a45a8ff 1914 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1915 }
bogdanm 0:9b334a45a8ff 1916 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1917 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1918
bogdanm 0:9b334a45a8ff 1919 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1920 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1921
bogdanm 0:9b334a45a8ff 1922 /* Return function status */
bogdanm 0:9b334a45a8ff 1923 return HAL_OK;
bogdanm 0:9b334a45a8ff 1924 }
bogdanm 0:9b334a45a8ff 1925 else
bogdanm 0:9b334a45a8ff 1926 {
bogdanm 0:9b334a45a8ff 1927 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1928 }
bogdanm 0:9b334a45a8ff 1929 }
bogdanm 0:9b334a45a8ff 1930
bogdanm 0:9b334a45a8ff 1931 /**
bogdanm 0:9b334a45a8ff 1932 * @brief Initializes the CRYP peripheral in AES CTR encryption mode using DMA.
bogdanm 0:9b334a45a8ff 1933 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1934 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1935 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1936 * @param Size: Length of the plaintext buffer, must be a multiple of 16.
bogdanm 0:9b334a45a8ff 1937 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1938 * @retval HAL status
bogdanm 0:9b334a45a8ff 1939 */
bogdanm 0:9b334a45a8ff 1940 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 1941 {
bogdanm 0:9b334a45a8ff 1942 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 1943 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 1944
bogdanm 0:9b334a45a8ff 1945 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 1946 {
bogdanm 0:9b334a45a8ff 1947 /* Process Locked */
bogdanm 0:9b334a45a8ff 1948 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 1949
bogdanm 0:9b334a45a8ff 1950 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 1951 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 1952
bogdanm 0:9b334a45a8ff 1953 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 1954 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1955
bogdanm 0:9b334a45a8ff 1956 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 1957 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 1958 {
bogdanm 0:9b334a45a8ff 1959 /* Set the key */
bogdanm 0:9b334a45a8ff 1960 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 1961
bogdanm 0:9b334a45a8ff 1962 /* Set the CRYP peripheral in AES ECB mode */
bogdanm 0:9b334a45a8ff 1963 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR);
bogdanm 0:9b334a45a8ff 1964
bogdanm 0:9b334a45a8ff 1965 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 1966 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 1967
bogdanm 0:9b334a45a8ff 1968 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 1969 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 1970
bogdanm 0:9b334a45a8ff 1971 /* Set the phase */
bogdanm 0:9b334a45a8ff 1972 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 1973 }
bogdanm 0:9b334a45a8ff 1974
bogdanm 0:9b334a45a8ff 1975 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 1976 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 1977
bogdanm 0:9b334a45a8ff 1978 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1979 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 1980
bogdanm 0:9b334a45a8ff 1981 /* Return function status */
bogdanm 0:9b334a45a8ff 1982 return HAL_OK;
bogdanm 0:9b334a45a8ff 1983 }
bogdanm 0:9b334a45a8ff 1984 else
bogdanm 0:9b334a45a8ff 1985 {
bogdanm 0:9b334a45a8ff 1986 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 1987 }
bogdanm 0:9b334a45a8ff 1988 }
bogdanm 0:9b334a45a8ff 1989
bogdanm 0:9b334a45a8ff 1990 /**
bogdanm 0:9b334a45a8ff 1991 * @brief Initializes the CRYP peripheral in AES ECB decryption mode using DMA.
bogdanm 0:9b334a45a8ff 1992 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 1993 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 1994 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 1995 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 1996 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 1997 * @retval HAL status
bogdanm 0:9b334a45a8ff 1998 */
bogdanm 0:9b334a45a8ff 1999 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2000 {
bogdanm 0:9b334a45a8ff 2001 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 2002 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2003 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2004
bogdanm 0:9b334a45a8ff 2005 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2006 {
bogdanm 0:9b334a45a8ff 2007 /* Process Locked */
bogdanm 0:9b334a45a8ff 2008 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2009
bogdanm 0:9b334a45a8ff 2010 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2011 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2012
bogdanm 0:9b334a45a8ff 2013 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2014 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2015
bogdanm 0:9b334a45a8ff 2016 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 2017 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 2018 {
bogdanm 0:9b334a45a8ff 2019 /* Set the key */
bogdanm 0:9b334a45a8ff 2020 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 2021
bogdanm 0:9b334a45a8ff 2022 /* Set the CRYP peripheral in AES Key mode */
bogdanm 0:9b334a45a8ff 2023 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2024
bogdanm 0:9b334a45a8ff 2025 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2026 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2027
bogdanm 0:9b334a45a8ff 2028 /* Get tick */
bogdanm 0:9b334a45a8ff 2029 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 2030
bogdanm 0:9b334a45a8ff 2031 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
bogdanm 0:9b334a45a8ff 2032 {
bogdanm 0:9b334a45a8ff 2033 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 2034 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 2035 {
bogdanm 0:9b334a45a8ff 2036 /* Change state */
bogdanm 0:9b334a45a8ff 2037 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 2038
bogdanm 0:9b334a45a8ff 2039 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2040 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2041
bogdanm 0:9b334a45a8ff 2042 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2043 }
bogdanm 0:9b334a45a8ff 2044 }
bogdanm 0:9b334a45a8ff 2045
bogdanm 0:9b334a45a8ff 2046 /* Reset the ALGOMODE bits*/
bogdanm 0:9b334a45a8ff 2047 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
bogdanm 0:9b334a45a8ff 2048
bogdanm 0:9b334a45a8ff 2049 /* Set the CRYP peripheral in AES ECB decryption mode */
bogdanm 0:9b334a45a8ff 2050 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_ECB | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2051
bogdanm 0:9b334a45a8ff 2052 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 2053 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 2054
bogdanm 0:9b334a45a8ff 2055 /* Set the phase */
bogdanm 0:9b334a45a8ff 2056 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 2057 }
bogdanm 0:9b334a45a8ff 2058
bogdanm 0:9b334a45a8ff 2059 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2060 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2061
bogdanm 0:9b334a45a8ff 2062 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2063 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2064
bogdanm 0:9b334a45a8ff 2065 /* Return function status */
bogdanm 0:9b334a45a8ff 2066 return HAL_OK;
bogdanm 0:9b334a45a8ff 2067 }
bogdanm 0:9b334a45a8ff 2068 else
bogdanm 0:9b334a45a8ff 2069 {
bogdanm 0:9b334a45a8ff 2070 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2071 }
bogdanm 0:9b334a45a8ff 2072 }
bogdanm 0:9b334a45a8ff 2073
bogdanm 0:9b334a45a8ff 2074 /**
bogdanm 0:9b334a45a8ff 2075 * @brief Initializes the CRYP peripheral in AES CBC encryption mode using DMA.
bogdanm 0:9b334a45a8ff 2076 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2077 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2078 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2079 * @param Size: Length of the plaintext buffer, must be a multiple of 16 bytes
bogdanm 0:9b334a45a8ff 2080 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2081 * @retval HAL status
bogdanm 0:9b334a45a8ff 2082 */
bogdanm 0:9b334a45a8ff 2083 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2084 {
bogdanm 0:9b334a45a8ff 2085 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 2086 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2087 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2088
bogdanm 0:9b334a45a8ff 2089 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2090 {
bogdanm 0:9b334a45a8ff 2091 /* Process Locked */
bogdanm 0:9b334a45a8ff 2092 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2093
bogdanm 0:9b334a45a8ff 2094 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2095 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2096
bogdanm 0:9b334a45a8ff 2097 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2098 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2099
bogdanm 0:9b334a45a8ff 2100 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 2101 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 2102 {
bogdanm 0:9b334a45a8ff 2103 /* Set the key */
bogdanm 0:9b334a45a8ff 2104 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 2105
bogdanm 0:9b334a45a8ff 2106 /* Set the CRYP peripheral in AES Key mode */
bogdanm 0:9b334a45a8ff 2107 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_KEY | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2108
bogdanm 0:9b334a45a8ff 2109 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2110 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2111
bogdanm 0:9b334a45a8ff 2112 /* Get tick */
bogdanm 0:9b334a45a8ff 2113 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 2114
bogdanm 0:9b334a45a8ff 2115 while(HAL_IS_BIT_SET(hcryp->Instance->SR, CRYP_FLAG_BUSY))
bogdanm 0:9b334a45a8ff 2116 {
bogdanm 0:9b334a45a8ff 2117 /* Check for the Timeout */
bogdanm 0:9b334a45a8ff 2118 if((HAL_GetTick() - tickstart ) > CRYP_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 2119 {
bogdanm 0:9b334a45a8ff 2120 /* Change state */
bogdanm 0:9b334a45a8ff 2121 hcryp->State = HAL_CRYP_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 2122
bogdanm 0:9b334a45a8ff 2123 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2124 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2125
bogdanm 0:9b334a45a8ff 2126 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2127 }
bogdanm 0:9b334a45a8ff 2128 }
bogdanm 0:9b334a45a8ff 2129
bogdanm 0:9b334a45a8ff 2130 /* Reset the ALGOMODE bits*/
bogdanm 0:9b334a45a8ff 2131 CRYP->CR &= (uint32_t)(~CRYP_CR_ALGOMODE);
bogdanm 0:9b334a45a8ff 2132
bogdanm 0:9b334a45a8ff 2133 /* Set the CRYP peripheral in AES CBC decryption mode */
bogdanm 0:9b334a45a8ff 2134 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CBC | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2135
bogdanm 0:9b334a45a8ff 2136 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 2137 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 2138
bogdanm 0:9b334a45a8ff 2139 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 2140 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 2141
bogdanm 0:9b334a45a8ff 2142 /* Set the phase */
bogdanm 0:9b334a45a8ff 2143 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 2144 }
bogdanm 0:9b334a45a8ff 2145
bogdanm 0:9b334a45a8ff 2146 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2147 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2148
bogdanm 0:9b334a45a8ff 2149 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2150 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2151
bogdanm 0:9b334a45a8ff 2152 /* Return function status */
bogdanm 0:9b334a45a8ff 2153 return HAL_OK;
bogdanm 0:9b334a45a8ff 2154 }
bogdanm 0:9b334a45a8ff 2155 else
bogdanm 0:9b334a45a8ff 2156 {
bogdanm 0:9b334a45a8ff 2157 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2158 }
bogdanm 0:9b334a45a8ff 2159 }
bogdanm 0:9b334a45a8ff 2160
bogdanm 0:9b334a45a8ff 2161 /**
bogdanm 0:9b334a45a8ff 2162 * @brief Initializes the CRYP peripheral in AES CTR decryption mode using DMA.
bogdanm 0:9b334a45a8ff 2163 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2164 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2165 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2166 * @param Size: Length of the plaintext buffer, must be a multiple of 16
bogdanm 0:9b334a45a8ff 2167 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2168 * @retval HAL status
bogdanm 0:9b334a45a8ff 2169 */
bogdanm 0:9b334a45a8ff 2170 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2171 {
bogdanm 0:9b334a45a8ff 2172 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2173 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2174
bogdanm 0:9b334a45a8ff 2175 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2176 {
bogdanm 0:9b334a45a8ff 2177 /* Process Locked */
bogdanm 0:9b334a45a8ff 2178 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2179
bogdanm 0:9b334a45a8ff 2180 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2181 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2182
bogdanm 0:9b334a45a8ff 2183 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2184 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2185
bogdanm 0:9b334a45a8ff 2186 /* Check if initialization phase has already been performed */
bogdanm 0:9b334a45a8ff 2187 if(hcryp->Phase == HAL_CRYP_PHASE_READY)
bogdanm 0:9b334a45a8ff 2188 {
bogdanm 0:9b334a45a8ff 2189 /* Set the key */
bogdanm 0:9b334a45a8ff 2190 CRYP_SetKey(hcryp, hcryp->Init.pKey, hcryp->Init.KeySize);
bogdanm 0:9b334a45a8ff 2191
bogdanm 0:9b334a45a8ff 2192 /* Set the CRYP peripheral in AES CTR mode */
bogdanm 0:9b334a45a8ff 2193 __HAL_CRYP_SET_MODE(hcryp, CRYP_CR_ALGOMODE_AES_CTR | CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2194
bogdanm 0:9b334a45a8ff 2195 /* Set the Initialization Vector */
bogdanm 0:9b334a45a8ff 2196 CRYP_SetInitVector(hcryp, hcryp->Init.pInitVect, CRYP_KEYSIZE_128B);
bogdanm 0:9b334a45a8ff 2197
bogdanm 0:9b334a45a8ff 2198 /* Flush FIFO */
bogdanm 0:9b334a45a8ff 2199 __HAL_CRYP_FIFO_FLUSH(hcryp);
bogdanm 0:9b334a45a8ff 2200
bogdanm 0:9b334a45a8ff 2201 /* Set the phase */
bogdanm 0:9b334a45a8ff 2202 hcryp->Phase = HAL_CRYP_PHASE_PROCESS;
bogdanm 0:9b334a45a8ff 2203 }
bogdanm 0:9b334a45a8ff 2204
bogdanm 0:9b334a45a8ff 2205 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2206 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2207
bogdanm 0:9b334a45a8ff 2208 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2209 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2210
bogdanm 0:9b334a45a8ff 2211 /* Return function status */
bogdanm 0:9b334a45a8ff 2212 return HAL_OK;
bogdanm 0:9b334a45a8ff 2213 }
bogdanm 0:9b334a45a8ff 2214 else
bogdanm 0:9b334a45a8ff 2215 {
bogdanm 0:9b334a45a8ff 2216 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2217 }
bogdanm 0:9b334a45a8ff 2218 }
bogdanm 0:9b334a45a8ff 2219
bogdanm 0:9b334a45a8ff 2220
bogdanm 0:9b334a45a8ff 2221 /**
bogdanm 0:9b334a45a8ff 2222 * @}
bogdanm 0:9b334a45a8ff 2223 */
bogdanm 0:9b334a45a8ff 2224
bogdanm 0:9b334a45a8ff 2225 /** @defgroup CRYP_Exported_Functions_Group3 DES processing functions
bogdanm 0:9b334a45a8ff 2226 * @brief processing functions.
bogdanm 0:9b334a45a8ff 2227 *
bogdanm 0:9b334a45a8ff 2228 @verbatim
bogdanm 0:9b334a45a8ff 2229 ==============================================================================
bogdanm 0:9b334a45a8ff 2230 ##### DES processing functions #####
bogdanm 0:9b334a45a8ff 2231 ==============================================================================
bogdanm 0:9b334a45a8ff 2232 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 2233 (+) Encrypt plaintext using DES using ECB or CBC chaining modes
bogdanm 0:9b334a45a8ff 2234 (+) Decrypt cyphertext using ECB or CBC chaining modes
bogdanm 0:9b334a45a8ff 2235 [..] Three processing functions are available:
bogdanm 0:9b334a45a8ff 2236 (+) Polling mode
bogdanm 0:9b334a45a8ff 2237 (+) Interrupt mode
bogdanm 0:9b334a45a8ff 2238 (+) DMA mode
bogdanm 0:9b334a45a8ff 2239
bogdanm 0:9b334a45a8ff 2240 @endverbatim
bogdanm 0:9b334a45a8ff 2241 * @{
bogdanm 0:9b334a45a8ff 2242 */
bogdanm 0:9b334a45a8ff 2243
bogdanm 0:9b334a45a8ff 2244 /**
bogdanm 0:9b334a45a8ff 2245 * @brief Initializes the CRYP peripheral in DES ECB encryption mode.
bogdanm 0:9b334a45a8ff 2246 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2247 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2248 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2249 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2250 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2251 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2252 * @retval HAL status
bogdanm 0:9b334a45a8ff 2253 */
bogdanm 0:9b334a45a8ff 2254 HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2255 {
bogdanm 0:9b334a45a8ff 2256 /* Process Locked */
bogdanm 0:9b334a45a8ff 2257 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2258
bogdanm 0:9b334a45a8ff 2259 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2260 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2261
bogdanm 0:9b334a45a8ff 2262 /* Set CRYP peripheral in DES ECB encryption mode */
bogdanm 0:9b334a45a8ff 2263 CRYP_SetDESECBMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2264
bogdanm 0:9b334a45a8ff 2265 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2266 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2267
bogdanm 0:9b334a45a8ff 2268 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 2269 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 2270 {
bogdanm 0:9b334a45a8ff 2271 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2272 }
bogdanm 0:9b334a45a8ff 2273
bogdanm 0:9b334a45a8ff 2274 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2275 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2276
bogdanm 0:9b334a45a8ff 2277 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2278 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2279
bogdanm 0:9b334a45a8ff 2280 /* Return function status */
bogdanm 0:9b334a45a8ff 2281 return HAL_OK;
bogdanm 0:9b334a45a8ff 2282 }
bogdanm 0:9b334a45a8ff 2283
bogdanm 0:9b334a45a8ff 2284 /**
bogdanm 0:9b334a45a8ff 2285 * @brief Initializes the CRYP peripheral in DES ECB decryption mode.
bogdanm 0:9b334a45a8ff 2286 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2287 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2288 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2289 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2290 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2291 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2292 * @retval HAL status
bogdanm 0:9b334a45a8ff 2293 */
bogdanm 0:9b334a45a8ff 2294 HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2295 {
bogdanm 0:9b334a45a8ff 2296 /* Process Locked */
bogdanm 0:9b334a45a8ff 2297 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2298
bogdanm 0:9b334a45a8ff 2299 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2300 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2301
bogdanm 0:9b334a45a8ff 2302 /* Set CRYP peripheral in DES ECB decryption mode */
bogdanm 0:9b334a45a8ff 2303 CRYP_SetDESECBMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2304
bogdanm 0:9b334a45a8ff 2305 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2306 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2307
bogdanm 0:9b334a45a8ff 2308 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 2309 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 2310 {
bogdanm 0:9b334a45a8ff 2311 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2312 }
bogdanm 0:9b334a45a8ff 2313
bogdanm 0:9b334a45a8ff 2314 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2315 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2316
bogdanm 0:9b334a45a8ff 2317 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2318 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2319
bogdanm 0:9b334a45a8ff 2320 /* Return function status */
bogdanm 0:9b334a45a8ff 2321 return HAL_OK;
bogdanm 0:9b334a45a8ff 2322 }
bogdanm 0:9b334a45a8ff 2323
bogdanm 0:9b334a45a8ff 2324 /**
bogdanm 0:9b334a45a8ff 2325 * @brief Initializes the CRYP peripheral in DES CBC encryption mode.
bogdanm 0:9b334a45a8ff 2326 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2327 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2328 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2329 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2330 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2331 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2332 * @retval HAL status
bogdanm 0:9b334a45a8ff 2333 */
bogdanm 0:9b334a45a8ff 2334 HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2335 {
bogdanm 0:9b334a45a8ff 2336 /* Process Locked */
bogdanm 0:9b334a45a8ff 2337 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2338
bogdanm 0:9b334a45a8ff 2339 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2340 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2341
bogdanm 0:9b334a45a8ff 2342 /* Set CRYP peripheral in DES CBC encryption mode */
bogdanm 0:9b334a45a8ff 2343 CRYP_SetDESCBCMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2344
bogdanm 0:9b334a45a8ff 2345 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2346 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2347
bogdanm 0:9b334a45a8ff 2348 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 2349 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 2350 {
bogdanm 0:9b334a45a8ff 2351 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2352 }
bogdanm 0:9b334a45a8ff 2353
bogdanm 0:9b334a45a8ff 2354 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2355 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2356
bogdanm 0:9b334a45a8ff 2357 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2358 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2359
bogdanm 0:9b334a45a8ff 2360 /* Return function status */
bogdanm 0:9b334a45a8ff 2361 return HAL_OK;
bogdanm 0:9b334a45a8ff 2362 }
bogdanm 0:9b334a45a8ff 2363
bogdanm 0:9b334a45a8ff 2364 /**
bogdanm 0:9b334a45a8ff 2365 * @brief Initializes the CRYP peripheral in DES ECB decryption mode.
bogdanm 0:9b334a45a8ff 2366 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2367 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2368 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2369 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2370 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2371 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2372 * @retval HAL status
bogdanm 0:9b334a45a8ff 2373 */
bogdanm 0:9b334a45a8ff 2374 HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2375 {
bogdanm 0:9b334a45a8ff 2376 /* Process Locked */
bogdanm 0:9b334a45a8ff 2377 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2378
bogdanm 0:9b334a45a8ff 2379 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2380 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2381
bogdanm 0:9b334a45a8ff 2382 /* Set CRYP peripheral in DES CBC decryption mode */
bogdanm 0:9b334a45a8ff 2383 CRYP_SetDESCBCMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2384
bogdanm 0:9b334a45a8ff 2385 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2386 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2387
bogdanm 0:9b334a45a8ff 2388 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 2389 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 2390 {
bogdanm 0:9b334a45a8ff 2391 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2392 }
bogdanm 0:9b334a45a8ff 2393
bogdanm 0:9b334a45a8ff 2394 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2395 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2396
bogdanm 0:9b334a45a8ff 2397 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2398 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2399
bogdanm 0:9b334a45a8ff 2400 /* Return function status */
bogdanm 0:9b334a45a8ff 2401 return HAL_OK;
bogdanm 0:9b334a45a8ff 2402 }
bogdanm 0:9b334a45a8ff 2403
bogdanm 0:9b334a45a8ff 2404 /**
bogdanm 0:9b334a45a8ff 2405 * @brief Initializes the CRYP peripheral in DES ECB encryption mode using IT.
bogdanm 0:9b334a45a8ff 2406 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2407 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2408 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2409 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2410 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2411 * @retval HAL status
bogdanm 0:9b334a45a8ff 2412 */
bogdanm 0:9b334a45a8ff 2413 HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 2414 {
bogdanm 0:9b334a45a8ff 2415 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2416 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2417
bogdanm 0:9b334a45a8ff 2418 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 2419 {
bogdanm 0:9b334a45a8ff 2420 /* Process Locked */
bogdanm 0:9b334a45a8ff 2421 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2422
bogdanm 0:9b334a45a8ff 2423 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 2424 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 2425 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 2426 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 2427
bogdanm 0:9b334a45a8ff 2428 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2429 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2430
bogdanm 0:9b334a45a8ff 2431 /* Set CRYP peripheral in DES ECB encryption mode */
bogdanm 0:9b334a45a8ff 2432 CRYP_SetDESECBMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2433
bogdanm 0:9b334a45a8ff 2434 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 2435 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2436
bogdanm 0:9b334a45a8ff 2437 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2438 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2439
bogdanm 0:9b334a45a8ff 2440 /* Return function status */
bogdanm 0:9b334a45a8ff 2441 return HAL_OK;
bogdanm 0:9b334a45a8ff 2442 }
bogdanm 0:9b334a45a8ff 2443 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 2444 {
bogdanm 0:9b334a45a8ff 2445 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 2446 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 2447 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2448 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2449 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2450
bogdanm 0:9b334a45a8ff 2451 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2452 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 2453 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 2454 {
bogdanm 0:9b334a45a8ff 2455 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 2456 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 2457 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2458 }
bogdanm 0:9b334a45a8ff 2459 }
bogdanm 0:9b334a45a8ff 2460 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 2461 {
bogdanm 0:9b334a45a8ff 2462 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 2463 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 2464 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2465 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2466 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2467
bogdanm 0:9b334a45a8ff 2468 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2469 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 2470 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 2471 {
bogdanm 0:9b334a45a8ff 2472 /* Disable IT */
bogdanm 0:9b334a45a8ff 2473 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2474 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 2475 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 2476 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2477 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2478 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2479 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2480 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 2481 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2482 }
bogdanm 0:9b334a45a8ff 2483 }
bogdanm 0:9b334a45a8ff 2484
bogdanm 0:9b334a45a8ff 2485 /* Return function status */
bogdanm 0:9b334a45a8ff 2486 return HAL_OK;
bogdanm 0:9b334a45a8ff 2487 }
bogdanm 0:9b334a45a8ff 2488
bogdanm 0:9b334a45a8ff 2489 /**
bogdanm 0:9b334a45a8ff 2490 * @brief Initializes the CRYP peripheral in DES CBC encryption mode using interrupt.
bogdanm 0:9b334a45a8ff 2491 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2492 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2493 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2494 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2495 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2496 * @retval HAL status
bogdanm 0:9b334a45a8ff 2497 */
bogdanm 0:9b334a45a8ff 2498 HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 2499 {
bogdanm 0:9b334a45a8ff 2500 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2501 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2502
bogdanm 0:9b334a45a8ff 2503 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 2504 {
bogdanm 0:9b334a45a8ff 2505 /* Process Locked */
bogdanm 0:9b334a45a8ff 2506 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2507
bogdanm 0:9b334a45a8ff 2508 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 2509 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 2510 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 2511 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 2512
bogdanm 0:9b334a45a8ff 2513 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2514 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2515
bogdanm 0:9b334a45a8ff 2516 /* Set CRYP peripheral in DES CBC encryption mode */
bogdanm 0:9b334a45a8ff 2517 CRYP_SetDESCBCMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2518
bogdanm 0:9b334a45a8ff 2519 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 2520 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2521
bogdanm 0:9b334a45a8ff 2522 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2523 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2524
bogdanm 0:9b334a45a8ff 2525 /* Return function status */
bogdanm 0:9b334a45a8ff 2526 return HAL_OK;
bogdanm 0:9b334a45a8ff 2527 }
bogdanm 0:9b334a45a8ff 2528
bogdanm 0:9b334a45a8ff 2529 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 2530 {
bogdanm 0:9b334a45a8ff 2531 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 2532 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 2533 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2534 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2535 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2536
bogdanm 0:9b334a45a8ff 2537 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2538 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 2539 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 2540 {
bogdanm 0:9b334a45a8ff 2541 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 2542 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 2543 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2544 }
bogdanm 0:9b334a45a8ff 2545 }
bogdanm 0:9b334a45a8ff 2546 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 2547 {
bogdanm 0:9b334a45a8ff 2548 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 2549 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 2550 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2551 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2552 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2553
bogdanm 0:9b334a45a8ff 2554 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2555 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 2556 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 2557 {
bogdanm 0:9b334a45a8ff 2558 /* Disable IT */
bogdanm 0:9b334a45a8ff 2559 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2560 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 2561 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 2562 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2563 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2564 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2565 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2566 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 2567 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2568 }
bogdanm 0:9b334a45a8ff 2569 }
bogdanm 0:9b334a45a8ff 2570
bogdanm 0:9b334a45a8ff 2571 /* Return function status */
bogdanm 0:9b334a45a8ff 2572 return HAL_OK;
bogdanm 0:9b334a45a8ff 2573 }
bogdanm 0:9b334a45a8ff 2574
bogdanm 0:9b334a45a8ff 2575 /**
bogdanm 0:9b334a45a8ff 2576 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using IT.
bogdanm 0:9b334a45a8ff 2577 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2578 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2579 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2580 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2581 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2582 * @retval HAL status
bogdanm 0:9b334a45a8ff 2583 */
bogdanm 0:9b334a45a8ff 2584 HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2585 {
bogdanm 0:9b334a45a8ff 2586 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2587 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2588
bogdanm 0:9b334a45a8ff 2589 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 2590 {
bogdanm 0:9b334a45a8ff 2591 /* Process Locked */
bogdanm 0:9b334a45a8ff 2592 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2593
bogdanm 0:9b334a45a8ff 2594 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 2595 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 2596 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 2597 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 2598
bogdanm 0:9b334a45a8ff 2599 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2600 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2601
bogdanm 0:9b334a45a8ff 2602 /* Set CRYP peripheral in DES ECB decryption mode */
bogdanm 0:9b334a45a8ff 2603 CRYP_SetDESECBMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2604
bogdanm 0:9b334a45a8ff 2605 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 2606 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2607
bogdanm 0:9b334a45a8ff 2608 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2609 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2610
bogdanm 0:9b334a45a8ff 2611 /* Return function status */
bogdanm 0:9b334a45a8ff 2612 return HAL_OK;
bogdanm 0:9b334a45a8ff 2613 }
bogdanm 0:9b334a45a8ff 2614 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 2615 {
bogdanm 0:9b334a45a8ff 2616 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 2617 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 2618 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2619 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2620 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2621
bogdanm 0:9b334a45a8ff 2622 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2623 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 2624 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 2625 {
bogdanm 0:9b334a45a8ff 2626 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 2627 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 2628 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2629 }
bogdanm 0:9b334a45a8ff 2630 }
bogdanm 0:9b334a45a8ff 2631 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 2632 {
bogdanm 0:9b334a45a8ff 2633 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 2634 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 2635 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2636 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2637 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2638
bogdanm 0:9b334a45a8ff 2639 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2640 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 2641 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 2642 {
bogdanm 0:9b334a45a8ff 2643 /* Disable IT */
bogdanm 0:9b334a45a8ff 2644 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2645 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 2646 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 2647 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2648 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2649 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2650 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2651 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 2652 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2653 }
bogdanm 0:9b334a45a8ff 2654 }
bogdanm 0:9b334a45a8ff 2655
bogdanm 0:9b334a45a8ff 2656 /* Return function status */
bogdanm 0:9b334a45a8ff 2657 return HAL_OK;
bogdanm 0:9b334a45a8ff 2658 }
bogdanm 0:9b334a45a8ff 2659
bogdanm 0:9b334a45a8ff 2660 /**
bogdanm 0:9b334a45a8ff 2661 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using interrupt.
bogdanm 0:9b334a45a8ff 2662 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2663 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2664 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2665 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2666 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2667 * @retval HAL status
bogdanm 0:9b334a45a8ff 2668 */
bogdanm 0:9b334a45a8ff 2669 HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2670 {
bogdanm 0:9b334a45a8ff 2671 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2672 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2673
bogdanm 0:9b334a45a8ff 2674 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 2675 {
bogdanm 0:9b334a45a8ff 2676 /* Process Locked */
bogdanm 0:9b334a45a8ff 2677 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2678
bogdanm 0:9b334a45a8ff 2679 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 2680 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 2681 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 2682 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 2683
bogdanm 0:9b334a45a8ff 2684 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2685 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2686
bogdanm 0:9b334a45a8ff 2687 /* Set CRYP peripheral in DES CBC decryption mode */
bogdanm 0:9b334a45a8ff 2688 CRYP_SetDESCBCMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2689
bogdanm 0:9b334a45a8ff 2690 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 2691 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2692
bogdanm 0:9b334a45a8ff 2693 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2694 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2695
bogdanm 0:9b334a45a8ff 2696 /* Return function status */
bogdanm 0:9b334a45a8ff 2697 return HAL_OK;
bogdanm 0:9b334a45a8ff 2698 }
bogdanm 0:9b334a45a8ff 2699 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 2700 {
bogdanm 0:9b334a45a8ff 2701 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 2702 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 2703 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2704 inputaddr+=4;
bogdanm 0:9b334a45a8ff 2705 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 2706
bogdanm 0:9b334a45a8ff 2707 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2708 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 2709 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 2710 {
bogdanm 0:9b334a45a8ff 2711 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 2712 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 2713 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2714 }
bogdanm 0:9b334a45a8ff 2715 }
bogdanm 0:9b334a45a8ff 2716 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 2717 {
bogdanm 0:9b334a45a8ff 2718 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 2719 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 2720 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2721 outputaddr+=4;
bogdanm 0:9b334a45a8ff 2722 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 2723
bogdanm 0:9b334a45a8ff 2724 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 2725 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 2726 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 2727 {
bogdanm 0:9b334a45a8ff 2728 /* Disable IT */
bogdanm 0:9b334a45a8ff 2729 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 2730 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 2731 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 2732 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2733 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2734 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2735 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2736 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 2737 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 2738 }
bogdanm 0:9b334a45a8ff 2739 }
bogdanm 0:9b334a45a8ff 2740
bogdanm 0:9b334a45a8ff 2741 /* Return function status */
bogdanm 0:9b334a45a8ff 2742 return HAL_OK;
bogdanm 0:9b334a45a8ff 2743 }
bogdanm 0:9b334a45a8ff 2744
bogdanm 0:9b334a45a8ff 2745 /**
bogdanm 0:9b334a45a8ff 2746 * @brief Initializes the CRYP peripheral in DES ECB encryption mode using DMA.
bogdanm 0:9b334a45a8ff 2747 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2748 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2749 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2750 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2751 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2752 * @retval HAL status
bogdanm 0:9b334a45a8ff 2753 */
bogdanm 0:9b334a45a8ff 2754 HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 2755 {
bogdanm 0:9b334a45a8ff 2756 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2757 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2758
bogdanm 0:9b334a45a8ff 2759 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2760 {
bogdanm 0:9b334a45a8ff 2761 /* Process Locked */
bogdanm 0:9b334a45a8ff 2762 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2763
bogdanm 0:9b334a45a8ff 2764 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2765 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2766
bogdanm 0:9b334a45a8ff 2767 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2768 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2769
bogdanm 0:9b334a45a8ff 2770 /* Set CRYP peripheral in DES ECB encryption mode */
bogdanm 0:9b334a45a8ff 2771 CRYP_SetDESECBMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2772
bogdanm 0:9b334a45a8ff 2773 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2774 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2775
bogdanm 0:9b334a45a8ff 2776 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2777 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2778
bogdanm 0:9b334a45a8ff 2779 /* Return function status */
bogdanm 0:9b334a45a8ff 2780 return HAL_OK;
bogdanm 0:9b334a45a8ff 2781 }
bogdanm 0:9b334a45a8ff 2782 else
bogdanm 0:9b334a45a8ff 2783 {
bogdanm 0:9b334a45a8ff 2784 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2785 }
bogdanm 0:9b334a45a8ff 2786 }
bogdanm 0:9b334a45a8ff 2787
bogdanm 0:9b334a45a8ff 2788 /**
bogdanm 0:9b334a45a8ff 2789 * @brief Initializes the CRYP peripheral in DES CBC encryption mode using DMA.
bogdanm 0:9b334a45a8ff 2790 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2791 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2792 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2793 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2794 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2795 * @retval HAL status
bogdanm 0:9b334a45a8ff 2796 */
bogdanm 0:9b334a45a8ff 2797 HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 2798 {
bogdanm 0:9b334a45a8ff 2799 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2800 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2801
bogdanm 0:9b334a45a8ff 2802 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2803 {
bogdanm 0:9b334a45a8ff 2804 /* Process Locked */
bogdanm 0:9b334a45a8ff 2805 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2806
bogdanm 0:9b334a45a8ff 2807 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2808 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2809
bogdanm 0:9b334a45a8ff 2810 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2811 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2812
bogdanm 0:9b334a45a8ff 2813 /* Set CRYP peripheral in DES CBC encryption mode */
bogdanm 0:9b334a45a8ff 2814 CRYP_SetDESCBCMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2815
bogdanm 0:9b334a45a8ff 2816 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2817 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2818
bogdanm 0:9b334a45a8ff 2819 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2820 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2821
bogdanm 0:9b334a45a8ff 2822 /* Return function status */
bogdanm 0:9b334a45a8ff 2823 return HAL_OK;
bogdanm 0:9b334a45a8ff 2824 }
bogdanm 0:9b334a45a8ff 2825 else
bogdanm 0:9b334a45a8ff 2826 {
bogdanm 0:9b334a45a8ff 2827 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2828 }
bogdanm 0:9b334a45a8ff 2829 }
bogdanm 0:9b334a45a8ff 2830
bogdanm 0:9b334a45a8ff 2831 /**
bogdanm 0:9b334a45a8ff 2832 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using DMA.
bogdanm 0:9b334a45a8ff 2833 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2834 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2835 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2836 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2837 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2838 * @retval HAL status
bogdanm 0:9b334a45a8ff 2839 */
bogdanm 0:9b334a45a8ff 2840 HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2841 {
bogdanm 0:9b334a45a8ff 2842 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2843 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2844
bogdanm 0:9b334a45a8ff 2845 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2846 {
bogdanm 0:9b334a45a8ff 2847 /* Process Locked */
bogdanm 0:9b334a45a8ff 2848 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2849
bogdanm 0:9b334a45a8ff 2850 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2851 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2852
bogdanm 0:9b334a45a8ff 2853 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2854 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2855
bogdanm 0:9b334a45a8ff 2856 /* Set CRYP peripheral in DES ECB decryption mode */
bogdanm 0:9b334a45a8ff 2857 CRYP_SetDESECBMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2858
bogdanm 0:9b334a45a8ff 2859 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2860 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2861
bogdanm 0:9b334a45a8ff 2862 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2863 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2864
bogdanm 0:9b334a45a8ff 2865 /* Return function status */
bogdanm 0:9b334a45a8ff 2866 return HAL_OK;
bogdanm 0:9b334a45a8ff 2867 }
bogdanm 0:9b334a45a8ff 2868 else
bogdanm 0:9b334a45a8ff 2869 {
bogdanm 0:9b334a45a8ff 2870 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2871 }
bogdanm 0:9b334a45a8ff 2872 }
bogdanm 0:9b334a45a8ff 2873
bogdanm 0:9b334a45a8ff 2874 /**
bogdanm 0:9b334a45a8ff 2875 * @brief Initializes the CRYP peripheral in DES ECB decryption mode using DMA.
bogdanm 0:9b334a45a8ff 2876 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2877 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2878 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2879 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2880 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2881 * @retval HAL status
bogdanm 0:9b334a45a8ff 2882 */
bogdanm 0:9b334a45a8ff 2883 HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 2884 {
bogdanm 0:9b334a45a8ff 2885 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 2886 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 2887
bogdanm 0:9b334a45a8ff 2888 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 2889 {
bogdanm 0:9b334a45a8ff 2890 /* Process Locked */
bogdanm 0:9b334a45a8ff 2891 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2892
bogdanm 0:9b334a45a8ff 2893 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 2894 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 2895
bogdanm 0:9b334a45a8ff 2896 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2897 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2898
bogdanm 0:9b334a45a8ff 2899 /* Set CRYP peripheral in DES CBC decryption mode */
bogdanm 0:9b334a45a8ff 2900 CRYP_SetDESCBCMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 2901
bogdanm 0:9b334a45a8ff 2902 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 2903 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 2904
bogdanm 0:9b334a45a8ff 2905 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2906 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2907
bogdanm 0:9b334a45a8ff 2908 /* Return function status */
bogdanm 0:9b334a45a8ff 2909 return HAL_OK;
bogdanm 0:9b334a45a8ff 2910 }
bogdanm 0:9b334a45a8ff 2911 else
bogdanm 0:9b334a45a8ff 2912 {
bogdanm 0:9b334a45a8ff 2913 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 2914 }
bogdanm 0:9b334a45a8ff 2915 }
bogdanm 0:9b334a45a8ff 2916
bogdanm 0:9b334a45a8ff 2917 /**
bogdanm 0:9b334a45a8ff 2918 * @}
bogdanm 0:9b334a45a8ff 2919 */
bogdanm 0:9b334a45a8ff 2920
bogdanm 0:9b334a45a8ff 2921 /** @defgroup CRYP_Exported_Functions_Group4 TDES processing functions
bogdanm 0:9b334a45a8ff 2922 * @brief processing functions.
bogdanm 0:9b334a45a8ff 2923 *
bogdanm 0:9b334a45a8ff 2924 @verbatim
bogdanm 0:9b334a45a8ff 2925 ==============================================================================
bogdanm 0:9b334a45a8ff 2926 ##### TDES processing functions #####
bogdanm 0:9b334a45a8ff 2927 ==============================================================================
bogdanm 0:9b334a45a8ff 2928 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 2929 (+) Encrypt plaintext using TDES based on ECB or CBC chaining modes
bogdanm 0:9b334a45a8ff 2930 (+) Decrypt cyphertext using TDES based on ECB or CBC chaining modes
bogdanm 0:9b334a45a8ff 2931 [..] Three processing functions are available:
bogdanm 0:9b334a45a8ff 2932 (+) Polling mode
bogdanm 0:9b334a45a8ff 2933 (+) Interrupt mode
bogdanm 0:9b334a45a8ff 2934 (+) DMA mode
bogdanm 0:9b334a45a8ff 2935
bogdanm 0:9b334a45a8ff 2936 @endverbatim
bogdanm 0:9b334a45a8ff 2937 * @{
bogdanm 0:9b334a45a8ff 2938 */
bogdanm 0:9b334a45a8ff 2939
bogdanm 0:9b334a45a8ff 2940 /**
bogdanm 0:9b334a45a8ff 2941 * @brief Initializes the CRYP peripheral in TDES ECB encryption mode
bogdanm 0:9b334a45a8ff 2942 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 2943 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2944 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2945 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2946 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2947 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2948 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2949 * @retval HAL status
bogdanm 0:9b334a45a8ff 2950 */
bogdanm 0:9b334a45a8ff 2951 HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2952 {
bogdanm 0:9b334a45a8ff 2953 /* Process Locked */
bogdanm 0:9b334a45a8ff 2954 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2955
bogdanm 0:9b334a45a8ff 2956 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2957 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2958
bogdanm 0:9b334a45a8ff 2959 /* Set CRYP peripheral in TDES ECB encryption mode */
bogdanm 0:9b334a45a8ff 2960 CRYP_SetTDESECBMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 2961
bogdanm 0:9b334a45a8ff 2962 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 2963 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 2964
bogdanm 0:9b334a45a8ff 2965 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 2966 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 2967 {
bogdanm 0:9b334a45a8ff 2968 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 2969 }
bogdanm 0:9b334a45a8ff 2970
bogdanm 0:9b334a45a8ff 2971 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2972 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 2973
bogdanm 0:9b334a45a8ff 2974 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 2975 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 2976
bogdanm 0:9b334a45a8ff 2977 /* Return function status */
bogdanm 0:9b334a45a8ff 2978 return HAL_OK;
bogdanm 0:9b334a45a8ff 2979 }
bogdanm 0:9b334a45a8ff 2980
bogdanm 0:9b334a45a8ff 2981 /**
bogdanm 0:9b334a45a8ff 2982 * @brief Initializes the CRYP peripheral in TDES ECB decryption mode
bogdanm 0:9b334a45a8ff 2983 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 2984 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 2985 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 2986 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 2987 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 2988 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 2989 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 2990 * @retval HAL status
bogdanm 0:9b334a45a8ff 2991 */
bogdanm 0:9b334a45a8ff 2992 HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 2993 {
bogdanm 0:9b334a45a8ff 2994 /* Process Locked */
bogdanm 0:9b334a45a8ff 2995 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 2996
bogdanm 0:9b334a45a8ff 2997 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 2998 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 2999
bogdanm 0:9b334a45a8ff 3000 /* Set CRYP peripheral in TDES ECB decryption mode */
bogdanm 0:9b334a45a8ff 3001 CRYP_SetTDESECBMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 3002
bogdanm 0:9b334a45a8ff 3003 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3004 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3005
bogdanm 0:9b334a45a8ff 3006 /* Write Cypher Data and Get Plain Data */
bogdanm 0:9b334a45a8ff 3007 if(CRYP_ProcessData2Words(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 3008 {
bogdanm 0:9b334a45a8ff 3009 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 3010 }
bogdanm 0:9b334a45a8ff 3011
bogdanm 0:9b334a45a8ff 3012 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3013 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3014
bogdanm 0:9b334a45a8ff 3015 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3016 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3017
bogdanm 0:9b334a45a8ff 3018 /* Return function status */
bogdanm 0:9b334a45a8ff 3019 return HAL_OK;
bogdanm 0:9b334a45a8ff 3020 }
bogdanm 0:9b334a45a8ff 3021
bogdanm 0:9b334a45a8ff 3022 /**
bogdanm 0:9b334a45a8ff 3023 * @brief Initializes the CRYP peripheral in TDES CBC encryption mode
bogdanm 0:9b334a45a8ff 3024 * then encrypt pPlainData. The cypher data are available in pCypherData
bogdanm 0:9b334a45a8ff 3025 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3026 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3027 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3028 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3029 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3030 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 3031 * @retval HAL status
bogdanm 0:9b334a45a8ff 3032 */
bogdanm 0:9b334a45a8ff 3033 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 3034 {
bogdanm 0:9b334a45a8ff 3035 /* Process Locked */
bogdanm 0:9b334a45a8ff 3036 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3037
bogdanm 0:9b334a45a8ff 3038 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3039 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3040
bogdanm 0:9b334a45a8ff 3041 /* Set CRYP peripheral in TDES CBC encryption mode */
bogdanm 0:9b334a45a8ff 3042 CRYP_SetTDESCBCMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 3043
bogdanm 0:9b334a45a8ff 3044 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3045 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3046
bogdanm 0:9b334a45a8ff 3047 /* Write Plain Data and Get Cypher Data */
bogdanm 0:9b334a45a8ff 3048 if(CRYP_ProcessData2Words(hcryp, pPlainData, Size, pCypherData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 3049 {
bogdanm 0:9b334a45a8ff 3050 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 3051 }
bogdanm 0:9b334a45a8ff 3052
bogdanm 0:9b334a45a8ff 3053 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3054 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3055
bogdanm 0:9b334a45a8ff 3056 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3057 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3058
bogdanm 0:9b334a45a8ff 3059 /* Return function status */
bogdanm 0:9b334a45a8ff 3060 return HAL_OK;
bogdanm 0:9b334a45a8ff 3061 }
bogdanm 0:9b334a45a8ff 3062
bogdanm 0:9b334a45a8ff 3063 /**
bogdanm 0:9b334a45a8ff 3064 * @brief Initializes the CRYP peripheral in TDES CBC decryption mode
bogdanm 0:9b334a45a8ff 3065 * then decrypted pCypherData. The cypher data are available in pPlainData
bogdanm 0:9b334a45a8ff 3066 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3067 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3068 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3069 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3070 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3071 * @param Timeout: Specify Timeout value
bogdanm 0:9b334a45a8ff 3072 * @retval HAL status
bogdanm 0:9b334a45a8ff 3073 */
bogdanm 0:9b334a45a8ff 3074 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 3075 {
bogdanm 0:9b334a45a8ff 3076 /* Process Locked */
bogdanm 0:9b334a45a8ff 3077 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3078
bogdanm 0:9b334a45a8ff 3079 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3080 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3081
bogdanm 0:9b334a45a8ff 3082 /* Set CRYP peripheral in TDES CBC decryption mode */
bogdanm 0:9b334a45a8ff 3083 CRYP_SetTDESCBCMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 3084
bogdanm 0:9b334a45a8ff 3085 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3086 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3087
bogdanm 0:9b334a45a8ff 3088 /* Write Cypher Data and Get Plain Data */
bogdanm 0:9b334a45a8ff 3089 if(CRYP_ProcessData2Words(hcryp, pCypherData, Size, pPlainData, Timeout) != HAL_OK)
bogdanm 0:9b334a45a8ff 3090 {
bogdanm 0:9b334a45a8ff 3091 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 3092 }
bogdanm 0:9b334a45a8ff 3093
bogdanm 0:9b334a45a8ff 3094 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3095 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3096
bogdanm 0:9b334a45a8ff 3097 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3098 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3099
bogdanm 0:9b334a45a8ff 3100 /* Return function status */
bogdanm 0:9b334a45a8ff 3101 return HAL_OK;
bogdanm 0:9b334a45a8ff 3102 }
bogdanm 0:9b334a45a8ff 3103
bogdanm 0:9b334a45a8ff 3104 /**
bogdanm 0:9b334a45a8ff 3105 * @brief Initializes the CRYP peripheral in TDES ECB encryption mode using interrupt.
bogdanm 0:9b334a45a8ff 3106 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3107 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3108 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3109 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3110 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3111 * @retval HAL status
bogdanm 0:9b334a45a8ff 3112 */
bogdanm 0:9b334a45a8ff 3113 HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 3114 {
bogdanm 0:9b334a45a8ff 3115 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3116 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3117
bogdanm 0:9b334a45a8ff 3118 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 3119 {
bogdanm 0:9b334a45a8ff 3120 /* Process Locked */
bogdanm 0:9b334a45a8ff 3121 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3122
bogdanm 0:9b334a45a8ff 3123 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 3124 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 3125 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 3126 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 3127
bogdanm 0:9b334a45a8ff 3128 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3129 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3130
bogdanm 0:9b334a45a8ff 3131 /* Set CRYP peripheral in TDES ECB encryption mode */
bogdanm 0:9b334a45a8ff 3132 CRYP_SetTDESECBMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 3133
bogdanm 0:9b334a45a8ff 3134 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 3135 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3136
bogdanm 0:9b334a45a8ff 3137 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3138 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3139
bogdanm 0:9b334a45a8ff 3140 /* Return function status */
bogdanm 0:9b334a45a8ff 3141 return HAL_OK;
bogdanm 0:9b334a45a8ff 3142 }
bogdanm 0:9b334a45a8ff 3143 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 3144 {
bogdanm 0:9b334a45a8ff 3145 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 3146 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 3147 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3148 inputaddr+=4;
bogdanm 0:9b334a45a8ff 3149 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3150
bogdanm 0:9b334a45a8ff 3151 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3152 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 3153 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 3154 {
bogdanm 0:9b334a45a8ff 3155 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 3156 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 3157 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3158 }
bogdanm 0:9b334a45a8ff 3159 }
bogdanm 0:9b334a45a8ff 3160 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 3161 {
bogdanm 0:9b334a45a8ff 3162 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 3163 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 3164 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3165 outputaddr+=4;
bogdanm 0:9b334a45a8ff 3166 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3167
bogdanm 0:9b334a45a8ff 3168 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3169 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 3170 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 3171 {
bogdanm 0:9b334a45a8ff 3172 /* Disable IT */
bogdanm 0:9b334a45a8ff 3173 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3174 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 3175 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 3176 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3177 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3178 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3179 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3180 /* Call the Output data transfer complete callback */
bogdanm 0:9b334a45a8ff 3181 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3182 }
bogdanm 0:9b334a45a8ff 3183 }
bogdanm 0:9b334a45a8ff 3184
bogdanm 0:9b334a45a8ff 3185 /* Return function status */
bogdanm 0:9b334a45a8ff 3186 return HAL_OK;
bogdanm 0:9b334a45a8ff 3187 }
bogdanm 0:9b334a45a8ff 3188
bogdanm 0:9b334a45a8ff 3189 /**
bogdanm 0:9b334a45a8ff 3190 * @brief Initializes the CRYP peripheral in TDES CBC encryption mode.
bogdanm 0:9b334a45a8ff 3191 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3192 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3193 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3194 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3195 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3196 * @retval HAL status
bogdanm 0:9b334a45a8ff 3197 */
bogdanm 0:9b334a45a8ff 3198 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 3199 {
bogdanm 0:9b334a45a8ff 3200 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3201 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3202
bogdanm 0:9b334a45a8ff 3203 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 3204 {
bogdanm 0:9b334a45a8ff 3205 /* Process Locked */
bogdanm 0:9b334a45a8ff 3206 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3207
bogdanm 0:9b334a45a8ff 3208 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 3209 hcryp->pCrypInBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 3210 hcryp->pCrypOutBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 3211 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 3212
bogdanm 0:9b334a45a8ff 3213 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3214 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3215
bogdanm 0:9b334a45a8ff 3216 /* Set CRYP peripheral in TDES CBC encryption mode */
bogdanm 0:9b334a45a8ff 3217 CRYP_SetTDESCBCMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 3218
bogdanm 0:9b334a45a8ff 3219 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 3220 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3221
bogdanm 0:9b334a45a8ff 3222 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3223 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3224
bogdanm 0:9b334a45a8ff 3225 /* Return function status */
bogdanm 0:9b334a45a8ff 3226 return HAL_OK;
bogdanm 0:9b334a45a8ff 3227 }
bogdanm 0:9b334a45a8ff 3228 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 3229 {
bogdanm 0:9b334a45a8ff 3230 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 3231 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 3232 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3233 inputaddr+=4;
bogdanm 0:9b334a45a8ff 3234 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3235
bogdanm 0:9b334a45a8ff 3236 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3237 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 3238 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 3239 {
bogdanm 0:9b334a45a8ff 3240 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 3241 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 3242 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3243 }
bogdanm 0:9b334a45a8ff 3244 }
bogdanm 0:9b334a45a8ff 3245 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 3246 {
bogdanm 0:9b334a45a8ff 3247 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 3248 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 3249 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3250 outputaddr+=4;
bogdanm 0:9b334a45a8ff 3251 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3252
bogdanm 0:9b334a45a8ff 3253 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3254 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 3255 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 3256 {
bogdanm 0:9b334a45a8ff 3257 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3258 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 3259 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 3260 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3261 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3262 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3263 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3264 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 3265 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3266 }
bogdanm 0:9b334a45a8ff 3267 }
bogdanm 0:9b334a45a8ff 3268
bogdanm 0:9b334a45a8ff 3269 /* Return function status */
bogdanm 0:9b334a45a8ff 3270 return HAL_OK;
bogdanm 0:9b334a45a8ff 3271 }
bogdanm 0:9b334a45a8ff 3272
bogdanm 0:9b334a45a8ff 3273 /**
bogdanm 0:9b334a45a8ff 3274 * @brief Initializes the CRYP peripheral in TDES ECB decryption mode.
bogdanm 0:9b334a45a8ff 3275 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3276 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3277 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3278 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3279 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3280 * @retval HAL status
bogdanm 0:9b334a45a8ff 3281 */
bogdanm 0:9b334a45a8ff 3282 HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 3283 {
bogdanm 0:9b334a45a8ff 3284 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3285 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3286
bogdanm 0:9b334a45a8ff 3287 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 3288 {
bogdanm 0:9b334a45a8ff 3289 /* Process Locked */
bogdanm 0:9b334a45a8ff 3290 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3291
bogdanm 0:9b334a45a8ff 3292 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 3293 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 3294 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 3295 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 3296
bogdanm 0:9b334a45a8ff 3297 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3298 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3299
bogdanm 0:9b334a45a8ff 3300 /* Set CRYP peripheral in TDES ECB decryption mode */
bogdanm 0:9b334a45a8ff 3301 CRYP_SetTDESECBMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 3302
bogdanm 0:9b334a45a8ff 3303 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 3304 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3305
bogdanm 0:9b334a45a8ff 3306 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3307 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3308
bogdanm 0:9b334a45a8ff 3309 /* Return function status */
bogdanm 0:9b334a45a8ff 3310 return HAL_OK;
bogdanm 0:9b334a45a8ff 3311 }
bogdanm 0:9b334a45a8ff 3312 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 3313 {
bogdanm 0:9b334a45a8ff 3314 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 3315 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 3316 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3317 inputaddr+=4;
bogdanm 0:9b334a45a8ff 3318 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3319
bogdanm 0:9b334a45a8ff 3320 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3321 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 3322 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 3323 {
bogdanm 0:9b334a45a8ff 3324 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 3325 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 3326 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3327 }
bogdanm 0:9b334a45a8ff 3328 }
bogdanm 0:9b334a45a8ff 3329 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 3330 {
bogdanm 0:9b334a45a8ff 3331 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 3332 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 3333 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3334 outputaddr+=4;
bogdanm 0:9b334a45a8ff 3335 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3336
bogdanm 0:9b334a45a8ff 3337 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3338 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 3339 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 3340 {
bogdanm 0:9b334a45a8ff 3341 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3342 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 3343 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 3344 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3345 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3346 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3347 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3348 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 3349 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3350 }
bogdanm 0:9b334a45a8ff 3351 }
bogdanm 0:9b334a45a8ff 3352
bogdanm 0:9b334a45a8ff 3353 /* Return function status */
bogdanm 0:9b334a45a8ff 3354 return HAL_OK;
bogdanm 0:9b334a45a8ff 3355 }
bogdanm 0:9b334a45a8ff 3356
bogdanm 0:9b334a45a8ff 3357 /**
bogdanm 0:9b334a45a8ff 3358 * @brief Initializes the CRYP peripheral in TDES CBC decryption mode.
bogdanm 0:9b334a45a8ff 3359 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3360 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3361 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3362 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3363 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3364 * @retval HAL status
bogdanm 0:9b334a45a8ff 3365 */
bogdanm 0:9b334a45a8ff 3366 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 3367 {
bogdanm 0:9b334a45a8ff 3368 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3369 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3370
bogdanm 0:9b334a45a8ff 3371 if(hcryp->State == HAL_CRYP_STATE_READY)
bogdanm 0:9b334a45a8ff 3372 {
bogdanm 0:9b334a45a8ff 3373 /* Process Locked */
bogdanm 0:9b334a45a8ff 3374 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3375
bogdanm 0:9b334a45a8ff 3376 hcryp->CrypInCount = Size;
bogdanm 0:9b334a45a8ff 3377 hcryp->pCrypInBuffPtr = pCypherData;
bogdanm 0:9b334a45a8ff 3378 hcryp->pCrypOutBuffPtr = pPlainData;
bogdanm 0:9b334a45a8ff 3379 hcryp->CrypOutCount = Size;
bogdanm 0:9b334a45a8ff 3380
bogdanm 0:9b334a45a8ff 3381 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3382 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3383
bogdanm 0:9b334a45a8ff 3384 /* Set CRYP peripheral in TDES CBC decryption mode */
bogdanm 0:9b334a45a8ff 3385 CRYP_SetTDESCBCMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 3386
bogdanm 0:9b334a45a8ff 3387 /* Enable Interrupts */
bogdanm 0:9b334a45a8ff 3388 __HAL_CRYP_ENABLE_IT(hcryp, CRYP_IT_INI | CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3389
bogdanm 0:9b334a45a8ff 3390 /* Enable CRYP */
bogdanm 0:9b334a45a8ff 3391 __HAL_CRYP_ENABLE(hcryp);
bogdanm 0:9b334a45a8ff 3392
bogdanm 0:9b334a45a8ff 3393 /* Return function status */
bogdanm 0:9b334a45a8ff 3394 return HAL_OK;
bogdanm 0:9b334a45a8ff 3395 }
bogdanm 0:9b334a45a8ff 3396 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_INI))
bogdanm 0:9b334a45a8ff 3397 {
bogdanm 0:9b334a45a8ff 3398 inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
bogdanm 0:9b334a45a8ff 3399 /* Write the Input block in the IN FIFO */
bogdanm 0:9b334a45a8ff 3400 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3401 inputaddr+=4;
bogdanm 0:9b334a45a8ff 3402 hcryp->Instance->DR = *(uint32_t*)(inputaddr);
bogdanm 0:9b334a45a8ff 3403
bogdanm 0:9b334a45a8ff 3404 hcryp->pCrypInBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3405 hcryp->CrypInCount -= 8;
bogdanm 0:9b334a45a8ff 3406 if(hcryp->CrypInCount == 0)
bogdanm 0:9b334a45a8ff 3407 {
bogdanm 0:9b334a45a8ff 3408 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_INI);
bogdanm 0:9b334a45a8ff 3409 /* Call the Input data transfer complete callback */
bogdanm 0:9b334a45a8ff 3410 HAL_CRYP_InCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3411 }
bogdanm 0:9b334a45a8ff 3412 }
bogdanm 0:9b334a45a8ff 3413 else if(__HAL_CRYP_GET_IT(hcryp, CRYP_IT_OUTI))
bogdanm 0:9b334a45a8ff 3414 {
bogdanm 0:9b334a45a8ff 3415 outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
bogdanm 0:9b334a45a8ff 3416 /* Read the Output block from the Output FIFO */
bogdanm 0:9b334a45a8ff 3417 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3418 outputaddr+=4;
bogdanm 0:9b334a45a8ff 3419 *(uint32_t*)(outputaddr) = hcryp->Instance->DOUT;
bogdanm 0:9b334a45a8ff 3420
bogdanm 0:9b334a45a8ff 3421 hcryp->pCrypOutBuffPtr += 8;
bogdanm 0:9b334a45a8ff 3422 hcryp->CrypOutCount -= 8;
bogdanm 0:9b334a45a8ff 3423 if(hcryp->CrypOutCount == 0)
bogdanm 0:9b334a45a8ff 3424 {
bogdanm 0:9b334a45a8ff 3425 __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_OUTI);
bogdanm 0:9b334a45a8ff 3426 /* Disable CRYP */
bogdanm 0:9b334a45a8ff 3427 __HAL_CRYP_DISABLE(hcryp);
bogdanm 0:9b334a45a8ff 3428 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3429 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3430 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3431 hcryp->State = HAL_CRYP_STATE_READY;
bogdanm 0:9b334a45a8ff 3432 /* Call Input transfer complete callback */
bogdanm 0:9b334a45a8ff 3433 HAL_CRYP_OutCpltCallback(hcryp);
bogdanm 0:9b334a45a8ff 3434 }
bogdanm 0:9b334a45a8ff 3435 }
bogdanm 0:9b334a45a8ff 3436
bogdanm 0:9b334a45a8ff 3437 /* Return function status */
bogdanm 0:9b334a45a8ff 3438 return HAL_OK;
bogdanm 0:9b334a45a8ff 3439 }
bogdanm 0:9b334a45a8ff 3440
bogdanm 0:9b334a45a8ff 3441 /**
bogdanm 0:9b334a45a8ff 3442 * @brief Initializes the CRYP peripheral in TDES ECB encryption mode using DMA.
bogdanm 0:9b334a45a8ff 3443 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3444 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3445 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3446 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3447 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3448 * @retval HAL status
bogdanm 0:9b334a45a8ff 3449 */
bogdanm 0:9b334a45a8ff 3450 HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 3451 {
bogdanm 0:9b334a45a8ff 3452 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3453 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3454
bogdanm 0:9b334a45a8ff 3455 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 3456 {
bogdanm 0:9b334a45a8ff 3457 /* Process Locked */
bogdanm 0:9b334a45a8ff 3458 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3459
bogdanm 0:9b334a45a8ff 3460 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 3461 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 3462
bogdanm 0:9b334a45a8ff 3463 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3464 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3465
bogdanm 0:9b334a45a8ff 3466 /* Set CRYP peripheral in TDES ECB encryption mode */
bogdanm 0:9b334a45a8ff 3467 CRYP_SetTDESECBMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 3468
bogdanm 0:9b334a45a8ff 3469 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 3470 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 3471
bogdanm 0:9b334a45a8ff 3472 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3473 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3474
bogdanm 0:9b334a45a8ff 3475 /* Return function status */
bogdanm 0:9b334a45a8ff 3476 return HAL_OK;
bogdanm 0:9b334a45a8ff 3477 }
bogdanm 0:9b334a45a8ff 3478 else
bogdanm 0:9b334a45a8ff 3479 {
bogdanm 0:9b334a45a8ff 3480 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 3481 }
bogdanm 0:9b334a45a8ff 3482 }
bogdanm 0:9b334a45a8ff 3483
bogdanm 0:9b334a45a8ff 3484 /**
bogdanm 0:9b334a45a8ff 3485 * @brief Initializes the CRYP peripheral in TDES CBC encryption mode using DMA.
bogdanm 0:9b334a45a8ff 3486 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3487 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3488 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3489 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3490 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3491 * @retval HAL status
bogdanm 0:9b334a45a8ff 3492 */
bogdanm 0:9b334a45a8ff 3493 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData)
bogdanm 0:9b334a45a8ff 3494 {
bogdanm 0:9b334a45a8ff 3495 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3496 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3497
bogdanm 0:9b334a45a8ff 3498 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 3499 {
bogdanm 0:9b334a45a8ff 3500 /* Process Locked */
bogdanm 0:9b334a45a8ff 3501 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3502
bogdanm 0:9b334a45a8ff 3503 inputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 3504 outputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 3505
bogdanm 0:9b334a45a8ff 3506 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3507 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3508
bogdanm 0:9b334a45a8ff 3509 /* Set CRYP peripheral in TDES CBC encryption mode */
bogdanm 0:9b334a45a8ff 3510 CRYP_SetTDESCBCMode(hcryp, 0);
bogdanm 0:9b334a45a8ff 3511
bogdanm 0:9b334a45a8ff 3512 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 3513 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 3514
bogdanm 0:9b334a45a8ff 3515 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3516 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3517
bogdanm 0:9b334a45a8ff 3518 /* Return function status */
bogdanm 0:9b334a45a8ff 3519 return HAL_OK;
bogdanm 0:9b334a45a8ff 3520 }
bogdanm 0:9b334a45a8ff 3521 else
bogdanm 0:9b334a45a8ff 3522 {
bogdanm 0:9b334a45a8ff 3523 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 3524 }
bogdanm 0:9b334a45a8ff 3525 }
bogdanm 0:9b334a45a8ff 3526
bogdanm 0:9b334a45a8ff 3527 /**
bogdanm 0:9b334a45a8ff 3528 * @brief Initializes the CRYP peripheral in TDES ECB decryption mode using DMA.
bogdanm 0:9b334a45a8ff 3529 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3530 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3531 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3532 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3533 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3534 * @retval HAL status
bogdanm 0:9b334a45a8ff 3535 */
bogdanm 0:9b334a45a8ff 3536 HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 3537 {
bogdanm 0:9b334a45a8ff 3538 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3539 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3540
bogdanm 0:9b334a45a8ff 3541 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 3542 {
bogdanm 0:9b334a45a8ff 3543 /* Process Locked */
bogdanm 0:9b334a45a8ff 3544 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3545
bogdanm 0:9b334a45a8ff 3546 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 3547 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 3548
bogdanm 0:9b334a45a8ff 3549 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3550 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3551
bogdanm 0:9b334a45a8ff 3552 /* Set CRYP peripheral in TDES ECB decryption mode */
bogdanm 0:9b334a45a8ff 3553 CRYP_SetTDESECBMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 3554
bogdanm 0:9b334a45a8ff 3555 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 3556 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 3557
bogdanm 0:9b334a45a8ff 3558 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3559 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3560
bogdanm 0:9b334a45a8ff 3561 /* Return function status */
bogdanm 0:9b334a45a8ff 3562 return HAL_OK;
bogdanm 0:9b334a45a8ff 3563 }
bogdanm 0:9b334a45a8ff 3564 else
bogdanm 0:9b334a45a8ff 3565 {
bogdanm 0:9b334a45a8ff 3566 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 3567 }
bogdanm 0:9b334a45a8ff 3568 }
bogdanm 0:9b334a45a8ff 3569
bogdanm 0:9b334a45a8ff 3570 /**
bogdanm 0:9b334a45a8ff 3571 * @brief Initializes the CRYP peripheral in TDES CBC decryption mode using DMA.
bogdanm 0:9b334a45a8ff 3572 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3573 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3574 * @param pCypherData: Pointer to the cyphertext buffer
bogdanm 0:9b334a45a8ff 3575 * @param Size: Length of the plaintext buffer, must be a multiple of 8
bogdanm 0:9b334a45a8ff 3576 * @param pPlainData: Pointer to the plaintext buffer
bogdanm 0:9b334a45a8ff 3577 * @retval HAL status
bogdanm 0:9b334a45a8ff 3578 */
bogdanm 0:9b334a45a8ff 3579 HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData)
bogdanm 0:9b334a45a8ff 3580 {
bogdanm 0:9b334a45a8ff 3581 uint32_t inputaddr;
bogdanm 0:9b334a45a8ff 3582 uint32_t outputaddr;
bogdanm 0:9b334a45a8ff 3583
bogdanm 0:9b334a45a8ff 3584 if((hcryp->State == HAL_CRYP_STATE_READY) || (hcryp->Phase == HAL_CRYP_PHASE_PROCESS))
bogdanm 0:9b334a45a8ff 3585 {
bogdanm 0:9b334a45a8ff 3586 /* Process Locked */
bogdanm 0:9b334a45a8ff 3587 __HAL_LOCK(hcryp);
bogdanm 0:9b334a45a8ff 3588
bogdanm 0:9b334a45a8ff 3589 inputaddr = (uint32_t)pCypherData;
bogdanm 0:9b334a45a8ff 3590 outputaddr = (uint32_t)pPlainData;
bogdanm 0:9b334a45a8ff 3591
bogdanm 0:9b334a45a8ff 3592 /* Change the CRYP state */
bogdanm 0:9b334a45a8ff 3593 hcryp->State = HAL_CRYP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 3594
bogdanm 0:9b334a45a8ff 3595 /* Set CRYP peripheral in TDES CBC decryption mode */
bogdanm 0:9b334a45a8ff 3596 CRYP_SetTDESCBCMode(hcryp, CRYP_CR_ALGODIR);
bogdanm 0:9b334a45a8ff 3597
bogdanm 0:9b334a45a8ff 3598 /* Set the input and output addresses and start DMA transfer */
bogdanm 0:9b334a45a8ff 3599 CRYP_SetDMAConfig(hcryp, inputaddr, Size, outputaddr);
bogdanm 0:9b334a45a8ff 3600
bogdanm 0:9b334a45a8ff 3601 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 3602 __HAL_UNLOCK(hcryp);
bogdanm 0:9b334a45a8ff 3603
bogdanm 0:9b334a45a8ff 3604 /* Return function status */
bogdanm 0:9b334a45a8ff 3605 return HAL_OK;
bogdanm 0:9b334a45a8ff 3606 }
bogdanm 0:9b334a45a8ff 3607 else
bogdanm 0:9b334a45a8ff 3608 {
bogdanm 0:9b334a45a8ff 3609 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 3610 }
bogdanm 0:9b334a45a8ff 3611 }
bogdanm 0:9b334a45a8ff 3612
bogdanm 0:9b334a45a8ff 3613 /**
bogdanm 0:9b334a45a8ff 3614 * @}
bogdanm 0:9b334a45a8ff 3615 */
bogdanm 0:9b334a45a8ff 3616
bogdanm 0:9b334a45a8ff 3617 /** @defgroup CRYP_Exported_Functions_Group5 DMA callback functions
bogdanm 0:9b334a45a8ff 3618 * @brief DMA callback functions.
bogdanm 0:9b334a45a8ff 3619 *
bogdanm 0:9b334a45a8ff 3620 @verbatim
bogdanm 0:9b334a45a8ff 3621 ==============================================================================
bogdanm 0:9b334a45a8ff 3622 ##### DMA callback functions #####
bogdanm 0:9b334a45a8ff 3623 ==============================================================================
bogdanm 0:9b334a45a8ff 3624 [..] This section provides DMA callback functions:
bogdanm 0:9b334a45a8ff 3625 (+) DMA Input data transfer complete
bogdanm 0:9b334a45a8ff 3626 (+) DMA Output data transfer complete
bogdanm 0:9b334a45a8ff 3627 (+) DMA error
bogdanm 0:9b334a45a8ff 3628
bogdanm 0:9b334a45a8ff 3629 @endverbatim
bogdanm 0:9b334a45a8ff 3630 * @{
bogdanm 0:9b334a45a8ff 3631 */
bogdanm 0:9b334a45a8ff 3632
bogdanm 0:9b334a45a8ff 3633 /**
bogdanm 0:9b334a45a8ff 3634 * @brief Input FIFO transfer completed callbacks.
bogdanm 0:9b334a45a8ff 3635 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3636 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3637 * @retval None
bogdanm 0:9b334a45a8ff 3638 */
bogdanm 0:9b334a45a8ff 3639 __weak void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 3640 {
bogdanm 0:9b334a45a8ff 3641 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 3642 the HAL_CRYP_InCpltCallback could be implemented in the user file
bogdanm 0:9b334a45a8ff 3643 */
bogdanm 0:9b334a45a8ff 3644 }
bogdanm 0:9b334a45a8ff 3645
bogdanm 0:9b334a45a8ff 3646 /**
bogdanm 0:9b334a45a8ff 3647 * @brief Output FIFO transfer completed callbacks.
bogdanm 0:9b334a45a8ff 3648 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3649 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3650 * @retval None
bogdanm 0:9b334a45a8ff 3651 */
bogdanm 0:9b334a45a8ff 3652 __weak void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 3653 {
bogdanm 0:9b334a45a8ff 3654 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 3655 the HAL_CRYP_OutCpltCallback could be implemented in the user file
bogdanm 0:9b334a45a8ff 3656 */
bogdanm 0:9b334a45a8ff 3657 }
bogdanm 0:9b334a45a8ff 3658
bogdanm 0:9b334a45a8ff 3659 /**
bogdanm 0:9b334a45a8ff 3660 * @brief CRYP error callbacks.
bogdanm 0:9b334a45a8ff 3661 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3662 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3663 * @retval None
bogdanm 0:9b334a45a8ff 3664 */
bogdanm 0:9b334a45a8ff 3665 __weak void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 3666 {
bogdanm 0:9b334a45a8ff 3667 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 3668 the HAL_CRYP_ErrorCallback could be implemented in the user file
bogdanm 0:9b334a45a8ff 3669 */
bogdanm 0:9b334a45a8ff 3670 }
bogdanm 0:9b334a45a8ff 3671
bogdanm 0:9b334a45a8ff 3672 /**
bogdanm 0:9b334a45a8ff 3673 * @}
bogdanm 0:9b334a45a8ff 3674 */
bogdanm 0:9b334a45a8ff 3675
bogdanm 0:9b334a45a8ff 3676 /** @defgroup CRYP_Exported_Functions_Group6 CRYP IRQ handler management
bogdanm 0:9b334a45a8ff 3677 * @brief CRYP IRQ handler.
bogdanm 0:9b334a45a8ff 3678 *
bogdanm 0:9b334a45a8ff 3679 @verbatim
bogdanm 0:9b334a45a8ff 3680 ==============================================================================
bogdanm 0:9b334a45a8ff 3681 ##### CRYP IRQ handler management #####
bogdanm 0:9b334a45a8ff 3682 ==============================================================================
bogdanm 0:9b334a45a8ff 3683 [..] This section provides CRYP IRQ handler function.
bogdanm 0:9b334a45a8ff 3684
bogdanm 0:9b334a45a8ff 3685 @endverbatim
bogdanm 0:9b334a45a8ff 3686 * @{
bogdanm 0:9b334a45a8ff 3687 */
bogdanm 0:9b334a45a8ff 3688
bogdanm 0:9b334a45a8ff 3689 /**
bogdanm 0:9b334a45a8ff 3690 * @brief This function handles CRYP interrupt request.
bogdanm 0:9b334a45a8ff 3691 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3692 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3693 * @retval None
bogdanm 0:9b334a45a8ff 3694 */
bogdanm 0:9b334a45a8ff 3695 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 3696 {
bogdanm 0:9b334a45a8ff 3697 switch(CRYP->CR & CRYP_CR_ALGOMODE_DIRECTION)
bogdanm 0:9b334a45a8ff 3698 {
bogdanm 0:9b334a45a8ff 3699 case CRYP_CR_ALGOMODE_TDES_ECB_ENCRYPT:
bogdanm 0:9b334a45a8ff 3700 HAL_CRYP_TDESECB_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3701 break;
bogdanm 0:9b334a45a8ff 3702
bogdanm 0:9b334a45a8ff 3703 case CRYP_CR_ALGOMODE_TDES_ECB_DECRYPT:
bogdanm 0:9b334a45a8ff 3704 HAL_CRYP_TDESECB_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3705 break;
bogdanm 0:9b334a45a8ff 3706
bogdanm 0:9b334a45a8ff 3707 case CRYP_CR_ALGOMODE_TDES_CBC_ENCRYPT:
bogdanm 0:9b334a45a8ff 3708 HAL_CRYP_TDESCBC_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3709 break;
bogdanm 0:9b334a45a8ff 3710
bogdanm 0:9b334a45a8ff 3711 case CRYP_CR_ALGOMODE_TDES_CBC_DECRYPT:
bogdanm 0:9b334a45a8ff 3712 HAL_CRYP_TDESCBC_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3713 break;
bogdanm 0:9b334a45a8ff 3714
bogdanm 0:9b334a45a8ff 3715 case CRYP_CR_ALGOMODE_DES_ECB_ENCRYPT:
bogdanm 0:9b334a45a8ff 3716 HAL_CRYP_DESECB_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3717 break;
bogdanm 0:9b334a45a8ff 3718
bogdanm 0:9b334a45a8ff 3719 case CRYP_CR_ALGOMODE_DES_ECB_DECRYPT:
bogdanm 0:9b334a45a8ff 3720 HAL_CRYP_DESECB_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3721 break;
bogdanm 0:9b334a45a8ff 3722
bogdanm 0:9b334a45a8ff 3723 case CRYP_CR_ALGOMODE_DES_CBC_ENCRYPT:
bogdanm 0:9b334a45a8ff 3724 HAL_CRYP_DESCBC_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3725 break;
bogdanm 0:9b334a45a8ff 3726
bogdanm 0:9b334a45a8ff 3727 case CRYP_CR_ALGOMODE_DES_CBC_DECRYPT:
bogdanm 0:9b334a45a8ff 3728 HAL_CRYP_DESCBC_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3729 break;
bogdanm 0:9b334a45a8ff 3730
bogdanm 0:9b334a45a8ff 3731 case CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT:
bogdanm 0:9b334a45a8ff 3732 HAL_CRYP_AESECB_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3733 break;
bogdanm 0:9b334a45a8ff 3734
bogdanm 0:9b334a45a8ff 3735 case CRYP_CR_ALGOMODE_AES_ECB_DECRYPT:
bogdanm 0:9b334a45a8ff 3736 HAL_CRYP_AESECB_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3737 break;
bogdanm 0:9b334a45a8ff 3738
bogdanm 0:9b334a45a8ff 3739 case CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT:
bogdanm 0:9b334a45a8ff 3740 HAL_CRYP_AESCBC_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3741 break;
bogdanm 0:9b334a45a8ff 3742
bogdanm 0:9b334a45a8ff 3743 case CRYP_CR_ALGOMODE_AES_CBC_DECRYPT:
bogdanm 0:9b334a45a8ff 3744 HAL_CRYP_AESCBC_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3745 break;
bogdanm 0:9b334a45a8ff 3746
bogdanm 0:9b334a45a8ff 3747 case CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT:
bogdanm 0:9b334a45a8ff 3748 HAL_CRYP_AESCTR_Encrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3749 break;
bogdanm 0:9b334a45a8ff 3750
bogdanm 0:9b334a45a8ff 3751 case CRYP_CR_ALGOMODE_AES_CTR_DECRYPT:
bogdanm 0:9b334a45a8ff 3752 HAL_CRYP_AESCTR_Decrypt_IT(hcryp, NULL, 0, NULL);
bogdanm 0:9b334a45a8ff 3753 break;
bogdanm 0:9b334a45a8ff 3754
bogdanm 0:9b334a45a8ff 3755 default:
bogdanm 0:9b334a45a8ff 3756 break;
bogdanm 0:9b334a45a8ff 3757 }
bogdanm 0:9b334a45a8ff 3758 }
bogdanm 0:9b334a45a8ff 3759
bogdanm 0:9b334a45a8ff 3760 /**
bogdanm 0:9b334a45a8ff 3761 * @}
bogdanm 0:9b334a45a8ff 3762 */
bogdanm 0:9b334a45a8ff 3763
bogdanm 0:9b334a45a8ff 3764 /** @defgroup CRYP_Exported_Functions_Group7 Peripheral State functions
bogdanm 0:9b334a45a8ff 3765 * @brief Peripheral State functions.
bogdanm 0:9b334a45a8ff 3766 *
bogdanm 0:9b334a45a8ff 3767 @verbatim
bogdanm 0:9b334a45a8ff 3768 ==============================================================================
bogdanm 0:9b334a45a8ff 3769 ##### Peripheral State functions #####
bogdanm 0:9b334a45a8ff 3770 ==============================================================================
bogdanm 0:9b334a45a8ff 3771 [..]
bogdanm 0:9b334a45a8ff 3772 This subsection permits to get in run-time the status of the peripheral.
bogdanm 0:9b334a45a8ff 3773
bogdanm 0:9b334a45a8ff 3774 @endverbatim
bogdanm 0:9b334a45a8ff 3775 * @{
bogdanm 0:9b334a45a8ff 3776 */
bogdanm 0:9b334a45a8ff 3777
bogdanm 0:9b334a45a8ff 3778 /**
bogdanm 0:9b334a45a8ff 3779 * @brief Returns the CRYP state.
bogdanm 0:9b334a45a8ff 3780 * @param hcryp: pointer to a CRYP_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 3781 * the configuration information for CRYP module
bogdanm 0:9b334a45a8ff 3782 * @retval HAL state
bogdanm 0:9b334a45a8ff 3783 */
bogdanm 0:9b334a45a8ff 3784 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
bogdanm 0:9b334a45a8ff 3785 {
bogdanm 0:9b334a45a8ff 3786 return hcryp->State;
bogdanm 0:9b334a45a8ff 3787 }
bogdanm 0:9b334a45a8ff 3788
bogdanm 0:9b334a45a8ff 3789 /**
bogdanm 0:9b334a45a8ff 3790 * @}
bogdanm 0:9b334a45a8ff 3791 */
bogdanm 0:9b334a45a8ff 3792
bogdanm 0:9b334a45a8ff 3793 /**
bogdanm 0:9b334a45a8ff 3794 * @}
bogdanm 0:9b334a45a8ff 3795 */
bogdanm 0:9b334a45a8ff 3796
bogdanm 0:9b334a45a8ff 3797 #endif /* HAL_CRYP_MODULE_ENABLED */
bogdanm 0:9b334a45a8ff 3798
bogdanm 0:9b334a45a8ff 3799
bogdanm 0:9b334a45a8ff 3800 /**
bogdanm 0:9b334a45a8ff 3801 * @}
bogdanm 0:9b334a45a8ff 3802 */
bogdanm 0:9b334a45a8ff 3803 #endif /* STM32F756xx */
bogdanm 0:9b334a45a8ff 3804 /**
bogdanm 0:9b334a45a8ff 3805 * @}
bogdanm 0:9b334a45a8ff 3806 */
bogdanm 0:9b334a45a8ff 3807
bogdanm 0:9b334a45a8ff 3808 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/