SPKT

Dependencies:   F746_GUI SD_PlayerSkeleton F746_SAI_IO

Committer:
phungductung
Date:
Tue Jun 04 21:37:21 2019 +0000
Revision:
0:8ede47d38d10
SPKT

Who changed what in which revision?

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