Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

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