STM32G474xx HAL用户手册
stm32g4xx_ hal_ cryp.h
转到该文件的文档。
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   * @{
</