STM32L443xx HAL User Manual
stm32l4xx_hal_pka.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l4xx_hal_pka.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of PKA HAL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 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 STM32L4xx_HAL_PKA_H
00021 #define STM32L4xx_HAL_PKA_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32l4xx_hal_def.h"
00029 
00030 /** @addtogroup STM32L4xx_HAL_Driver
00031   * @{
00032   */
00033 
00034 #if defined(PKA) && defined(HAL_PKA_MODULE_ENABLED)
00035 
00036 /** @addtogroup PKA
00037   * @{
00038   */
00039 
00040 /* Exported types ------------------------------------------------------------*/
00041 /** @defgroup PKA_Exported_Types PKA Exported Types
00042   * @{
00043   */
00044 
00045 /** @defgroup HAL_state_structure_definition HAL state structure definition
00046   * @brief  HAL State structures definition
00047   * @{
00048   */
00049 typedef enum
00050 {
00051   HAL_PKA_STATE_RESET   = 0x00U,  /*!< PKA not yet initialized or disabled  */
00052   HAL_PKA_STATE_READY   = 0x01U,  /*!< PKA initialized and ready for use    */
00053   HAL_PKA_STATE_BUSY    = 0x02U,  /*!< PKA internal processing is ongoing   */
00054   HAL_PKA_STATE_ERROR   = 0x03U,  /*!< PKA error state                      */
00055 }
00056 HAL_PKA_StateTypeDef;
00057 
00058 /**
00059   * @}
00060   */
00061 
00062 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00063 /** @defgroup HAL_callback_id HAL callback ID enumeration
00064   * @{
00065   */
00066 typedef enum
00067 {
00068   HAL_PKA_OPERATION_COMPLETE_CB_ID      = 0x00U,    /*!< PKA End of operation callback ID  */
00069   HAL_PKA_ERROR_CB_ID                   = 0x01U,    /*!< PKA Error callback ID             */
00070   HAL_PKA_MSPINIT_CB_ID                 = 0x02U,    /*!< PKA Msp Init callback ID          */
00071   HAL_PKA_MSPDEINIT_CB_ID               = 0x03U     /*!< PKA Msp DeInit callback ID        */
00072 } HAL_PKA_CallbackIDTypeDef;
00073 
00074 /**
00075   * @}
00076   */
00077 
00078 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */
00079 
00080 /** @defgroup PKA_Error_Code_definition PKA Error Code definition
00081   * @brief  PKA Error Code definition
00082   * @{
00083   */
00084 #define HAL_PKA_ERROR_NONE      (0x00000000U)
00085 #define HAL_PKA_ERROR_ADDRERR   (0x00000001U)
00086 #define HAL_PKA_ERROR_RAMERR    (0x00000002U)
00087 #define HAL_PKA_ERROR_TIMEOUT   (0x00000004U)
00088 #define HAL_PKA_ERROR_OPERATION (0x00000008U)
00089 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00090 #define HAL_PKA_ERROR_INVALID_CALLBACK  (0x00000010U)    /*!< Invalid Callback error */
00091 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */
00092 
00093 /**
00094   * @}
00095   */
00096 
00097 /** @defgroup PKA_handle_Structure_definition PKA handle Structure definition
00098   * @brief  PKA handle Structure definition
00099   * @{
00100   */
00101 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00102 typedef struct __PKA_HandleTypeDef
00103 #else
00104 typedef struct
00105 #endif  /* USE_HAL_PKA_REGISTER_CALLBACKS */
00106 {
00107   PKA_TypeDef                   *Instance;              /*!< Register base address */
00108   __IO HAL_PKA_StateTypeDef     State;                  /*!< PKA state */
00109   __IO uint32_t                 ErrorCode;              /*!< PKA Error code */
00110 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00111   void (* OperationCpltCallback)(struct __PKA_HandleTypeDef *hpka); /*!< PKA End of operation callback */
00112   void (* ErrorCallback)(struct __PKA_HandleTypeDef *hpka);         /*!< PKA Error callback            */
00113   void (* MspInitCallback)(struct __PKA_HandleTypeDef *hpka);       /*!< PKA Msp Init callback         */
00114   void (* MspDeInitCallback)(struct __PKA_HandleTypeDef *hpka);     /*!< PKA Msp DeInit callback       */
00115 #endif  /* USE_HAL_PKA_REGISTER_CALLBACKS */
00116 } PKA_HandleTypeDef;
00117 /**
00118   * @}
00119   */
00120 
00121 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00122 /** @defgroup PKA_Callback_definition PKA Callback pointer definition
00123   * @brief  PKA Callback pointer definition
00124   * @{
00125   */
00126 typedef  void (*pPKA_CallbackTypeDef)(PKA_HandleTypeDef *hpka); /*!< Pointer to a PKA callback function */
00127 /**
00128   * @}
00129   */
00130 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */
00131 /** @defgroup PKA_Operation PKA operation structure definition
00132   * @brief  Input and output data definition
00133   * @{
00134   */
00135 typedef struct
00136 {
00137   uint32_t scalarMulSize;              /*!< Number of element in scalarMul array */
00138   uint32_t modulusSize;                /*!< Number of element in modulus, coefA, pointX and pointY arrays */
00139   uint32_t coefSign;                   /*!< Curve coefficient a sign */
00140   const uint8_t *coefA;                /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */
00141   const uint8_t *modulus;              /*!< Pointer to curve modulus value p (Array of modulusSize elements) */
00142   const uint8_t *pointX;               /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */
00143   const uint8_t *pointY;               /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */
00144   const uint8_t *scalarMul;            /*!< Pointer to scalar multiplier k   (Array of scalarMulSize elements) */
00145   const uint32_t *pMontgomeryParam;    /*!< Pointer to Montgomery parameter  (Array of modulusSize/4 elements) */
00146 } PKA_ECCMulFastModeInTypeDef;
00147 
00148 typedef struct
00149 {
00150   uint32_t scalarMulSize;              /*!< Number of element in scalarMul array */
00151   uint32_t modulusSize;                /*!< Number of element in modulus, coefA, pointX and pointY arrays */
00152   uint32_t coefSign;                   /*!< Curve coefficient a sign */
00153   const uint8_t *coefA;                /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */
00154   const uint8_t *modulus;              /*!< Pointer to curve modulus value p (Array of modulusSize elements) */
00155   const uint8_t *pointX;               /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */
00156   const uint8_t *pointY;               /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */
00157   const uint8_t *scalarMul;            /*!< Pointer to scalar multiplier k   (Array of scalarMulSize elements) */
00158 } PKA_ECCMulInTypeDef;
00159 
00160 typedef struct
00161 {
00162   uint32_t modulusSize;                /*!< Number of element in coefA, coefB, modulus, pointX and pointY arrays */
00163   uint32_t coefSign;                   /*!< Curve coefficient a sign */
00164   const uint8_t *coefA;                /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */
00165   const uint8_t *coefB;                /*!< Pointer to curve coefficient b   (Array of modulusSize elements) */
00166   const uint8_t *modulus;              /*!< Pointer to curve modulus value p (Array of modulusSize elements) */
00167   const uint8_t *pointX;               /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */
00168   const uint8_t *pointY;               /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */
00169 } PKA_PointCheckInTypeDef;
00170 
00171 typedef struct
00172 {
00173   uint32_t size;                       /*!< Number of element in popA array */
00174   const uint8_t *pOpDp;                /*!< Pointer to operand dP   (Array of size/2 elements) */
00175   const uint8_t *pOpDq;                /*!< Pointer to operand dQ   (Array of size/2 elements) */
00176   const uint8_t *pOpQinv;              /*!< Pointer to operand qinv (Array of size/2 elements) */
00177   const uint8_t *pPrimeP;              /*!< Pointer to prime p      (Array of size/2 elements) */
00178   const uint8_t *pPrimeQ;              /*!< Pointer to prime Q      (Array of size/2 elements) */
00179   const uint8_t *popA;                 /*!< Pointer to operand A    (Array of size elements) */
00180 } PKA_RSACRTExpInTypeDef;
00181 
00182 typedef struct
00183 {
00184   uint32_t primeOrderSize;             /*!< Number of element in primeOrder array */
00185   uint32_t modulusSize;                /*!< Number of element in modulus array */
00186   uint32_t coefSign;                   /*!< Curve coefficient a sign */
00187   const uint8_t *coef;                 /*!< Pointer to curve coefficient |a|     (Array of modulusSize elements) */
00188   const uint8_t *modulus;              /*!< Pointer to curve modulus value p     (Array of modulusSize elements) */
00189   const uint8_t *basePointX;           /*!< Pointer to curve base point xG       (Array of modulusSize elements) */
00190   const uint8_t *basePointY;           /*!< Pointer to curve base point yG       (Array of modulusSize elements) */
00191   const uint8_t *pPubKeyCurvePtX;      /*!< Pointer to public-key curve point xQ (Array of modulusSize elements) */
00192   const uint8_t *pPubKeyCurvePtY;      /*!< Pointer to public-key curve point yQ (Array of modulusSize elements) */
00193   const uint8_t *RSign;                /*!< Pointer to signature part r          (Array of primeOrderSize elements) */
00194   const uint8_t *SSign;                /*!< Pointer to signature part s          (Array of primeOrderSize elements) */
00195   const uint8_t *hash;                 /*!< Pointer to hash of the message e     (Array of primeOrderSize elements) */
00196   const uint8_t *primeOrder;           /*!< Pointer to order of the curve n      (Array of primeOrderSize elements) */
00197 } PKA_ECDSAVerifInTypeDef;
00198 
00199 typedef struct
00200 {
00201   uint32_t primeOrderSize;             /*!< Number of element in primeOrder array */
00202   uint32_t modulusSize;                /*!< Number of element in modulus array */
00203   uint32_t coefSign;                   /*!< Curve coefficient a sign */
00204   const uint8_t *coef;                 /*!< Pointer to curve coefficient |a|     (Array of modulusSize elements) */
00205   const uint8_t *modulus;              /*!< Pointer to curve modulus value p     (Array of modulusSize elements) */
00206   const uint8_t *integer;              /*!< Pointer to random integer k          (Array of primeOrderSize elements) */
00207   const uint8_t *basePointX;           /*!< Pointer to curve base point xG       (Array of modulusSize elements) */
00208   const uint8_t *basePointY;           /*!< Pointer to curve base point yG       (Array of modulusSize elements) */
00209   const uint8_t *hash;                 /*!< Pointer to hash of the message       (Array of primeOrderSize elements) */
00210   const uint8_t *privateKey;           /*!< Pointer to private key d             (Array of primeOrderSize elements) */
00211   const uint8_t *primeOrder;           /*!< Pointer to order of the curve n      (Array of primeOrderSize elements) */
00212 } PKA_ECDSASignInTypeDef;
00213 
00214 typedef struct
00215 {
00216   uint8_t *RSign;                      /*!< Pointer to signature part r          (Array of modulusSize elements) */
00217   uint8_t *SSign;                      /*!< Pointer to signature part s          (Array of modulusSize elements) */
00218 } PKA_ECDSASignOutTypeDef;
00219 
00220 typedef struct
00221 {
00222   uint8_t *ptX;                        /*!< Pointer to point P coordinate xP     (Array of modulusSize elements) */
00223   uint8_t *ptY;                        /*!< Pointer to point P coordinate yP     (Array of modulusSize elements) */
00224 } PKA_ECDSASignOutExtParamTypeDef, PKA_ECCMulOutTypeDef;
00225 
00226 
00227 typedef struct
00228 {
00229   uint32_t expSize;                    /*!< Number of element in pExp array */
00230   uint32_t OpSize;                     /*!< Number of element in pOp1 and pMod arrays */
00231   const uint8_t *pExp;                 /*!< Pointer to Exponent             (Array of expSize elements) */
00232   const uint8_t *pOp1;                 /*!< Pointer to Operand              (Array of OpSize elements) */
00233   const uint8_t *pMod;                 /*!< Pointer to modulus              (Array of OpSize elements) */
00234 } PKA_ModExpInTypeDef;
00235 
00236 
00237 typedef struct
00238 {
00239   uint32_t expSize;                    /*!< Number of element in pExp and pMontgomeryParam arrays */
00240   uint32_t OpSize;                     /*!< Number of element in pOp1 and pMod arrays */
00241   const uint8_t *pExp;                 /*!< Pointer to Exponent             (Array of expSize elements) */
00242   const uint8_t *pOp1;                 /*!< Pointer to Operand              (Array of OpSize elements) */
00243   const uint8_t *pMod;                 /*!< Pointer to modulus              (Array of OpSize elements) */
00244   const uint32_t *pMontgomeryParam;    /*!< Pointer to Montgomery parameter (Array of expSize/4 elements) */
00245 } PKA_ModExpFastModeInTypeDef;
00246 
00247 typedef struct
00248 {
00249   uint32_t size;                       /*!< Number of element in pOp1 array */
00250   const uint8_t *pOp1;                 /*!< Pointer to Operand (Array of size elements) */
00251 } PKA_MontgomeryParamInTypeDef;
00252 
00253 typedef struct
00254 {
00255   uint32_t size;                       /*!< Number of element in pOp1 and pOp2 arrays */
00256   const uint32_t *pOp1;                /*!< Pointer to Operand 1 (Array of size elements) */
00257   const uint32_t *pOp2;                /*!< Pointer to Operand 2 (Array of size elements) */
00258 } PKA_AddInTypeDef, PKA_SubInTypeDef, PKA_MulInTypeDef, PKA_CmpInTypeDef;
00259 
00260 typedef struct
00261 {
00262   uint32_t size;                       /*!< Number of element in pOp1 array */
00263   const uint32_t *pOp1;                /*!< Pointer to Operand 1       (Array of size elements) */
00264   const uint8_t *pMod;                 /*!< Pointer to modulus value n (Array of size*4 elements) */
00265 } PKA_ModInvInTypeDef;
00266 
00267 typedef struct
00268 {
00269   uint32_t OpSize;                     /*!< Number of element in pOp1 array */
00270   uint32_t modSize;                    /*!< Number of element in pMod array */
00271   const uint32_t *pOp1;                /*!< Pointer to Operand 1       (Array of OpSize elements) */
00272   const uint8_t *pMod;                 /*!< Pointer to modulus value n (Array of modSize elements) */
00273 } PKA_ModRedInTypeDef;
00274 
00275 typedef struct
00276 {
00277   uint32_t size;                       /*!< Number of element in pOp1 and pOp2 arrays */
00278   const uint32_t *pOp1;                /*!< Pointer to Operand 1 (Array of size elements) */
00279   const uint32_t *pOp2;                /*!< Pointer to Operand 2 (Array of size elements) */
00280   const uint8_t  *pOp3;                /*!< Pointer to Operand 3 (Array of size*4 elements) */
00281 } PKA_ModAddInTypeDef, PKA_ModSubInTypeDef, PKA_MontgomeryMulInTypeDef;
00282 
00283 /**
00284   * @}
00285   */
00286 
00287 /**
00288   * @}
00289   */
00290 
00291 /* Exported constants --------------------------------------------------------*/
00292 /** @defgroup PKA_Exported_Constants PKA Exported Constants
00293   * @{
00294   */
00295 
00296 /** @defgroup PKA_Mode PKA mode
00297   * @{
00298   */
00299 #define PKA_MODE_MONTGOMERY_PARAM                 (0x00000001U)
00300 #define PKA_MODE_MODULAR_EXP                      (0x00000000U)
00301 #define PKA_MODE_MODULAR_EXP_FAST_MODE            (0x00000002U)
00302 #define PKA_MODE_ECC_MUL                          (0x00000020U)
00303 #define PKA_MODE_ECC_MUL_FAST_MODE                (0x00000022U)
00304 #define PKA_MODE_ECDSA_SIGNATURE                  (0x00000024U)
00305 #define PKA_MODE_ECDSA_VERIFICATION               (0x00000026U)
00306 #define PKA_MODE_POINT_CHECK                      (0x00000028U)
00307 #define PKA_MODE_RSA_CRT_EXP                      (0x00000007U)
00308 #define PKA_MODE_MODULAR_INV                      (0x00000008U)
00309 #define PKA_MODE_ARITHMETIC_ADD                   (0x00000009U)
00310 #define PKA_MODE_ARITHMETIC_SUB                   (0x0000000AU)
00311 #define PKA_MODE_ARITHMETIC_MUL                   (0x0000000BU)
00312 #define PKA_MODE_COMPARISON                       (0x0000000CU)
00313 #define PKA_MODE_MODULAR_RED                      (0x0000000DU)
00314 #define PKA_MODE_MODULAR_ADD                      (0x0000000EU)
00315 #define PKA_MODE_MODULAR_SUB                      (0x0000000FU)
00316 #define PKA_MODE_MONTGOMERY_MUL                   (0x00000010U)
00317 /**
00318   * @}
00319   */
00320 
00321 /** @defgroup PKA_Interrupt_configuration_definition PKA Interrupt configuration definition
00322   * @brief PKA Interrupt definition
00323   * @{
00324   */
00325 #define PKA_IT_PROCEND                            PKA_CR_PROCENDIE
00326 #define PKA_IT_ADDRERR                            PKA_CR_ADDRERRIE
00327 #define PKA_IT_RAMERR                             PKA_CR_RAMERRIE
00328 
00329 /**
00330   * @}
00331   */
00332 
00333 /** @defgroup PKA_Flag_definition PKA Flag definition
00334   * @{
00335   */
00336 #define PKA_FLAG_PROCEND                          PKA_SR_PROCENDF
00337 #define PKA_FLAG_ADDRERR                          PKA_SR_ADDRERRF
00338 #define PKA_FLAG_RAMERR                           PKA_SR_RAMERRF
00339 
00340 /**
00341   * @}
00342   */
00343 
00344 /**
00345   * @}
00346   */
00347 
00348 /* Exported macros -----------------------------------------------------------*/
00349 
00350 /** @defgroup PKA_Exported_Macros PKA Exported Macros
00351   * @{
00352   */
00353 
00354 /** @brief  Reset PKA handle state.
00355   * @param  __HANDLE__ specifies the PKA Handle
00356   * @retval None
00357   */
00358 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00359 #define __HAL_PKA_RESET_HANDLE_STATE(__HANDLE__)                do{                                                   \
00360                                                                     (__HANDLE__)->State = HAL_PKA_STATE_RESET;       \
00361                                                                     (__HANDLE__)->MspInitCallback = NULL;            \
00362                                                                     (__HANDLE__)->MspDeInitCallback = NULL;          \
00363                                                                   } while(0)
00364 #else
00365 #define __HAL_PKA_RESET_HANDLE_STATE(__HANDLE__)                ((__HANDLE__)->State = HAL_PKA_STATE_RESET)
00366 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */
00367 
00368 /** @brief  Enable the specified PKA interrupt.
00369   * @param  __HANDLE__ specifies the PKA Handle
00370   * @param  __INTERRUPT__ specifies the interrupt source to enable.
00371   *        This parameter can be one of the following values:
00372   *            @arg @ref PKA_IT_PROCEND End Of Operation interrupt enable
00373   *            @arg @ref PKA_IT_ADDRERR Address error interrupt enable
00374   *            @arg @ref PKA_IT_RAMERR RAM error interrupt enable
00375   * @retval None
00376   */
00377 #define __HAL_PKA_ENABLE_IT(__HANDLE__, __INTERRUPT__)          ((__HANDLE__)->Instance->CR |= (__INTERRUPT__))
00378 
00379 /** @brief  Disable the specified PKA interrupt.
00380   * @param  __HANDLE__ specifies the PKA Handle
00381   * @param  __INTERRUPT__ specifies the interrupt source to disable.
00382   *        This parameter can be one of the following values:
00383   *            @arg @ref PKA_IT_PROCEND End Of Operation interrupt enable
00384   *            @arg @ref PKA_IT_ADDRERR Address error interrupt enable
00385   *            @arg @ref PKA_IT_RAMERR RAM error interrupt enable
00386   * @retval None
00387   */
00388 #define __HAL_PKA_DISABLE_IT(__HANDLE__, __INTERRUPT__)         ((__HANDLE__)->Instance->CR &= (~(__INTERRUPT__)))
00389 
00390 /** @brief  Check whether the specified PKA interrupt source is enabled or not.
00391   * @param  __HANDLE__ specifies the PKA Handle
00392   * @param  __INTERRUPT__ specifies the PKA interrupt source to check.
00393   *        This parameter can be one of the following values:
00394   *            @arg @ref PKA_IT_PROCEND End Of Operation interrupt enable
00395   *            @arg @ref PKA_IT_ADDRERR Address error interrupt enable
00396   *            @arg @ref PKA_IT_RAMERR RAM error interrupt enable
00397   * @retval The new state of __INTERRUPT__ (SET or RESET)
00398   */
00399 #define __HAL_PKA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)      ((((__HANDLE__)->Instance->CR\
00400                                                                    & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
00401 
00402 /** @brief  Check whether the specified PKA flag is set or not.
00403   * @param  __HANDLE__ specifies the PKA Handle
00404   * @param  __FLAG__ specifies the flag to check.
00405   *        This parameter can be one of the following values:
00406   *            @arg @ref PKA_FLAG_PROCEND End Of Operation
00407   *            @arg @ref PKA_FLAG_ADDRERR Address error
00408   *            @arg @ref PKA_FLAG_RAMERR RAM error
00409   * @retval The new state of __FLAG__ (SET or RESET)
00410   */
00411 #define __HAL_PKA_GET_FLAG(__HANDLE__, __FLAG__)                (((((__HANDLE__)->Instance->SR)\
00412                                                                    & (__FLAG__)) == (__FLAG__)) ? SET : RESET)
00413 
00414 /** @brief  Clear the PKA pending flags which are cleared by writing 1 in a specific bit.
00415   * @param  __HANDLE__ specifies the PKA Handle
00416   * @param  __FLAG__ specifies the flag to clear.
00417   *          This parameter can be any combination of the following values:
00418   *            @arg @ref PKA_FLAG_PROCEND End Of Operation
00419   *            @arg @ref PKA_FLAG_ADDRERR Address error
00420   *            @arg @ref PKA_FLAG_RAMERR RAM error
00421   * @retval None
00422   */
00423 #define __HAL_PKA_CLEAR_FLAG(__HANDLE__, __FLAG__)              ((__HANDLE__)->Instance->CLRFR = (__FLAG__))
00424 
00425 /** @brief  Enable the specified PKA peripheral.
00426   * @param  __HANDLE__ specifies the PKA Handle
00427   * @retval None
00428   */
00429 #define __HAL_PKA_ENABLE(__HANDLE__)                            (SET_BIT((__HANDLE__)->Instance->CR,  PKA_CR_EN))
00430 
00431 /** @brief  Disable the specified PKA peripheral.
00432   * @param  __HANDLE__ specifies the PKA Handle
00433   * @retval None
00434   */
00435 #define __HAL_PKA_DISABLE(__HANDLE__)                           (CLEAR_BIT((__HANDLE__)->Instance->CR, PKA_CR_EN))
00436 
00437 /** @brief  Start a PKA operation.
00438   * @param  __HANDLE__ specifies the PKA Handle
00439   * @retval None
00440   */
00441 #define __HAL_PKA_START(__HANDLE__)                             (SET_BIT((__HANDLE__)->Instance->CR,  PKA_CR_START))
00442 /**
00443   * @}
00444   */
00445 
00446 /* Private macros --------------------------------------------------------*/
00447 /* Exported functions --------------------------------------------------------*/
00448 /** @addtogroup PKA_Exported_Functions
00449   * @{
00450   */
00451 
00452 /** @addtogroup PKA_Exported_Functions_Group1
00453   * @{
00454   */
00455 /* Initialization and de-initialization functions *****************************/
00456 HAL_StatusTypeDef HAL_PKA_Init(PKA_HandleTypeDef *hpka);
00457 HAL_StatusTypeDef HAL_PKA_DeInit(PKA_HandleTypeDef *hpka);
00458 void              HAL_PKA_MspInit(PKA_HandleTypeDef *hpka);
00459 void              HAL_PKA_MspDeInit(PKA_HandleTypeDef *hpka);
00460 
00461 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1)
00462 /* Callbacks Register/UnRegister functions  ***********************************/
00463 HAL_StatusTypeDef HAL_PKA_RegisterCallback(PKA_HandleTypeDef *hpka, HAL_PKA_CallbackIDTypeDef CallbackID,
00464                                            pPKA_CallbackTypeDef pCallback);
00465 HAL_StatusTypeDef HAL_PKA_UnRegisterCallback(PKA_HandleTypeDef *hpka, HAL_PKA_CallbackIDTypeDef CallbackID);
00466 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */
00467 
00468 /**
00469   * @}
00470   */
00471 
00472 /** @addtogroup PKA_Exported_Functions_Group2
00473   * @{
00474   */
00475 /* IO operation functions *****************************************************/
00476 /* High Level Functions *******************************************************/
00477 HAL_StatusTypeDef HAL_PKA_ModExp(PKA_HandleTypeDef *hpka, PKA_ModExpInTypeDef *in, uint32_t Timeout);
00478 HAL_StatusTypeDef HAL_PKA_ModExp_IT(PKA_HandleTypeDef *hpka, PKA_ModExpInTypeDef *in);
00479 HAL_StatusTypeDef HAL_PKA_ModExpFastMode(PKA_HandleTypeDef *hpka, PKA_ModExpFastModeInTypeDef *in, uint32_t Timeout);
00480 HAL_StatusTypeDef HAL_PKA_ModExpFastMode_IT(PKA_HandleTypeDef *hpka, PKA_ModExpFastModeInTypeDef *in);
00481 void HAL_PKA_ModExp_GetResult(PKA_HandleTypeDef *hpka, uint8_t *pRes);
00482 
00483 HAL_StatusTypeDef HAL_PKA_ECDSASign(PKA_HandleTypeDef *hpka, PKA_ECDSASignInTypeDef *in, uint32_t Timeout);
00484 HAL_StatusTypeDef HAL_PKA_ECDSASign_IT(PKA_HandleTypeDef *hpka, PKA_ECDSASignInTypeDef *in);
00485 void HAL_PKA_ECDSASign_GetResult(PKA_HandleTypeDef *hpka, PKA_ECDSASignOutTypeDef *out,
00486                                  PKA_ECDSASignOutExtParamTypeDef *outExt);
00487 
00488 HAL_StatusTypeDef HAL_PKA_ECDSAVerif(PKA_HandleTypeDef *hpka, PKA_ECDSAVerifInTypeDef *in, uint32_t Timeout);
00489 HAL_StatusTypeDef HAL_PKA_ECDSAVerif_IT(PKA_HandleTypeDef *hpka, PKA_ECDSAVerifInTypeDef *in);
00490 uint32_t HAL_PKA_ECDSAVerif_IsValidSignature(PKA_HandleTypeDef const *const hpka);
00491 
00492 HAL_StatusTypeDef HAL_PKA_RSACRTExp(PKA_HandleTypeDef *hpka, PKA_RSACRTExpInTypeDef *in, uint32_t Timeout);
00493 HAL_StatusTypeDef HAL_PKA_RSACRTExp_IT(PKA_HandleTypeDef *hpka, PKA_RSACRTExpInTypeDef *in);
00494 void HAL_PKA_RSACRTExp_GetResult(PKA_HandleTypeDef *hpka, uint8_t *pRes);
00495 
00496 HAL_StatusTypeDef HAL_PKA_PointCheck(PKA_HandleTypeDef *hpka, PKA_PointCheckInTypeDef *in, uint32_t Timeout);
00497 HAL_StatusTypeDef HAL_PKA_PointCheck_IT(PKA_HandleTypeDef *hpka, PKA_PointCheckInTypeDef *in);
00498 uint32_t HAL_PKA_PointCheck_IsOnCurve(PKA_HandleTypeDef const *const hpka);
00499 
00500 HAL_StatusTypeDef HAL_PKA_ECCMul(PKA_HandleTypeDef *hpka, PKA_ECCMulInTypeDef *in, uint32_t Timeout);
00501 HAL_StatusTypeDef HAL_PKA_ECCMul_IT(PKA_HandleTypeDef *hpka, PKA_ECCMulInTypeDef *in);
00502 HAL_StatusTypeDef HAL_PKA_ECCMulFastMode(PKA_HandleTypeDef *hpka, PKA_ECCMulFastModeInTypeDef *in, uint32_t Timeout);
00503 HAL_StatusTypeDef HAL_PKA_ECCMulFastMode_IT(PKA_HandleTypeDef *hpka, PKA_ECCMulFastModeInTypeDef *in);
00504 void HAL_PKA_ECCMul_GetResult(PKA_HandleTypeDef *hpka, PKA_ECCMulOutTypeDef *out);
00505 
00506 HAL_StatusTypeDef HAL_PKA_Add(PKA_HandleTypeDef *hpka, PKA_AddInTypeDef *in, uint32_t Timeout);
00507 HAL_StatusTypeDef HAL_PKA_Add_IT(PKA_HandleTypeDef *hpka, PKA_AddInTypeDef *in);
00508 HAL_StatusTypeDef HAL_PKA_Sub(PKA_HandleTypeDef *hpka, PKA_SubInTypeDef *in, uint32_t Timeout);
00509 HAL_StatusTypeDef HAL_PKA_Sub_IT(PKA_HandleTypeDef *hpka, PKA_SubInTypeDef *in);
00510 HAL_StatusTypeDef HAL_PKA_Cmp(PKA_HandleTypeDef *hpka, PKA_CmpInTypeDef *in, uint32_t Timeout);
00511 HAL_StatusTypeDef HAL_PKA_Cmp_IT(PKA_HandleTypeDef *hpka, PKA_CmpInTypeDef *in);
00512 HAL_StatusTypeDef HAL_PKA_Mul(PKA_HandleTypeDef *hpka, PKA_MulInTypeDef *in, uint32_t Timeout);
00513 HAL_StatusTypeDef HAL_PKA_Mul_IT(PKA_HandleTypeDef *hpka, PKA_MulInTypeDef *in);
00514 HAL_StatusTypeDef HAL_PKA_ModAdd(PKA_HandleTypeDef *hpka, PKA_ModAddInTypeDef *in, uint32_t Timeout);
00515 HAL_StatusTypeDef HAL_PKA_ModAdd_IT(PKA_HandleTypeDef *hpka, PKA_ModAddInTypeDef *in);
00516 HAL_StatusTypeDef HAL_PKA_ModSub(PKA_HandleTypeDef *hpka, PKA_ModSubInTypeDef *in, uint32_t Timeout);
00517 HAL_StatusTypeDef HAL_PKA_ModSub_IT(PKA_HandleTypeDef *hpka, PKA_ModSubInTypeDef *in);
00518 HAL_StatusTypeDef HAL_PKA_ModInv(PKA_HandleTypeDef *hpka, PKA_ModInvInTypeDef *in, uint32_t Timeout);
00519 HAL_StatusTypeDef HAL_PKA_ModInv_IT(PKA_HandleTypeDef *hpka, PKA_ModInvInTypeDef *in);
00520 HAL_StatusTypeDef HAL_PKA_ModRed(PKA_HandleTypeDef *hpka, PKA_ModRedInTypeDef *in, uint32_t Timeout);
00521 HAL_StatusTypeDef HAL_PKA_ModRed_IT(PKA_HandleTypeDef *hpka, PKA_ModRedInTypeDef *in);
00522 HAL_StatusTypeDef HAL_PKA_MontgomeryMul(PKA_HandleTypeDef *hpka, PKA_MontgomeryMulInTypeDef *in, uint32_t Timeout);
00523 HAL_StatusTypeDef HAL_PKA_MontgomeryMul_IT(PKA_HandleTypeDef *hpka, PKA_MontgomeryMulInTypeDef *in);
00524 void HAL_PKA_Arithmetic_GetResult(PKA_HandleTypeDef *hpka, uint32_t *pRes);
00525 
00526 HAL_StatusTypeDef HAL_PKA_MontgomeryParam(PKA_HandleTypeDef *hpka, PKA_MontgomeryParamInTypeDef *in, uint32_t Timeout);
00527 HAL_StatusTypeDef HAL_PKA_MontgomeryParam_IT(PKA_HandleTypeDef *hpka, PKA_MontgomeryParamInTypeDef *in);
00528 void HAL_PKA_MontgomeryParam_GetResult(PKA_HandleTypeDef *hpka, uint32_t *pRes);
00529 
00530 
00531 HAL_StatusTypeDef HAL_PKA_Abort(PKA_HandleTypeDef *hpka);
00532 void HAL_PKA_RAMReset(PKA_HandleTypeDef *hpka);
00533 void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka);
00534 void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka);
00535 void HAL_PKA_IRQHandler(PKA_HandleTypeDef *hpka);
00536 /**
00537   * @}
00538   */
00539 
00540 /** @addtogroup PKA_Exported_Functions_Group3
00541   * @{
00542   */
00543 /* Peripheral State and Error functions ***************************************/
00544 HAL_PKA_StateTypeDef HAL_PKA_GetState(PKA_HandleTypeDef *hpka);
00545 uint32_t             HAL_PKA_GetError(PKA_HandleTypeDef *hpka);
00546 /**
00547   * @}
00548   */
00549 
00550 /**
00551   * @}
00552   */
00553 
00554 /**
00555   * @}
00556   */
00557 
00558 #endif /* defined(PKA) && defined(HAL_PKA_MODULE_ENABLED) */
00559 
00560 /**
00561   * @}
00562   */
00563 
00564 #ifdef __cplusplus
00565 }
00566 #endif
00567 
00568 #endif /* STM32L4xx_HAL_PKA_H */