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