1 /**
2   ******************************************************************************
3   * @filestm32wb0x_ll_pka.c
4   * @author  MCD Application Team
5   * @brief   PKA LL module driver.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2024 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 #if defined(USE_FULL_LL_DRIVER)
19 
20 /* Includes ------------------------------------------------------------------*/
21 #include "stm32wb0x_ll_pka.h"
22 #include "stm32wb0x_ll_bus.h"
23 
24 #ifdef  USE_FULL_ASSERT
25 #include "stm32_assert.h"
26 #else
27 #define assert_param(expr) ((void)0U)
28 #endif /* USE_FULL_ASSERT */
29 
30 /** @addtogroup STM32WB0x_LL_Driver
31   * @{
32   */
33 
34 #if defined(PKA)
35 
36 /** @addtogroup PKA_LL
37   * @{
38   */
39 
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 /** @defgroup PKA_LL_Private_Macros PKA Private Constants
45   * @{
46   */
47 #if defined (STM32WB05)
48 #define IS_LL_PKA_MODE(__VALUE__)      (((__VALUE__) == LL_PKA_MODE_MONTGOMERY_PARAM_MOD_EXP)  ||\
49                                         ((__VALUE__) == LL_PKA_MODE_MONTGOMERY_PARAM)          ||\
50                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_EXP)               ||\
51                                         ((__VALUE__) == LL_PKA_MODE_MONTGOMERY_PARAM_ECC)      ||\
52                                         ((__VALUE__) == LL_PKA_MODE_ECC_KP_PRIMITIVE)          ||\
53                                         ((__VALUE__) == LL_PKA_MODE_ECDSA_SIGNATURE)           ||\
54                                         ((__VALUE__) == LL_PKA_MODE_ECDSA_VERIFICATION)        ||\
55                                         ((__VALUE__) == LL_PKA_MODE_POINT_CHECK)               ||\
56                                         ((__VALUE__) == LL_PKA_MODE_RSA_CRT_EXP)               ||\
57                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_INV)               ||\
58                                         ((__VALUE__) == LL_PKA_MODE_ARITHMETIC_ADD)            ||\
59                                         ((__VALUE__) == LL_PKA_MODE_ARITHMETIC_SUB)            ||\
60                                         ((__VALUE__) == LL_PKA_MODE_ARITHMETIC_MUL)            ||\
61                                         ((__VALUE__) == LL_PKA_MODE_COMPARISON)                ||\
62                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_REDUC)             ||\
63                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_ADD)               ||\
64                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_SUB)               ||\
65                                         ((__VALUE__) == LL_PKA_MODE_MONTGOMERY_MUL))
66 #endif /* STM32WB05 */
67 #if defined (STM32WB09)
68 #define IS_LL_PKA_MODE(__VALUE__)      (((__VALUE__) == LL_PKA_MODE_MONTGOMERY_PARAM_MOD_EXP)  ||\
69                                         ((__VALUE__) == LL_PKA_MODE_MONTGOMERY_PARAM)          ||\
70                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_EXP)               ||\
71                                         ((__VALUE__) == LL_PKA_MODE_MONTGOMERY_PARAM_ECC)      ||\
72                                         ((__VALUE__) == LL_PKA_MODE_ECC_KP_PRIMITIVE)          ||\
73                                         ((__VALUE__) == LL_PKA_MODE_ECDSA_SIGNATURE)           ||\
74                                         ((__VALUE__) == LL_PKA_MODE_ECDSA_VERIFICATION)        ||\
75                                         ((__VALUE__) == LL_PKA_MODE_POINT_CHECK)               ||\
76                                         ((__VALUE__) == LL_PKA_MODE_RSA_CRT_EXP)               ||\
77                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_INV)               ||\
78                                         ((__VALUE__) == LL_PKA_MODE_ARITHMETIC_ADD)            ||\
79                                         ((__VALUE__) == LL_PKA_MODE_ARITHMETIC_SUB)            ||\
80                                         ((__VALUE__) == LL_PKA_MODE_ARITHMETIC_MUL)            ||\
81                                         ((__VALUE__) == LL_PKA_MODE_COMPARISON)                ||\
82                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_REDUC)             ||\
83                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_ADD)               ||\
84                                         ((__VALUE__) == LL_PKA_MODE_MODULAR_SUB)               ||\
85                                         ((__VALUE__) == LL_PKA_MODE_MONTGOMERY_MUL)            ||\
86                                         ((__VALUE__) ==  LL_PKA_MODE_DOUBLE_BASE_LADDER)       ||\
87                                         ((__VALUE__) ==  LL_PKA_MODE_ECC_COMPLETE_ADD))
88 #endif /* STM32WB09 */
89 /**
90   * @}
91   */
92 
93 /* Private function prototypes -----------------------------------------------*/
94 
95 /* Exported functions --------------------------------------------------------*/
96 /** @addtogroup PKA_LL_Exported_Functions
97   * @{
98   */
99 
100 /** @addtogroup PKA_LL_EF_Init
101   * @{
102   */
103 
104 /**
105   * @brief  De-initialize PKA registers (Registers restored to their default values).
106   * @param  PKAx PKA Instance.
107   * @retval ErrorStatus
108   *          - SUCCESS: PKA registers are de-initialized
109   *          - ERROR: PKA registers are not de-initialized
110   */
LL_PKA_DeInit(const PKA_TypeDef * PKAx)111 ErrorStatus LL_PKA_DeInit(const PKA_TypeDef *PKAx)
112 {
113   ErrorStatus status = SUCCESS;
114 
115   /* Check the parameters */
116   assert_param(IS_PKA_ALL_INSTANCE(PKAx));
117 
118   if (PKAx == PKA)
119   {
120     /* Force PKA reset */
121     LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_PKA);
122 
123     /* Release PKA reset */
124     LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_PKA);
125   }
126   else
127   {
128     status = ERROR;
129   }
130 
131   return (status);
132 }
133 #if defined (STM32WB05)|| defined(STM32WB09)
134 /**
135   * @brief  Initialize PKA registers according to the specified parameters in PKA_InitStruct.
136   * @param  PKAx PKA Instance.
137   * @param  PKA_InitStruct pointer to a @ref LL_PKA_InitTypeDef structure
138   *         that contains the configuration information for the specified PKA peripheral.
139   * @retval ErrorStatus
140   *          - SUCCESS: PKA registers are initialized according to PKA_InitStruct content
141   *          - ERROR:   Not applicable
142   */
LL_PKA_Init(PKA_TypeDef * PKAx,LL_PKA_InitTypeDef * PKA_InitStruct)143 ErrorStatus LL_PKA_Init(PKA_TypeDef *PKAx, LL_PKA_InitTypeDef *PKA_InitStruct)
144 {
145   assert_param(IS_PKA_ALL_INSTANCE(PKAx));
146   assert_param(IS_LL_PKA_MODE(PKA_InitStruct->Mode));
147   LL_PKA_Config(PKAx, PKA_InitStruct->Mode);
148 
149   return (SUCCESS);
150 }
151 
152 /**
153   * @brief Set each @ref LL_PKA_InitTypeDef field to default value.
154   * @param PKA_InitStruct pointer to a @ref LL_PKA_InitTypeDef structure
155   *                       whose fields will be set to default values.
156   * @retval None
157   */
LL_PKA_StructInit(LL_PKA_InitTypeDef * PKA_InitStruct)158 void LL_PKA_StructInit(LL_PKA_InitTypeDef *PKA_InitStruct)
159 {
160   /* Reset PKA init structure parameters values */
161 
162   PKA_InitStruct->Mode       = LL_PKA_MODE_MODULAR_EXP;
163 }
164 #endif /* STM32WB05 || STM32WB09 */
165 
166 
167 /**
168   * @}
169   */
170 
171 /**
172   * @}
173   */
174 
175 /**
176   * @}
177   */
178 
179 #endif /* defined (PKA) */
180 
181 /**
182   * @}
183   */
184 
185 #endif /* USE_FULL_LL_DRIVER */
186