|
STM32G474xx HAL用户手册
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32g4xx_ hal_ cryp.h 00004 * @author MCD Application Team 00005 * @brief CRYP HAL模块头文件。 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2019 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32G4xx_ HAL_ CRYP_ H 00021 #define STM32G4xx_ HAL_ CRYP_ H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32g4xx_ hal_ def.h" 00029 00030 /** @addtogroup STM32G4xx_ HAL_ Driver 00031 * @{ 00032 */ 00033 00034 #if defined(AES) 00035 00036 /** @defgroup CRYP CRYP 00037 * @brief CRYP HAL模块驱动程序。 00038 * @{ 00039 */ 00040 00041 /* Exported types ------------------------------------------------------------*/ 00042 00043 /** @defgroup CRYP_ Exported_ Types CRYP导出的类型 00044 * @{ 00045 */ 00046 00047 /** 00048 * @brief CRYP初始化结构定义 00049 */ 00050 00051 typedef struct 00052 { 00053 uint32_ t DataType; /*!< 32位数据、16位数据、8位数据或1位字符串。 00054 此参数可以是@ref CRYP_ Data_ Type的值 */ 00055 uint32_ t KeySize; /*!< 仅在AES模式下使用:CRYP1中128、192或256位密钥长度。 00056 TinyAES中128或256位密钥长度 00057 此参数可以是@ref CRYP_ Key_ Size的值 */ 00058 uint32_ t *pKey; /*!< 用于加密/解密的密钥 */ 00059 uint32_ t *pInitVect; /*!< 初始化向量,也用作初始化 00060 CTR模式下的计数器 */ 00061 uint32_ t Algorithm; /*!< DES/TDES算法ECB/CBC 00062 AES算法ECB/CBC/CTR/GCM或CCM 00063 此参数可以是@ref CRYP_ Algorithm_ Mode的值 */ 00064 uint32_ t *Header; /*!< 仅在AES GCM和CCM算法中用于认证, 00065 GCM:也称为附加认证数据 00066 CCM:称为B1,由关联数据长度和关联数据组成。 */ 00067 uint32_ t HeaderSize; /*!< 头部缓冲区的大小 */ 00068 uint32_ t *B0; /*!< B0是仅在AES CCM模式下使用的第一个认证块 */ 00069 uint32_ t DataWidthUnit; /*!< 负载数据宽度单位,此参数可以是@ref CRYP_ Data_ Width_ Unit的值*/ 00070 uint32_ t HeaderWidthUnit; /*!< 头部宽度单位,此参数可以是@ref CRYP_ Header_ Width_ Unit的值*/ 00071 uint32_ t KeyIVConfigSkip; /*!< CRYP外设密钥和IV配置跳过,配置密钥和初始化 00072 仅一次向量,并在连续处理时跳过配置。 00073 此参数可以是@ref CRYP_ Configuration_ Skip的值 */ 00074 00075 } CRYP_ ConfigTypeDef; 00076 00077 00078 /** 00079 * @brief CRYP状态结构定义 00080 */ 00081 00082 typedef enum 00083 { 00084 HAL_ CRYP_ STATE_ RESET = 0x00U, /*!< CRYP尚未初始化或禁用 */ 00085 HAL_ CRYP_ STATE_ READY = 0x01U, /*!< CRYP已初始化并准备使用 */ 00086 HAL_ CRYP_ STATE_ BUSY = 0x02U, /*!< CRYP忙碌,内部处理正在进行 */ 00087 #if (USE_ HAL_ CRYP_ SUSPEND_ RESUME == 1U) 00088 HAL_ CRYP_ STATE_ SUSPENDED = 0x03U, /*!< CRYP已挂起 */ 00089 #endif /* USE_ HAL_ CRYP_ SUSPEND_ RESUME */ 00090 } HAL_ CRYP_ STATETypeDef; 00091 00092 #if (USE_ HAL_ CRYP_ SUSPEND_ RESUME == 1U) 00093 /** 00094 * @brief HAL CRYP模式挂起定义 00095 */ 00096 typedef enum 00097 { 00098 HAL_ CRYP_ SUSPEND_ NONE = 0x00U, /*!< 未请求CRYP处理挂起 */ 00099 HAL_ CRYP_ SUSPEND = 0x01U /*!< 已请求CRYP处理挂起 */ 00100 } HAL_ SuspendTypeDef; 00101 #endif /* USE_ HAL_ CRYP_ SUSPEND_ RESUME */ 00102 00103 /** 00104 * @brief CRYP句柄结构定义 00105 */ 00106 #if (USE_ HAL_ CRYP_ REGISTER_ CALLBACKS == 1) 00107 typedef struct __CRYP_ HandleTypeDef 00108 #else 00109 typedef struct 00110 #endif /* USE_ HAL_ CRYP_ REGISTER_ CALLBACKS */ 00111 { 00112 AES_ TypeDef *Instance; /*!< AES寄存器基地址 */ 00113 00114 CRYP_ ConfigTypeDef Init; /*!< CRYP必需参数 */ 00115 00116 FunctionalState AutoKeyDerivation; /*!< 仅在TinyAES中使用,允许在解密前绕过或不绕过密钥写入。 00117 此参数可以是ENABLE/DISABLE的值 */ 00118 00119 uint32_ t *pCrypInBuffPtr; /*!< 指向CRYP处理(加密、解密等)缓冲区的指针 */ 00120 00121 uint32_ t *pCrypOutBuffPtr; /*!< 指向CRYP处理(加密、解密等)缓冲区的指针 */ 00122 00123 __IO uint16_ t CrypHeaderCount; /*!< 头部数据计数器(以字为单位) */ 00124 00125 __IO uint16_ t CrypInCount; /*!< 输入数据计数器(以字为单位) */ 00126 00127 __IO uint16_ t CrypOutCount; /*!< 输出数据计数器(以字为单位) */ 00128 00129 uint16_ t Size; /*!< 输入数据长度 */ 00130 00131 uint32_ t Phase; /*!< CRYP外设阶段 */ 00132 00133 DMA_HandleTypeDef *hdmain; /*!< CRYP输入DMA句柄参数 */ 00134 00135 DMA_HandleTypeDef *hdmaout; /*!< CRYP输出DMA句柄参数 */ 00136 00137 HAL_ LockTypeDef Lock; /*!< CRYP锁对象 */ 00138 00139 __IO HAL_ CRYP_ STATETypeDef State; /*!< CRYP外设状态 */ 00140 00141 __IO uint32_ t ErrorCode; /*!< CRYP外设错误代码 */ 00142 00143 uint32_ t KeyIVConfig; /*!< CRYP外设密钥和IV配置标志,当 00144 可以跳过配置时使用 */ 00145 00146 uint32_ t SizesSum; /*!< 连续负载长度之和(以字节为单位),存储 00147 用于在处理多条消息后进行单一签名计算 */ 00148 */ 00149 00150 #if (USE_ HAL_ CRYP_ REGISTER_ CALLBACKS == 1U) 00151 void (*InCpltCallback)(struct __CRYP_ HandleTypeDef *hcryp); /*!< CRYP输入FIFO传输完成回调 */ 00152 void (*OutCpltCallback)(struct __CRYP_ HandleTypeDef *hcryp); /*!< CRYP输出FIFO传输完成回调 */ 00153 void (*ErrorCallback)(struct __CRYP_ HandleTypeDef *hcryp); /*!< CRYP错误回调 */ 00154 00155 void (* MspInitCallback)(struct __CRYP_ HandleTypeDef *hcryp); /*!< CRYP MspInit回调 */ 00156 void (* MspDeInitCallback)(struct __CRYP_ HandleTypeDef *hcryp); /*!< CRYP MspDeInit回调 */ 00157 00158 #endif /* (USE_ HAL_ CRYP_ REGISTER_ CALLBACKS) */ 00159 00160 #if (USE_ HAL_ CRYP_ SUSPEND_ RESUME == 1U) 00161 00162 __IO HAL_ SuspendTypeDef SuspendRequest; /*!< CRYP外设挂起请求标志 */ 00163 00164 CRYP_ ConfigTypeDef Init_ saved; /*!< 处理挂起时CRYP必需参数的副本 */ 00165 00166 uint32_ t *pCrypInBuffPtr_ saved; /*!< 处理挂起时CRYP输入指针的副本 */ 00167 00168 uint32_ t *pCrypOutBuffPtr_ saved; /*!< 处理挂起时CRYP输出指针的副本 */ 00169 00170 uint32_ t CrypInCount_ saved; /*!< 处理挂起时CRYP输入数据计数器的副本 */ 00171 00172 uint32_ t CrypOutCount_ saved; /*!< 处理挂起时CRYP输出数据计数器的副本 */ 00173 00174 uint32_ t Phase_ saved; /*!< 处理挂起时CRYP认证阶段的副本 */ 00175 00176 __IO HAL_ CRYP_ STATETypeDef State_ saved; /*!< 处理挂起时CRYP外设状态的副本 */ 00177 00178 uint32_ t IV_ saved[4]; /*!< 初始化向量寄存器的副本 */ 00179 00180 uint32_ t SUSPxR_ saved[8]; /*!< 挂起寄存器的副本 */ 00181 00182 uint32_ t CR_ saved; /*!< 处理挂起时CRYP控制寄存器的副本*/ 00183 00184 uint32_ t Key_ saved[8]; /*!< 密钥寄存器的副本 */ 00185 00186 uint16_ t Size_ saved; /*!< 输入缓冲区大小的副本 */ 00187 00188 uint16_ t CrypHeaderCount_ saved; /*!< 处理挂起时CRYP头部数据计数器的副本 */ 00189 00190 uint32_ t SizesSum_ saved; /*!< 处理挂起时SizesSum的副本 */ 00191 00192 uint32_ t ResumingFlag; /*!< 恢复标志,用于绕过已完成的步骤 */ 00194 00195 FunctionalState AutoKeyDerivation_ saved; /*!< CRYP句柄自动密钥派生参数的副本 */ 00196 00197 #endif /* USE_ HAL_ CRYP_ SUSPEND_ RESUME */ 00198 00199 } CRYP_ HandleTypeDef; 00200 00201 #if (USE_ HAL_ CRYP_ REGISTER_ CALLBACKS == 1U) 00202 /** @defgroup HAL_ CRYP_ Callback_ ID_ enumeration_ definition HAL CRYP回调ID枚举定义 00203 * @brief HAL CRYP回调ID枚举定义 00204 * @{ 00205 */ 00206 typedef enum 00207 { 00208 HAL_ CRYP_ MSPINIT_ CB_ ID = 0x00U, /*!< CRYP MspInit回调ID */ 00209 HAL_ CRYP_ MSPDEINIT_ CB_ ID = 0x01U, /*!< CRYP MspDeInit回调ID */ 00210 HAL_ CRYP_ INPUT_ COMPLETE_ CB_ ID = 0x02U, /*!< CRYP输入FIFO传输完成回调ID */ 00211 HAL_ CRYP_ OUTPUT_ COMPLETE_ CB_ ID = 0x03U, /*!< CRYP输出FIFO传输完成回调ID */ 00212 HAL_ CRYP_ ERROR_ CB_ ID = 0x04U, /*!< CRYP错误回调ID */ 00213 } HAL_ CRYP_ CallbackIDTypeDef; 00214 /** 00215 * @} 00216 */ 00217 00218 /** @defgroup HAL_ CRYP_ Callback_ pointer_ definition HAL CRYP回调指针定义 00219 * @brief HAL CRYP回调指针定义 00220 * @{ 00221 */ 00222 00223 typedef void (*pCRYP_ CallbackTypeDef)(CRYP_ HandleTypeDef *hcryp); /*!< 指向通用CRYP回调函数的指针 */ 00224 00225 /** 00226 * @} 00227 */ 00228 00229 #endif /* USE_ HAL_ CRYP_ REGISTER_ CALLBACKS */ 00230 00231 /** 00232 * @} 00233 */ 00234 00235 /* Exported constants --------------------------------------------------------*/ 00236 /** @defgroup CRYP_ Exported_ Constants CRYP导出常量 00237 * @{