1 /** 2 ****************************************************************************** 3 * @file stm32n6xx_hal_pka.h 4 * @author MCD Application Team 5 * @brief Header file of PKA HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2023 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32N6xx_HAL_PKA_H 21 #define STM32N6xx_HAL_PKA_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32n6xx_hal_def.h" 29 30 /** @addtogroup STM32N6xx_HAL_Driver 31 * @{ 32 */ 33 34 #if defined(PKA) && defined(HAL_PKA_MODULE_ENABLED) 35 36 /** @addtogroup PKA 37 * @{ 38 */ 39 40 /* Exported types ------------------------------------------------------------*/ 41 /** @defgroup PKA_Exported_Types PKA Exported Types 42 * @{ 43 */ 44 45 /** @defgroup HAL_state_structure_definition HAL state structure definition 46 * @brief HAL State structures definition 47 * @{ 48 */ 49 typedef enum 50 { 51 HAL_PKA_STATE_RESET = 0x00U, /*!< PKA not yet initialized or disabled */ 52 HAL_PKA_STATE_READY = 0x01U, /*!< PKA initialized and ready for use */ 53 HAL_PKA_STATE_BUSY = 0x02U, /*!< PKA internal processing is ongoing */ 54 HAL_PKA_STATE_ERROR = 0x03U, /*!< PKA error state */ 55 } 56 HAL_PKA_StateTypeDef; 57 58 /** 59 * @} 60 */ 61 62 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 63 /** @defgroup HAL_callback_id HAL callback ID enumeration 64 * @{ 65 */ 66 typedef enum 67 { 68 HAL_PKA_OPERATION_COMPLETE_CB_ID = 0x00U, /*!< PKA End of operation callback ID */ 69 HAL_PKA_ERROR_CB_ID = 0x01U, /*!< PKA Error callback ID */ 70 HAL_PKA_MSPINIT_CB_ID = 0x02U, /*!< PKA Msp Init callback ID */ 71 HAL_PKA_MSPDEINIT_CB_ID = 0x03U /*!< PKA Msp DeInit callback ID */ 72 } HAL_PKA_CallbackIDTypeDef; 73 74 /** 75 * @} 76 */ 77 78 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 79 80 /** @defgroup PKA_Error_Code_definition PKA Error Code definition 81 * @brief PKA Error Code definition 82 * @{ 83 */ 84 #define HAL_PKA_ERROR_NONE (0x00000000U) 85 #define HAL_PKA_ERROR_ADDRERR (0x00000001U) 86 #define HAL_PKA_ERROR_RAMERR (0x00000002U) 87 #define HAL_PKA_ERROR_TIMEOUT (0x00000004U) 88 #define HAL_PKA_ERROR_OPERATION (0x00000008U) 89 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 90 #define HAL_PKA_ERROR_INVALID_CALLBACK (0x00000010U) /*!< Invalid Callback error */ 91 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 92 93 /** 94 * @} 95 */ 96 97 /** @defgroup PKA_handle_Structure_definition PKA handle Structure definition 98 * @brief PKA handle Structure definition 99 * @{ 100 */ 101 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 102 typedef struct __PKA_HandleTypeDef 103 #else 104 typedef struct 105 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 106 { 107 PKA_TypeDef *Instance; /*!< Register base address */ 108 __IO HAL_PKA_StateTypeDef State; /*!< PKA state */ 109 __IO uint32_t ErrorCode; /*!< PKA Error code */ 110 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 111 void (* OperationCpltCallback)(struct __PKA_HandleTypeDef *hpka); /*!< PKA End of operation callback */ 112 void (* ErrorCallback)(struct __PKA_HandleTypeDef *hpka); /*!< PKA Error callback */ 113 void (* MspInitCallback)(struct __PKA_HandleTypeDef *hpka); /*!< PKA Msp Init callback */ 114 void (* MspDeInitCallback)(struct __PKA_HandleTypeDef *hpka); /*!< PKA Msp DeInit callback */ 115 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 116 } PKA_HandleTypeDef; 117 /** 118 * @} 119 */ 120 121 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 122 /** @defgroup PKA_Callback_definition PKA Callback pointer definition 123 * @brief PKA Callback pointer definition 124 * @{ 125 */ 126 typedef void (*pPKA_CallbackTypeDef)(PKA_HandleTypeDef *hpka); /*!< Pointer to a PKA callback function */ 127 /** 128 * @} 129 */ 130 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 131 /** @defgroup PKA_Operation PKA operation structure definition 132 * @brief Input and output data definition 133 * @{ 134 */ 135 136 typedef struct 137 { 138 uint32_t scalarMulSize; /*!< Number of element in scalarMul array */ 139 uint32_t modulusSize; /*!< Number of element in modulus, coefA, pointX and pointY arrays */ 140 uint32_t coefSign; /*!< Curve coefficient a sign */ 141 const uint8_t *coefA; /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */ 142 const uint8_t *coefB; /*!< pointer to curve coefficient b */ 143 const uint8_t *modulus; /*!< Pointer to curve modulus value p (Array of modulusSize elements) */ 144 const uint8_t *pointX; /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */ 145 const uint8_t *pointY; /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */ 146 const uint8_t *scalarMul; /*!< Pointer to scalar multiplier k (Array of scalarMulSize elements) */ 147 const uint8_t *primeOrder; /*!< pointer to order of the curve */ 148 } PKA_ECCMulInTypeDef; 149 150 typedef struct 151 { 152 uint32_t primeOrderSize; /*!< Number of element in primeOrder array */ 153 uint32_t scalarMulSize; /*!< Number of element in scalarMul array */ 154 uint32_t modulusSize; /*!< Number of element in modulus, coefA, pointX and pointY arrays */ 155 uint32_t coefSign; /*!< Curve coefficient a sign */ 156 const uint8_t *coefA; /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */ 157 const uint8_t *coefB; /*!< pointer to curve coefficient b */ 158 const uint8_t *modulus; /*!< Pointer to curve modulus value p (Array of modulusSize elements) */ 159 const uint8_t *pointX; /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */ 160 const uint8_t *pointY; /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */ 161 const uint8_t *scalarMul; /*!< Pointer to scalar multiplier k (Array of scalarMulSize elements) */ 162 const uint8_t *primeOrder; /*!< pointer to order of the curve */ 163 } PKA_ECCMulExInTypeDef; 164 165 typedef struct 166 { 167 uint32_t modulusSize; /*!< Number of element in coefA, coefB, modulus, pointX and pointY arrays */ 168 uint32_t coefSign; /*!< Curve coefficient a sign */ 169 const uint8_t *coefA; /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */ 170 const uint8_t *coefB; /*!< Pointer to curve coefficient b (Array of modulusSize elements) */ 171 const uint8_t *modulus; /*!< Pointer to curve modulus value p (Array of modulusSize elements) */ 172 const uint8_t *pointX; /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */ 173 const uint8_t *pointY; /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */ 174 const uint32_t *pMontgomeryParam; /*!< pointer to montgomery param R2 (modulus N) */ 175 } PKA_PointCheckInTypeDef; 176 177 typedef struct 178 { 179 uint32_t size; /*!< Number of element in popA array */ 180 const uint8_t *pOpDp; /*!< Pointer to operand dP (Array of size/2 elements) */ 181 const uint8_t *pOpDq; /*!< Pointer to operand dQ (Array of size/2 elements) */ 182 const uint8_t *pOpQinv; /*!< Pointer to operand qinv (Array of size/2 elements) */ 183 const uint8_t *pPrimeP; /*!< Pointer to prime p (Array of size/2 elements) */ 184 const uint8_t *pPrimeQ; /*!< Pointer to prime Q (Array of size/2 elements) */ 185 const uint8_t *popA; /*!< Pointer to operand A (Array of size elements) */ 186 } PKA_RSACRTExpInTypeDef; 187 188 typedef struct 189 { 190 uint32_t primeOrderSize; /*!< Number of element in primeOrder array */ 191 uint32_t modulusSize; /*!< Number of element in modulus array */ 192 uint32_t coefSign; /*!< Curve coefficient a sign */ 193 const uint8_t *coef; /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */ 194 const uint8_t *modulus; /*!< Pointer to curve modulus value p (Array of modulusSize elements) */ 195 const uint8_t *basePointX; /*!< Pointer to curve base point xG (Array of modulusSize elements) */ 196 const uint8_t *basePointY; /*!< Pointer to curve base point yG (Array of modulusSize elements) */ 197 const uint8_t *pPubKeyCurvePtX; /*!< Pointer to public-key curve point xQ (Array of modulusSize elements) */ 198 const uint8_t *pPubKeyCurvePtY; /*!< Pointer to public-key curve point yQ (Array of modulusSize elements) */ 199 const uint8_t *RSign; /*!< Pointer to signature part r (Array of primeOrderSize elements) */ 200 const uint8_t *SSign; /*!< Pointer to signature part s (Array of primeOrderSize elements) */ 201 const uint8_t *hash; /*!< Pointer to hash of the message e (Array of primeOrderSize elements) */ 202 const uint8_t *primeOrder; /*!< Pointer to order of the curve n (Array of primeOrderSize elements) */ 203 } PKA_ECDSAVerifInTypeDef; 204 205 typedef struct 206 { 207 uint32_t primeOrderSize; /*!< Number of element in primeOrder array */ 208 uint32_t modulusSize; /*!< Number of element in modulus array */ 209 uint32_t coefSign; /*!< Curve coefficient a sign */ 210 const uint8_t *coef; /*!< Pointer to curve coefficient |a| (Array of modulusSize elements) */ 211 const uint8_t *coefB; /*!< Pointer to B coefficient (Array of modulusSize elements) */ 212 const uint8_t *modulus; /*!< Pointer to curve modulus value p (Array of modulusSize elements) */ 213 const uint8_t *integer; /*!< Pointer to random integer k (Array of primeOrderSize elements) */ 214 const uint8_t *basePointX; /*!< Pointer to curve base point xG (Array of modulusSize elements) */ 215 const uint8_t *basePointY; /*!< Pointer to curve base point yG (Array of modulusSize elements) */ 216 const uint8_t *hash; /*!< Pointer to hash of the message (Array of primeOrderSize elements) */ 217 const uint8_t *privateKey; /*!< Pointer to private key d (Array of primeOrderSize elements) */ 218 const uint8_t *primeOrder; /*!< Pointer to order of the curve n (Array of primeOrderSize elements) */ 219 } PKA_ECDSASignInTypeDef; 220 221 typedef struct 222 { 223 uint8_t *RSign; /*!< Pointer to signature part r (Array of modulusSize elements) */ 224 uint8_t *SSign; /*!< Pointer to signature part s (Array of modulusSize elements) */ 225 } PKA_ECDSASignOutTypeDef; 226 227 typedef struct 228 { 229 uint8_t *ptX; /*!< Pointer to point P coordinate xP (Array of modulusSize elements) */ 230 uint8_t *ptY; /*!< Pointer to point P coordinate yP (Array of modulusSize elements) */ 231 } PKA_ECDSASignOutExtParamTypeDef, PKA_ECCMulOutTypeDef, PKA_ECCProjective2AffineOutTypeDef, 232 PKA_ECCDoubleBaseLadderOutTypeDef; 233 234 typedef struct 235 { 236 uint8_t *ptX; /*!< pointer to point P coordinate xP */ 237 uint8_t *ptY; /*!< pointer to point P coordinate yP */ 238 uint8_t *ptZ; /*!< pointer to point P coordinate zP */ 239 } PKA_ECCCompleteAdditionOutTypeDef; 240 241 typedef struct 242 { 243 uint32_t expSize; /*!< Number of element in pExp array */ 244 uint32_t OpSize; /*!< Number of element in pOp1 and pMod arrays */ 245 const uint8_t *pExp; /*!< Pointer to Exponent (Array of expSize elements) */ 246 const uint8_t *pOp1; /*!< Pointer to Operand (Array of OpSize elements) */ 247 const uint8_t *pMod; /*!< Pointer to modulus (Array of OpSize elements) */ 248 } PKA_ModExpInTypeDef; 249 250 typedef struct 251 { 252 uint32_t expSize; /*!< Size of the operand in bytes */ 253 uint32_t OpSize; /*!< Size of the operand in bytes */ 254 const uint8_t *pOp1; /*!< Pointer to Operand 1 */ 255 const uint8_t *pExp; /*!< Pointer to Exponent */ 256 const uint8_t *pMod; /*!< Pointer to Operand 1 */ 257 const uint8_t *pPhi; /*!< Pointer to Phi value */ 258 } PKA_ModExpProtectModeInTypeDef; 259 260 typedef struct 261 { 262 uint32_t expSize; /*!< Number of element in pExp and pMontgomeryParam arrays */ 263 uint32_t OpSize; /*!< Number of element in pOp1 and pMod arrays */ 264 const uint8_t *pExp; /*!< Pointer to Exponent (Array of expSize elements) */ 265 const uint8_t *pOp1; /*!< Pointer to Operand (Array of OpSize elements) */ 266 const uint8_t *pMod; /*!< Pointer to modulus (Array of OpSize elements) */ 267 const uint32_t *pMontgomeryParam; /*!< Pointer to Montgomery parameter (Array of expSize/4 elements) */ 268 } PKA_ModExpFastModeInTypeDef; 269 270 typedef struct 271 { 272 uint32_t size; /*!< Number of element in pOp1 array */ 273 const uint8_t *pOp1; /*!< Pointer to Operand (Array of size elements) */ 274 } PKA_MontgomeryParamInTypeDef; 275 276 typedef struct 277 { 278 uint32_t size; /*!< Number of element in pOp1 and pOp2 arrays */ 279 const uint32_t *pOp1; /*!< Pointer to Operand 1 (Array of size elements) */ 280 const uint32_t *pOp2; /*!< Pointer to Operand 2 (Array of size elements) */ 281 } PKA_AddInTypeDef, PKA_SubInTypeDef, PKA_MulInTypeDef, PKA_CmpInTypeDef; 282 283 typedef struct 284 { 285 uint32_t size; /*!< Number of element in pOp1 array */ 286 const uint32_t *pOp1; /*!< Pointer to Operand 1 (Array of size elements) */ 287 const uint8_t *pMod; /*!< Pointer to modulus value n (Array of size*4 elements) */ 288 } PKA_ModInvInTypeDef; 289 290 typedef struct 291 { 292 uint32_t OpSize; /*!< Number of element in pOp1 array */ 293 uint32_t modSize; /*!< Number of element in pMod array */ 294 const uint32_t *pOp1; /*!< Pointer to Operand 1 (Array of OpSize elements) */ 295 const uint8_t *pMod; /*!< Pointer to modulus value n (Array of modSize elements) */ 296 } PKA_ModRedInTypeDef; 297 298 typedef struct 299 { 300 uint32_t size; /*!< Number of element in pOp1 and pOp2 arrays */ 301 const uint32_t *pOp1; /*!< Pointer to Operand 1 (Array of size elements) */ 302 const uint32_t *pOp2; /*!< Pointer to Operand 2 (Array of size elements) */ 303 const uint8_t *pOp3; /*!< Pointer to Operand 3 (Array of size*4 elements) */ 304 } PKA_ModAddInTypeDef, PKA_ModSubInTypeDef, PKA_MontgomeryMulInTypeDef; 305 306 typedef struct 307 { 308 uint32_t primeOrderSize; /*!< curve prime order n length */ 309 uint32_t modulusSize; /*!< curve modulus p length */ 310 uint32_t coefSign; /*!< curve coefficient a sign */ 311 const uint8_t *coefA; /*!< pointer to curve coefficient |a| */ 312 const uint8_t *modulus; /*!< pointer to curve modulus value p */ 313 const uint8_t *integerK; /*!< pointer to cryptographically secure random integer k */ 314 const uint8_t *integerM; /*!< pointer to cryptographically secure random integer m */ 315 const uint8_t *basePointX1; /*!< pointer to curve base first point coordinate x */ 316 const uint8_t *basePointY1; /*!< pointer to curve base first point coordinate y */ 317 const uint8_t *basePointZ1; /*!< pointer to curve base first point coordinate z */ 318 const uint8_t *basePointX2; /*!< pointer to curve base second point coordinate x */ 319 const uint8_t *basePointY2; /*!< pointer to curve base second point coordinate y */ 320 const uint8_t *basePointZ2; /*!< pointer to curve base second point coordinate z */ 321 } PKA_ECCDoubleBaseLadderInTypeDef; 322 323 typedef struct 324 { 325 uint32_t modulusSize; /*!< curve modulus p length */ 326 const uint8_t *modulus; /*!< pointer to curve modulus value p */ 327 const uint8_t *basePointX; /*!< pointer to curve base point coordinate x */ 328 const uint8_t *basePointY; /*!< pointer to curve base point coordinate y */ 329 const uint8_t *basePointZ; /*!< pointer to curve base point coordinate z */ 330 const uint32_t *pMontgomeryParam; /*!< pointer to montgomery parameter R2 modulus n*/ 331 } PKA_ECCProjective2AffineInTypeDef; 332 333 typedef struct 334 { 335 uint32_t modulusSize; /*!< curve modulus p length */ 336 uint32_t coefSign; /*!< curve coefficient a sign */ 337 const uint8_t *modulus; /*!< pointer to curve modulus value p */ 338 const uint8_t *coefA; /*!< pointer to curve coefficient |a| */ 339 const uint8_t *basePointX1; /*!< pointer to curve base first point coordinate x */ 340 const uint8_t *basePointY1; /*!< pointer to curve base first point coordinate y */ 341 const uint8_t *basePointZ1; /*!< pointer to curve base first point coordinate z */ 342 const uint8_t *basePointX2; /*!< pointer to curve base second point coordinate x */ 343 const uint8_t *basePointY2; /*!< pointer to curve base second point coordinate y */ 344 const uint8_t *basePointZ2; /*!< pointer to curve base second point coordinate z */ 345 } PKA_ECCCompleteAdditionInTypeDef; 346 /** 347 * @} 348 */ 349 350 /** 351 * @} 352 */ 353 354 /* Exported constants --------------------------------------------------------*/ 355 /** @defgroup PKA_Exported_Constants PKA Exported Constants 356 * @{ 357 */ 358 359 /** @defgroup PKA_Mode PKA mode 360 * @{ 361 */ 362 #define PKA_MODE_MONTGOMERY_PARAM (0x00000001U) 363 #define PKA_MODE_MODULAR_EXP (0x00000000U) 364 #define PKA_MODE_MODULAR_EXP_FAST_MODE (0x00000002U) 365 #define PKA_MODE_ECC_MUL (0x00000020U) 366 #define PKA_MODE_ECDSA_SIGNATURE (0x00000024U) 367 #define PKA_MODE_ECDSA_VERIFICATION (0x00000026U) 368 #define PKA_MODE_POINT_CHECK (0x00000028U) 369 #define PKA_MODE_RSA_CRT_EXP (0x00000007U) 370 #define PKA_MODE_MODULAR_INV (0x00000008U) 371 #define PKA_MODE_ARITHMETIC_ADD (0x00000009U) 372 #define PKA_MODE_ARITHMETIC_SUB (0x0000000AU) 373 #define PKA_MODE_ARITHMETIC_MUL (0x0000000BU) 374 #define PKA_MODE_COMPARISON (0x0000000CU) 375 #define PKA_MODE_MODULAR_RED (0x0000000DU) 376 #define PKA_MODE_MODULAR_ADD (0x0000000EU) 377 #define PKA_MODE_MODULAR_SUB (0x0000000FU) 378 #define PKA_MODE_MONTGOMERY_MUL (0x00000010U) 379 #define PKA_MODE_ECC_PROJECTIVE_AFF (0x0000002FU) 380 #define PKA_MODE_DOUBLE_BASE_LADDER (0x00000027U) 381 #define PKA_MODE_ECC_COMPLETE_ADD (0x00000023U) 382 #define PKA_MODE_MODULAR_EXP_PROTECT (0x00000003U) 383 /** 384 * @} 385 */ 386 387 /** @defgroup PKA_Interrupt_configuration_definition PKA Interrupt configuration definition 388 * @brief PKA Interrupt definition 389 * @{ 390 */ 391 #define PKA_IT_PROCEND PKA_CR_PROCENDIE 392 #define PKA_IT_ADDRERR PKA_CR_ADDRERRIE 393 #define PKA_IT_RAMERR PKA_CR_RAMERRIE 394 #define PKA_IT_OPERR PKA_CR_OPERRIE 395 396 /** 397 * @} 398 */ 399 400 /** @defgroup PKA_Flag_definition PKA Flag definition 401 * @{ 402 */ 403 #define PKA_FLAG_PROCEND PKA_SR_PROCENDF 404 #define PKA_FLAG_ADDRERR PKA_SR_ADDRERRF 405 #define PKA_FLAG_RAMERR PKA_SR_RAMERRF 406 #define PKA_FLAG_OPERR PKA_SR_OPERRF 407 408 /** 409 * @} 410 */ 411 412 /** @defgroup PKA_Operation_Status PKA Operation Status 413 * @{ 414 */ 415 #define PKA_NO_ERROR 0xD60DUL 416 #define PKA_FAILED_COMPUTATION 0xCBC9UL 417 #define PKA_RPART_SIGNATURE_NULL 0xA3B7UL 418 #define PKA_SPART_SIGNATURE_NULL 0xF946UL 419 420 /** 421 * @} 422 */ 423 424 /** 425 * @} 426 */ 427 428 /* Exported macros -----------------------------------------------------------*/ 429 430 /** @defgroup PKA_Exported_Macros PKA Exported Macros 431 * @{ 432 */ 433 434 /** @brief Reset PKA handle state. 435 * @param __HANDLE__ specifies the PKA Handle 436 * @retval None 437 */ 438 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 439 #define __HAL_PKA_RESET_HANDLE_STATE(__HANDLE__) do{ \ 440 (__HANDLE__)->State = HAL_PKA_STATE_RESET; \ 441 (__HANDLE__)->MspInitCallback = NULL; \ 442 (__HANDLE__)->MspDeInitCallback = NULL; \ 443 } while(0) 444 #else 445 #define __HAL_PKA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_PKA_STATE_RESET) 446 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 447 448 /** @brief Enable the specified PKA interrupt. 449 * @param __HANDLE__ specifies the PKA Handle 450 * @param __INTERRUPT__ specifies the interrupt source to enable. 451 * This parameter can be one of the following values: 452 * @arg @ref PKA_IT_PROCEND End Of Operation interrupt enable 453 * @arg @ref PKA_IT_ADDRERR Address error interrupt enable 454 * @arg @ref PKA_IT_RAMERR RAM error interrupt enable 455 * @arg @ref PKA_IT_OPERR Operation error interrupt enable 456 * @retval None 457 */ 458 #define __HAL_PKA_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR |= (__INTERRUPT__)) 459 460 /** @brief Disable the specified PKA interrupt. 461 * @param __HANDLE__ specifies the PKA Handle 462 * @param __INTERRUPT__ specifies the interrupt source to disable. 463 * This parameter can be one of the following values: 464 * @arg @ref PKA_IT_PROCEND End Of Operation interrupt enable 465 * @arg @ref PKA_IT_ADDRERR Address error interrupt enable 466 * @arg @ref PKA_IT_RAMERR RAM error interrupt enable 467 * @arg @ref PKA_IT_OPERR Operation error interrupt enable 468 * @retval None 469 */ 470 #define __HAL_PKA_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR &= (~(__INTERRUPT__))) 471 472 /** @brief Check whether the specified PKA interrupt source is enabled or not. 473 * @param __HANDLE__ specifies the PKA Handle 474 * @param __INTERRUPT__ specifies the PKA interrupt source to check. 475 * This parameter can be one of the following values: 476 * @arg @ref PKA_IT_PROCEND End Of Operation interrupt enable 477 * @arg @ref PKA_IT_ADDRERR Address error interrupt enable 478 * @arg @ref PKA_IT_RAMERR RAM error interrupt enable 479 * @arg @ref PKA_IT_OPERR Operation error interrupt enable 480 * @retval The new state of __INTERRUPT__ (SET or RESET) 481 */ 482 #define __HAL_PKA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR\ 483 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) 484 485 /** @brief Check whether the specified PKA flag is set or not. 486 * @param __HANDLE__ specifies the PKA Handle 487 * @param __FLAG__ specifies the flag to check. 488 * This parameter can be one of the following values: 489 * @arg @ref PKA_FLAG_PROCEND End Of Operation 490 * @arg @ref PKA_FLAG_ADDRERR Address error 491 * @arg @ref PKA_FLAG_RAMERR RAM error 492 * @arg @ref PKA_FLAG_OPERR Operation error 493 * @retval The new state of __FLAG__ (SET or RESET) 494 */ 495 #define __HAL_PKA_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->SR)\ 496 & (__FLAG__)) == (__FLAG__)) ? SET : RESET) 497 498 /** @brief Clear the PKA pending flags which are cleared by writing 1 in a specific bit. 499 * @param __HANDLE__ specifies the PKA Handle 500 * @param __FLAG__ specifies the flag to clear. 501 * This parameter can be any combination of the following values: 502 * @arg @ref PKA_FLAG_PROCEND End Of Operation 503 * @arg @ref PKA_FLAG_ADDRERR Address error 504 * @arg @ref PKA_FLAG_RAMERR RAM error 505 * @arg @ref PKA_FLAG_OPERR Operation error 506 * @retval None 507 */ 508 #define __HAL_PKA_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CLRFR = (__FLAG__)) 509 510 /** @brief Enable the specified PKA peripheral. 511 * @param __HANDLE__ specifies the PKA Handle 512 * @retval None 513 */ 514 #define __HAL_PKA_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR, PKA_CR_EN)) 515 516 /** @brief Disable the specified PKA peripheral. 517 * @param __HANDLE__ specifies the PKA Handle 518 * @retval None 519 */ 520 #define __HAL_PKA_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR, PKA_CR_EN)) 521 522 /** @brief Start a PKA operation. 523 * @param __HANDLE__ specifies the PKA Handle 524 * @retval None 525 */ 526 #define __HAL_PKA_START(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR, PKA_CR_START)) 527 /** 528 * @} 529 */ 530 531 /* Private macros --------------------------------------------------------*/ 532 /* Exported functions --------------------------------------------------------*/ 533 /** @addtogroup PKA_Exported_Functions 534 * @{ 535 */ 536 537 /** @addtogroup PKA_Exported_Functions_Group1 538 * @{ 539 */ 540 /* Initialization and de-initialization functions *****************************/ 541 HAL_StatusTypeDef HAL_PKA_Init(PKA_HandleTypeDef *hpka); 542 HAL_StatusTypeDef HAL_PKA_DeInit(PKA_HandleTypeDef *hpka); 543 void HAL_PKA_MspInit(PKA_HandleTypeDef *hpka); 544 void HAL_PKA_MspDeInit(PKA_HandleTypeDef *hpka); 545 546 #if (USE_HAL_PKA_REGISTER_CALLBACKS == 1) 547 /* Callbacks Register/UnRegister functions ***********************************/ 548 HAL_StatusTypeDef HAL_PKA_RegisterCallback(PKA_HandleTypeDef *hpka, HAL_PKA_CallbackIDTypeDef CallbackID, 549 pPKA_CallbackTypeDef pCallback); 550 HAL_StatusTypeDef HAL_PKA_UnRegisterCallback(PKA_HandleTypeDef *hpka, HAL_PKA_CallbackIDTypeDef CallbackID); 551 #endif /* USE_HAL_PKA_REGISTER_CALLBACKS */ 552 553 /** 554 * @} 555 */ 556 557 /** @addtogroup PKA_Exported_Functions_Group2 558 * @{ 559 */ 560 /* IO operation functions *****************************************************/ 561 /* High Level Functions *******************************************************/ 562 HAL_StatusTypeDef HAL_PKA_ModExp(PKA_HandleTypeDef *hpka, PKA_ModExpInTypeDef *in, uint32_t Timeout); 563 HAL_StatusTypeDef HAL_PKA_ModExp_IT(PKA_HandleTypeDef *hpka, PKA_ModExpInTypeDef *in); 564 HAL_StatusTypeDef HAL_PKA_ModExpFastMode(PKA_HandleTypeDef *hpka, PKA_ModExpFastModeInTypeDef *in, uint32_t Timeout); 565 HAL_StatusTypeDef HAL_PKA_ModExpFastMode_IT(PKA_HandleTypeDef *hpka, PKA_ModExpFastModeInTypeDef *in); 566 HAL_StatusTypeDef HAL_PKA_ModExpProtectMode(PKA_HandleTypeDef *hpka, PKA_ModExpProtectModeInTypeDef *in, 567 uint32_t Timeout); 568 HAL_StatusTypeDef HAL_PKA_ModExpProtectMode_IT(PKA_HandleTypeDef *hpka, PKA_ModExpProtectModeInTypeDef *in); 569 void HAL_PKA_ModExp_GetResult(PKA_HandleTypeDef *hpka, uint8_t *pRes); 570 571 HAL_StatusTypeDef HAL_PKA_ECDSASign(PKA_HandleTypeDef *hpka, PKA_ECDSASignInTypeDef *in, uint32_t Timeout); 572 HAL_StatusTypeDef HAL_PKA_ECDSASign_IT(PKA_HandleTypeDef *hpka, PKA_ECDSASignInTypeDef *in); 573 void HAL_PKA_ECDSASign_GetResult(PKA_HandleTypeDef *hpka, PKA_ECDSASignOutTypeDef *out, 574 PKA_ECDSASignOutExtParamTypeDef *outExt); 575 576 HAL_StatusTypeDef HAL_PKA_ECDSAVerif(PKA_HandleTypeDef *hpka, PKA_ECDSAVerifInTypeDef *in, uint32_t Timeout); 577 HAL_StatusTypeDef HAL_PKA_ECDSAVerif_IT(PKA_HandleTypeDef *hpka, PKA_ECDSAVerifInTypeDef *in); 578 uint32_t HAL_PKA_ECDSAVerif_IsValidSignature(PKA_HandleTypeDef const *const hpka); 579 580 HAL_StatusTypeDef HAL_PKA_RSACRTExp(PKA_HandleTypeDef *hpka, PKA_RSACRTExpInTypeDef *in, uint32_t Timeout); 581 HAL_StatusTypeDef HAL_PKA_RSACRTExp_IT(PKA_HandleTypeDef *hpka, PKA_RSACRTExpInTypeDef *in); 582 void HAL_PKA_RSACRTExp_GetResult(PKA_HandleTypeDef *hpka, uint8_t *pRes); 583 584 HAL_StatusTypeDef HAL_PKA_PointCheck(PKA_HandleTypeDef *hpka, PKA_PointCheckInTypeDef *in, uint32_t Timeout); 585 HAL_StatusTypeDef HAL_PKA_PointCheck_IT(PKA_HandleTypeDef *hpka, PKA_PointCheckInTypeDef *in); 586 uint32_t HAL_PKA_PointCheck_IsOnCurve(PKA_HandleTypeDef const *const hpka); 587 588 HAL_StatusTypeDef HAL_PKA_ECCMul(PKA_HandleTypeDef *hpka, PKA_ECCMulInTypeDef *in, uint32_t Timeout); 589 HAL_StatusTypeDef HAL_PKA_ECCMul_IT(PKA_HandleTypeDef *hpka, PKA_ECCMulInTypeDef *in); 590 HAL_StatusTypeDef HAL_PKA_ECCMulEx(PKA_HandleTypeDef *hpka, PKA_ECCMulExInTypeDef *in, uint32_t Timeout); 591 HAL_StatusTypeDef HAL_PKA_ECCMulEx_IT(PKA_HandleTypeDef *hpka, PKA_ECCMulExInTypeDef *in); 592 void HAL_PKA_ECCMul_GetResult(PKA_HandleTypeDef *hpka, PKA_ECCMulOutTypeDef *out); 593 594 HAL_StatusTypeDef HAL_PKA_Add(PKA_HandleTypeDef *hpka, PKA_AddInTypeDef *in, uint32_t Timeout); 595 HAL_StatusTypeDef HAL_PKA_Add_IT(PKA_HandleTypeDef *hpka, PKA_AddInTypeDef *in); 596 HAL_StatusTypeDef HAL_PKA_Sub(PKA_HandleTypeDef *hpka, PKA_SubInTypeDef *in, uint32_t Timeout); 597 HAL_StatusTypeDef HAL_PKA_Sub_IT(PKA_HandleTypeDef *hpka, PKA_SubInTypeDef *in); 598 HAL_StatusTypeDef HAL_PKA_Cmp(PKA_HandleTypeDef *hpka, PKA_CmpInTypeDef *in, uint32_t Timeout); 599 HAL_StatusTypeDef HAL_PKA_Cmp_IT(PKA_HandleTypeDef *hpka, PKA_CmpInTypeDef *in); 600 HAL_StatusTypeDef HAL_PKA_Mul(PKA_HandleTypeDef *hpka, PKA_MulInTypeDef *in, uint32_t Timeout); 601 HAL_StatusTypeDef HAL_PKA_Mul_IT(PKA_HandleTypeDef *hpka, PKA_MulInTypeDef *in); 602 HAL_StatusTypeDef HAL_PKA_ModAdd(PKA_HandleTypeDef *hpka, PKA_ModAddInTypeDef *in, uint32_t Timeout); 603 HAL_StatusTypeDef HAL_PKA_ModAdd_IT(PKA_HandleTypeDef *hpka, PKA_ModAddInTypeDef *in); 604 HAL_StatusTypeDef HAL_PKA_ModSub(PKA_HandleTypeDef *hpka, PKA_ModSubInTypeDef *in, uint32_t Timeout); 605 HAL_StatusTypeDef HAL_PKA_ModSub_IT(PKA_HandleTypeDef *hpka, PKA_ModSubInTypeDef *in); 606 HAL_StatusTypeDef HAL_PKA_ModInv(PKA_HandleTypeDef *hpka, PKA_ModInvInTypeDef *in, uint32_t Timeout); 607 HAL_StatusTypeDef HAL_PKA_ModInv_IT(PKA_HandleTypeDef *hpka, PKA_ModInvInTypeDef *in); 608 HAL_StatusTypeDef HAL_PKA_ModRed(PKA_HandleTypeDef *hpka, PKA_ModRedInTypeDef *in, uint32_t Timeout); 609 HAL_StatusTypeDef HAL_PKA_ModRed_IT(PKA_HandleTypeDef *hpka, PKA_ModRedInTypeDef *in); 610 HAL_StatusTypeDef HAL_PKA_MontgomeryMul(PKA_HandleTypeDef *hpka, PKA_MontgomeryMulInTypeDef *in, uint32_t Timeout); 611 HAL_StatusTypeDef HAL_PKA_MontgomeryMul_IT(PKA_HandleTypeDef *hpka, PKA_MontgomeryMulInTypeDef *in); 612 void HAL_PKA_Arithmetic_GetResult(PKA_HandleTypeDef *hpka, uint32_t *pRes); 613 614 HAL_StatusTypeDef HAL_PKA_MontgomeryParam(PKA_HandleTypeDef *hpka, PKA_MontgomeryParamInTypeDef *in, uint32_t Timeout); 615 HAL_StatusTypeDef HAL_PKA_MontgomeryParam_IT(PKA_HandleTypeDef *hpka, PKA_MontgomeryParamInTypeDef *in); 616 void HAL_PKA_MontgomeryParam_GetResult(PKA_HandleTypeDef *hpka, uint32_t *pRes); 617 618 HAL_StatusTypeDef HAL_PKA_ECCDoubleBaseLadder(PKA_HandleTypeDef *hpka, PKA_ECCDoubleBaseLadderInTypeDef *in, 619 uint32_t Timeout); 620 HAL_StatusTypeDef HAL_PKA_ECCDoubleBaseLadder_IT(PKA_HandleTypeDef *hpka, PKA_ECCDoubleBaseLadderInTypeDef *in); 621 void HAL_PKA_ECCDoubleBaseLadder_GetResult(PKA_HandleTypeDef *hpka, PKA_ECCDoubleBaseLadderOutTypeDef *out); 622 623 HAL_StatusTypeDef HAL_PKA_ECCProjective2Affine(PKA_HandleTypeDef *hpka, PKA_ECCProjective2AffineInTypeDef *in, 624 uint32_t Timeout); 625 HAL_StatusTypeDef HAL_PKA_ECCProjective2Affine_IT(PKA_HandleTypeDef *hpka, PKA_ECCProjective2AffineInTypeDef *in); 626 void HAL_PKA_ECCProjective2Affine_GetResult(PKA_HandleTypeDef *hpka, PKA_ECCProjective2AffineOutTypeDef *out); 627 628 HAL_StatusTypeDef HAL_PKA_ECCCompleteAddition(PKA_HandleTypeDef *hpka, PKA_ECCCompleteAdditionInTypeDef *in, 629 uint32_t Timeout); 630 HAL_StatusTypeDef HAL_PKA_ECCCompleteAddition_IT(PKA_HandleTypeDef *hpka, PKA_ECCCompleteAdditionInTypeDef *in); 631 void HAL_PKA_ECCCompleteAddition_GetResult(PKA_HandleTypeDef *hpka, PKA_ECCCompleteAdditionOutTypeDef *out); 632 633 HAL_StatusTypeDef HAL_PKA_Abort(PKA_HandleTypeDef *hpka); 634 void HAL_PKA_RAMReset(PKA_HandleTypeDef *hpka); 635 void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka); 636 void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka); 637 void HAL_PKA_IRQHandler(PKA_HandleTypeDef *hpka); 638 /** 639 * @} 640 */ 641 642 /** @addtogroup PKA_Exported_Functions_Group3 643 * @{ 644 */ 645 /* Peripheral State and Error functions ***************************************/ 646 HAL_PKA_StateTypeDef HAL_PKA_GetState(const PKA_HandleTypeDef *hpka); 647 uint32_t HAL_PKA_GetError(const PKA_HandleTypeDef *hpka); 648 /** 649 * @} 650 */ 651 652 /** 653 * @} 654 */ 655 656 /** 657 * @} 658 */ 659 660 #endif /* defined(PKA) && defined(HAL_PKA_MODULE_ENABLED) */ 661 662 /** 663 * @} 664 */ 665 666 #ifdef __cplusplus 667 } 668 #endif 669 670 #endif /* STM32N6xx_HAL_PKA_H */ 671