SPKT

Dependents:   WAV

Committer:
phungductung
Date:
Tue Jun 04 21:51:46 2019 +0000
Revision:
0:e87aa4c49e95
libray

Who changed what in which revision?

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