1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 
7 /***********************************************************************************************************************
8  * File Name    : hw_sce_ecc_private.h
9  * Description  : SCE HW procedures for ECC algorithm
10  ***********************************************************************************************************************/
11 
12 #ifndef HW_SCE_ECC_PRIVATE_H
13 #define HW_SCE_ECC_PRIVATE_H
14 
15 #include "bsp_api.h"
16 #include "hw_sce_common.h"
17 
18 #define ECC_224_PRIVATE_KEY_LENGTH_BITS                        (224U)
19 #define ECC_224_PUBLIC_KEY_LENGTH_WORDS                        (7U)
20 
21 /* ECC P-256 */
22 #define ECC_256_DOMAIN_PARAMETER_WITH_ORDER_LENGTH_WORDS       (32U)
23 #define ECC_256_DOMAIN_PARAMETER_WITHOUT_ORDER_LENGTH_WORDS    (24U)
24 #define ECC_256_POINT_ON_CURVE_LENGTH_WORDS                    (16U)
25 #define ECC_256_GENERATOR_POINT_LENGTH_WORDS                   (16U)
26 #define ECC_256_PUBLIC_KEY_LENGTH_WORDS                        (16U)
27 #define ECC_256_PRIVATE_KEY_LENGTH_WORDS                       (8U)
28 #define ECC_256_PRIVATE_KEY_LENGTH_BITS                        (256U)
29 #define ECC_256_MESSAGE_DIGEST_LENGTH_WORDS                    (8U)
30 #define ECC_256_SIGNATURE_R_LENGTH_WORDS                       (8U)
31 #define ECC_256_SIGNATURE_S_LENGTH_WORDS                       (8U)
32 
33 /* ECC P-384 */
34 #define ECC_384_DOMAIN_PARAMETER_WITH_ORDER_LENGTH_WORDS       (48U)
35 #define ECC_384_DOMAIN_PARAMETER_WITHOUT_ORDER_LENGTH_WORDS    (36U)
36 #define ECC_384_POINT_ON_CURVE_LENGTH_WORDS                    (24U)
37 #define ECC_384_GENERATOR_POINT_LENGTH_WORDS                   (24U)
38 #define ECC_384_PUBLIC_KEY_LENGTH_WORDS                        (24U)
39 #define ECC_384_PRIVATE_KEY_LENGTH_WORDS                       (12U)
40 #define ECC_384_PRIVATE_KEY_LENGTH_BITS                        (384U)
41 #define ECC_384_MESSAGE_DIGEST_LENGTH_WORDS                    (12U)
42 #define ECC_384_SIGNATURE_R_LENGTH_WORDS                       (12U)
43 #define ECC_384_SIGNATURE_S_LENGTH_WORDS                       (12U)
44 
45 /* ECC P-521 */
46 #define ECC_521_PRIVATE_KEY_LENGTH_BITS                        (521U)
47 #define ECC_521_PRIVATE_KEY_LENGTH_WORDS                       (20U)
48 
49 /* SCE based wrapped keys are at most 20/32 bytes larger than corresponding plain private keys */
50 #define HW_SCE_ECC_WRAPPED_KEY_ADJUST(x)          ((x) + ((HW_SCE_PRIVATE_KEY_WRAPPING_WORD_SIZE) * 4))
51 
52 /* Function pointer declarations */
53 #if BSP_FEATURE_CRYPTO_HAS_SCE9 || BSP_FEATURE_CRYPTO_HAS_SCE7 || BSP_FEATURE_CRYPTO_HAS_RSIP7
54  #define ECC_PUBLIC_KEY_SIZE_BYTES(curve_size)    (curve_size * 2 + 20U)
55 typedef fsp_err_t (* hw_sce_ecc_scalarmultiplication_t)(const uint32_t * InData_CurveType, const uint32_t * InData_Cmd,
56                                                         const uint32_t * InData_K, const uint32_t * InData_P,
57                                                         const uint32_t * Domain_Param, uint32_t * OutData_R);
58 #else
59 typedef fsp_err_t (* hw_sce_ecc_scalarmultiplication_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_K,
60                                                         const uint32_t * InData_P, uint32_t * OutData_R);
61 #endif
62 typedef fsp_err_t (* hw_sce_ecc_generatekey_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_G,
63                                                uint32_t * OutData_PubKey, uint32_t * OutData_PrivKey);
64 
65 typedef fsp_err_t (* hw_sce_ecc_generatesign_t)(const uint32_t * InData_CurveType, const uint32_t * InData_G,
66                                                 const uint32_t * InData_PrivKey, const uint32_t * InData_MsgDgst,
67                                                 uint32_t * OutData_R, uint32_t * OutData_S);
68 
69 typedef fsp_err_t (* hw_sce_ecc_verifysign_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_G,
70                                               const uint32_t * InData_PubKey, const uint32_t * InData_MsgDgst,
71                                               const uint32_t * InData_R, const uint32_t * InData_S);
72 
73 /* ECC - 256 HW Procedure definitions */
74 fsp_err_t HW_SCE_ECC_256ScalarMultiplication(const uint32_t * InData_DomainParam,
75                                              const uint32_t * InData_K,
76                                              const uint32_t * InData_P,
77                                              uint32_t       * OutData_R);
78 
79 fsp_err_t HW_SCE_ECC_256GenerateKey(const uint32_t * InData_DomainParam,
80                                     const uint32_t * InData_G,
81                                     uint32_t       * OutData_PubKey,
82                                     uint32_t       * OutData_PrivKey);
83 
84 fsp_err_t HW_SCE_ECC_256GenerateSign(const uint32_t * InData_CurveType,
85                                      const uint32_t * InData_G,
86                                      const uint32_t * InData_PrivKey,
87                                      const uint32_t * InData_MsgDgst,
88                                      uint32_t       * OutData_R,
89                                      uint32_t       * OutData_S);
90 
91 fsp_err_t HW_SCE_ECC_256VerifySign(const uint32_t * InData_DomainParam,
92                                    const uint32_t * InData_G,
93                                    const uint32_t * InData_PubKey,
94                                    const uint32_t * InData_MsgDgst,
95                                    const uint32_t * InData_R,
96                                    const uint32_t * InData_S);
97 
98 /* ECC - 256 Wrapped key HW Procedure definitions */
99 fsp_err_t HW_SCE_ECC_256HrkGenerateKey(const uint32_t * InData_DomainParam,
100                                        const uint32_t * InData_G,
101                                        uint32_t       * OutData_KeyIndex,
102                                        uint32_t       * OutData_PubKey);
103 
104 fsp_err_t HW_SCE_ECC_256HrkGenerateSign(const uint32_t * InData_DomainParam,
105                                         const uint32_t * InData_G,
106                                         const uint32_t * InData_KeyIndex,
107                                         const uint32_t * InData_MsgDgst,
108                                         uint32_t       * OutData_R,
109                                         uint32_t       * OutData_S);
110 
111 fsp_err_t HW_SCE_ECC_256HrkScalarMultiplication(const uint32_t * InData_DomainParam,
112                                                 const uint32_t * InData_KeyIndex,
113                                                 const uint32_t * InData_P,
114                                                 uint32_t       * OutData_R);
115 
116 fsp_err_t HW_SCE_ECC_256WrappedScalarMultiplication(const uint32_t * InData_CurveType,
117                                                     const uint32_t * InData_Cmd,
118                                                     const uint32_t * InData_KeyIndex,
119                                                     const uint32_t * InData_P,
120                                                     const uint32_t * Domain_Param,
121                                                     uint32_t       * OutData_R);
122 
123 /* ECC - 384 HW Procedure definitions */
124 fsp_err_t HW_SCE_ECC_384ScalarMultiplication(const uint32_t * InData_DomainParam,
125                                              const uint32_t * InData_K,
126                                              const uint32_t * InData_P,
127                                              uint32_t       * OutData_R);
128 
129 fsp_err_t HW_SCE_ECC_384GenerateKey(const uint32_t * InData_DomainParam,
130                                     const uint32_t * InData_G,
131                                     uint32_t       * OutData_PubKey,
132                                     uint32_t       * OutData_PrivKey);
133 
134 fsp_err_t HW_SCE_ECC_384GenerateSign(const uint32_t * InData_CurveType,
135                                      const uint32_t * InData_G,
136                                      const uint32_t * InData_PrivKey,
137                                      const uint32_t * InData_MsgDgst,
138                                      uint32_t       * OutData_R,
139                                      uint32_t       * OutData_S);
140 
141 fsp_err_t HW_SCE_ECC_384VerifySign(const uint32_t * InData_DomainParam,
142                                    const uint32_t * InData_G,
143                                    const uint32_t * InData_PubKey,
144                                    const uint32_t * InData_MsgDgst,
145                                    const uint32_t * InData_R,
146                                    const uint32_t * InData_S);
147 
148 /* ECC - 384 Wrapped key HW Procedure definitions */
149 fsp_err_t HW_SCE_ECC_384HrkGenerateKey(const uint32_t * InData_DomainParam,
150                                        const uint32_t * InData_G,
151                                        uint32_t       * OutData_KeyIndex,
152                                        uint32_t       * OutData_PubKey);
153 
154 fsp_err_t HW_SCE_ECC_384HrkGenerateSign(const uint32_t * InData_DomainParam,
155                                         const uint32_t * InData_G,
156                                         const uint32_t * InData_KeyIndex,
157                                         const uint32_t * InData_MsgDgst,
158                                         uint32_t       * OutData_R,
159                                         uint32_t       * OutData_S);
160 
161 fsp_err_t HW_SCE_ECC_384HrkScalarMultiplication(const uint32_t * InData_DomainParam,
162                                                 const uint32_t * InData_KeyIndex,
163                                                 const uint32_t * InData_P,
164                                                 uint32_t       * OutData_R);
165 fsp_err_t HW_SCE_ECC_384WrappedScalarMultiplication(const uint32_t * InData_CurveType,
166                                                     const uint32_t * InData_Cmd,
167                                                     const uint32_t * InData_KeyIndex,
168                                                     const uint32_t * InData_P,
169                                                     const uint32_t * Domain_Param,
170                                                     uint32_t       * OutData_R);
171 #if BSP_FEATURE_CRYPTO_HAS_RSIP7
172 fsp_err_t HW_SCE_ECC_521GenerateSign(const uint32_t * InData_CurveType,
173                                      const uint32_t * InData_G,
174                                      const uint32_t * InData_PrivKey,
175                                      const uint32_t * InData_MsgDgst,
176                                      uint32_t       * OutData_R,
177                                      uint32_t       * OutData_S);
178 
179 fsp_err_t HW_SCE_ECC_521VerifySign(const uint32_t * InData_DomainParam,
180                                    const uint32_t * InData_G,
181                                    const uint32_t * InData_PubKey,
182                                    const uint32_t * InData_MsgDgst,
183                                    const uint32_t * InData_R,
184                                    const uint32_t * InData_S);
185 
186 fsp_err_t HW_SCE_ECC_521HrkGenerateSign(const uint32_t * InData_DomainParam,
187                                         const uint32_t * InData_G,
188                                         const uint32_t * InData_KeyIndex,
189                                         const uint32_t * InData_MsgDgst,
190                                         uint32_t       * OutData_R,
191                                         uint32_t       * OutData_S);
192 
193 fsp_err_t HW_SCE_ECC_521WrappedScalarMultiplication(const uint32_t * InData_CurveType,
194                                                     const uint32_t * InData_Cmd,
195                                                     const uint32_t * InData_KeyIndex,
196                                                     const uint32_t * InData_P,
197                                                     const uint32_t * Domain_Param,
198                                                     uint32_t       * OutData_R);
199 #endif
200 
201 /* ECC - 224 HW Procedure definitions */
202 fsp_err_t HW_SCE_ECC_224GenerateSign(const uint32_t * InData_DomainParam,
203                                      const uint32_t * InData_G,
204                                      const uint32_t * InData_PrivKey,
205                                      const uint32_t * InData_MsgDgst,
206                                      uint32_t       * OutData_R,
207                                      uint32_t       * OutData_S);
208 
209 fsp_err_t HW_SCE_ECC_224VerifySign(const uint32_t * InData_DomainParam,
210                                    const uint32_t * InData_G,
211                                    const uint32_t * InData_PubKey,
212                                    const uint32_t * InData_MsgDgst,
213                                    const uint32_t * InData_R,
214                                    const uint32_t * InData_S);
215 
216 #endif                                 /* HW_SCE_ECC_PRIVATE_H */
217