fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Tue Nov 10 09:30:11 2015 +0000
Revision:
19:112740acecfa
Parent:
0:9b334a45a8ff
Synchronized with git revision 7218418919aeaf775fb8d386ea7ee0dfc0c80ff9

Full URL: https://github.com/mbedmicro/mbed/commit/7218418919aeaf775fb8d386ea7ee0dfc0c80ff9/

DISCO_F469NI - add disco F469NI support

Who changed what in which revision?

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