STM32L443xx HAL User Manual
|
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 */