1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 
7 #ifndef HW_SCE_AES_PRIVATE_H
8 #define HW_SCE_AES_PRIVATE_H
9 
10 #include <stdint.h>
11 #include "bsp_api.h"
12 
13 /* AES key lengths defined for SCE operations. */
14 #define SIZE_AES_128BIT_KEYLEN_BITS                      (128)
15 #define SIZE_AES_128BIT_KEYLEN_BYTES                     ((SIZE_AES_128BIT_KEYLEN_BITS) / 8)
16 #define SIZE_AES_128BIT_KEYLEN_WORDS                     ((SIZE_AES_128BIT_KEYLEN_BITS) / 32)
17 
18 #define SIZE_AES_192BIT_KEYLEN_BITS                      (192)
19 #define SIZE_AES_192BIT_KEYLEN_BYTES                     ((SIZE_AES_192BIT_KEYLEN_BITS) / 8)
20 #define SIZE_AES_192BIT_KEYLEN_WORDS                     ((SIZE_AES_192BIT_KEYLEN_BITS) / 32)
21 
22 #define SIZE_AES_256BIT_KEYLEN_BITS                      (256)
23 #define SIZE_AES_256BIT_KEYLEN_BYTES                     ((SIZE_AES_256BIT_KEYLEN_BITS) / 8)
24 #define SIZE_AES_256BIT_KEYLEN_WORDS                     ((SIZE_AES_256BIT_KEYLEN_BITS) / 32)
25 
26 #define SIZE_AES_BLOCK_BITS                              (128)
27 #define SIZE_AES_BLOCK_BYTES                             (128 / 8)
28 #define SIZE_AES_BLOCK_WORDS                             ((SIZE_AES_BLOCK_BITS) / 32)
29 
30 #define SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION               (0x00000000U)
31 #define SCE_AES_IN_DATA_CMD_ECB_DECRYPTION               (0x00000001U)
32 #define SCE_AES_IN_DATA_CMD_CBC_ENCRYPTION               (0x00000002U)
33 #define SCE_AES_IN_DATA_CMD_CBC_DECRYPTION               (0x00000003U)
34 #define SCE_AES_IN_DATA_CMD_CTR_ENCRYPTION_DECRYPTION    (0x00000004U)
35 
36 typedef struct st_sce_data
37 {
38     uint32_t   length;
39     uint32_t * p_data;
40 } r_sce_data_t;
41 
42 typedef fsp_err_t (* hw_sce_cmac_init_t)(const uint32_t InData_KeyType[], const uint32_t InData_KeyIndex[]);
43 typedef void      (* hw_sce_cmac_update_t)(const uint32_t InData_Text[], const uint32_t MAX_CNT);
44 typedef fsp_err_t (* hw_sce_cmac_final_t)(const uint32_t InData_Cmd[], const uint32_t InData_Text[],
45                                           const uint32_t InData_DataT[], const uint32_t InData_DataTLen[],
46                                           uint32_t OutData_DataT[]);
47 
48 typedef fsp_err_t (* hw_sce_aes_gcm_crypt_init_t)(uint32_t * InData_KeyType, uint32_t * InData_DataType,
49                                                   uint32_t * InData_Cmd, uint32_t * InData_KeyIndex,
50                                                   uint32_t * InData_IV, uint32_t * InData_SeqNum);
51 typedef void (* hw_sce_aes_gcm_update_aad_t)(const uint32_t * InData_DataA, const uint32_t MAX_CNT);
52 typedef void (* hw_sce_aes_gcm_crypt_update_transition_t)(void);
53 typedef void (* hw_sce_aes_gcm_crypt_update_t)(const uint32_t * InData_Text, uint32_t * OutData_Text,
54                                                const uint32_t MAX_CNT);
55 typedef fsp_err_t (* hw_sce_aes_gcm_encrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen,
56                                                      const uint32_t * InData_DataALen, uint32_t * OutData_Text,
57                                                      uint32_t * OutData_DataT);
58 typedef fsp_err_t (* hw_sce_aes_gcm_decrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen,
59                                                      const uint32_t * InData_DataALen, const uint32_t * InData_DataT,
60                                                      const uint32_t * InData_DataTLen,
61                                                      uint32_t * OutData_Text);
62 typedef fsp_err_t (* hw_sce_aes_ccm_encrypt_init_t)(uint32_t * InData_KeyType, uint32_t * InData_DataType,
63                                                     uint32_t * InData_Cmd, uint32_t * InData_TextLen,
64                                                     uint32_t * InData_KeyIndex, uint32_t * InData_IV,
65                                                     uint32_t * InData_Header, uint32_t * InData_SeqNum,
66                                                     uint32_t Header_Len);
67 typedef fsp_err_t (* hw_sce_aes_ccm_decrypt_init_t)(uint32_t * InData_KeyType, uint32_t * InData_DataType,
68                                                     uint32_t * InData_Cmd, uint32_t * InData_TextLen,
69                                                     uint32_t * InData_MACLength, uint32_t * InData_KeyIndex,
70                                                     uint32_t * InData_IV, uint32_t * InData_Header,
71                                                     uint32_t * InData_SeqNum, uint32_t Header_Len);
72 
73 typedef void (* hw_sce_aes_ccm_crypt_update_t)(const uint32_t * InData_Text, uint32_t * OutData_Text,
74                                                const uint32_t MAX_CNT);
75 typedef fsp_err_t (* hw_sce_aes_ccm_encrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen,
76                                                      uint32_t * OutData_Text, uint32_t * OutData_MAC);
77 typedef fsp_err_t (* hw_sce_aes_ccm_decrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen,
78                                                      const uint32_t * InData_MAC, const uint32_t * InData_MACLength,
79                                                      uint32_t * OutData_Text);
80 typedef fsp_err_t (* hw_sce_aes_ecb_encrypt_using_encrypted_key)(const uint32_t * InData_KeyIndex,
81                                                                  const uint32_t num_words, const uint32_t * InData_Text,
82                                                                  uint32_t * OutData_Text);
83 
84 extern fsp_err_t HW_SCE_AES_128EcbEncrypt(const uint32_t * InData_Key,
85                                           const uint32_t   num_words,
86                                           const uint32_t * InData_Text,
87                                           uint32_t       * OutData_Text);
88 
89 extern fsp_err_t HW_SCE_AES_128EcbDecrypt(const uint32_t * InData_Key,
90                                           const uint32_t   num_words,
91                                           const uint32_t * InData_Text,
92                                           uint32_t       * OutData_Text);
93 
94 extern fsp_err_t HW_SCE_AES_128CbcEncrypt(const uint32_t * InData_Key,
95                                           const uint32_t * InData_IV,
96                                           const uint32_t   num_words,
97                                           const uint32_t * InData_Text,
98                                           uint32_t       * OutData_Text,
99                                           uint32_t       * OutData_IV);
100 
101 extern fsp_err_t HW_SCE_AES_128CbcDecrypt(const uint32_t * InData_Key,
102                                           const uint32_t * InData_IV,
103                                           const uint32_t   num_words,
104                                           const uint32_t * InData_Text,
105                                           uint32_t       * OutData_Text,
106                                           uint32_t       * OutData_IV);
107 
108 extern fsp_err_t HW_SCE_AES_128CtrEncrypt(const uint32_t * InData_Key,
109                                           const uint32_t * InData_IV,
110                                           const uint32_t   num_words,
111                                           const uint32_t * InData_Text,
112                                           uint32_t       * OutData_Text,
113                                           uint32_t       * OutData_IV);
114 
115 extern fsp_err_t HW_SCE_AES_128XtsEncrypt(const uint32_t * InData_Key,
116                                           const uint32_t * InData_IV,
117                                           const uint32_t * InData_Len,
118                                           const uint32_t * InData_Text,
119                                           uint32_t       * OutData_Text,
120                                           uint32_t       * OutData_IV);
121 
122 extern fsp_err_t HW_SCE_AES_128XtsDecrypt(const uint32_t * InData_Key,
123                                           const uint32_t * InData_IV,
124                                           const uint32_t * InData_Len,
125                                           const uint32_t * InData_Text,
126                                           uint32_t       * OutData_Text,
127                                           uint32_t       * OutData_IV);
128 
129 extern fsp_err_t HW_SCE_AES_192EcbEncrypt(const uint32_t * InData_Key,
130                                           const uint32_t   num_words,
131                                           const uint32_t * InData_Text,
132                                           uint32_t       * OutData_Text);
133 
134 extern fsp_err_t HW_SCE_AES_192EcbDecrypt(const uint32_t * InData_Key,
135                                           const uint32_t   num_words,
136                                           const uint32_t * InData_Text,
137                                           uint32_t       * OutData_Text);
138 
139 extern fsp_err_t HW_SCE_AES_192CbcEncrypt(const uint32_t * InData_Key,
140                                           const uint32_t * InData_IV,
141                                           const uint32_t   num_words,
142                                           const uint32_t * InData_Text,
143                                           uint32_t       * OutData_Text,
144                                           uint32_t       * OutData_IV);
145 
146 extern fsp_err_t HW_SCE_AES_192CbcDecrypt(const uint32_t * InData_Key,
147                                           const uint32_t * InData_IV,
148                                           const uint32_t   num_words,
149                                           const uint32_t * InData_Text,
150                                           uint32_t       * OutData_Text,
151                                           uint32_t       * OutData_IV);
152 
153 extern fsp_err_t HW_SCE_AES_192CtrEncrypt(const uint32_t * InData_Key,
154                                           const uint32_t * InData_IV,
155                                           const uint32_t   num_words,
156                                           const uint32_t * InData_Text,
157                                           uint32_t       * OutData_Text,
158                                           uint32_t       * OutData_IV);
159 
160 extern fsp_err_t HW_SCE_AES_256EcbEncrypt(const uint32_t * InData_Key,
161                                           const uint32_t   num_words,
162                                           const uint32_t * InData_Text,
163                                           uint32_t       * OutData_Text);
164 
165 extern fsp_err_t HW_SCE_AES_256EcbDecrypt(const uint32_t * InData_Key,
166                                           const uint32_t   num_words,
167                                           const uint32_t * InData_Text,
168                                           uint32_t       * OutData_Text);
169 
170 extern fsp_err_t HW_SCE_AES_256CbcEncrypt(const uint32_t * InData_Key,
171                                           const uint32_t * InData_IV,
172                                           const uint32_t   num_words,
173                                           const uint32_t * InData_Text,
174                                           uint32_t       * OutData_Text,
175                                           uint32_t       * OutData_IV);
176 
177 extern fsp_err_t HW_SCE_AES_256CbcDecrypt(const uint32_t * InData_Key,
178                                           const uint32_t * InData_IV,
179                                           const uint32_t   num_words,
180                                           const uint32_t * InData_Text,
181                                           uint32_t       * OutData_Text,
182                                           uint32_t       * OutData_IV);
183 
184 extern fsp_err_t HW_SCE_AES_256CtrEncrypt(const uint32_t * InData_Key,
185                                           const uint32_t * InData_IV,
186                                           const uint32_t   num_words,
187                                           const uint32_t * InData_Text,
188                                           uint32_t       * OutData_Text,
189                                           uint32_t       * OutData_IV);
190 
191 extern fsp_err_t HW_SCE_AES_256XtsEncrypt(const uint32_t * InData_Key,
192                                           const uint32_t * InData_IV,
193                                           const uint32_t * InData_Len,
194                                           const uint32_t * InData_Text,
195                                           uint32_t       * OutData_Text,
196                                           uint32_t       * OutData_IV);
197 
198 extern fsp_err_t HW_SCE_AES_256XtsDecrypt(const uint32_t * InData_Key,
199                                           const uint32_t * InData_IV,
200                                           const uint32_t * InData_Len,
201                                           const uint32_t * InData_Text,
202                                           uint32_t       * OutData_Text,
203                                           uint32_t       * OutData_IV);
204 
205 extern fsp_err_t HW_SCE_GenerateAes128RandomKeyIndexSub(uint32_t * OutData_KeyIndex);
206 extern fsp_err_t HW_SCE_AES_128CreateEncryptedKey(uint32_t * OutData_KeyIndex);
207 
208 extern fsp_err_t HW_SCE_AES_128EcbEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
209                                                            const uint32_t   num_words,
210                                                            const uint32_t * InData_Text,
211                                                            uint32_t       * OutData_Text);
212 
213 extern fsp_err_t HW_SCE_AES_128EcbDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
214                                                            const uint32_t   num_words,
215                                                            const uint32_t * InData_Text,
216                                                            uint32_t       * OutData_Text);
217 
218 extern fsp_err_t HW_SCE_AES_128CbcEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
219                                                            const uint32_t * InData_IV,
220                                                            const uint32_t   num_words,
221                                                            const uint32_t * InData_Text,
222                                                            uint32_t       * OutData_Text,
223                                                            uint32_t       * OutData_IV);
224 
225 extern fsp_err_t HW_SCE_AES_128CbcDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
226                                                            const uint32_t * InData_IV,
227                                                            const uint32_t   num_words,
228                                                            const uint32_t * InData_Text,
229                                                            uint32_t       * OutData_Text,
230                                                            uint32_t       * OutData_IV);
231 
232 extern fsp_err_t HW_SCE_AES_128CtrEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
233                                                            const uint32_t * InData_IV,
234                                                            const uint32_t   num_words,
235                                                            const uint32_t * InData_Text,
236                                                            uint32_t       * OutData_Text,
237                                                            uint32_t       * OutData_IV);
238 
239 extern fsp_err_t HW_SCE_GenerateAes192RandomKeyIndexSub(uint32_t * OutData_KeyIndex);
240 extern fsp_err_t HW_SCE_AES_192CreateEncryptedKey(uint32_t * OutData_KeyIndex);
241 
242 extern fsp_err_t HW_SCE_AES_192EcbEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
243                                                            const uint32_t   num_words,
244                                                            const uint32_t * InData_Text,
245                                                            uint32_t       * OutData_Text);
246 
247 extern fsp_err_t HW_SCE_AES_192EcbDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
248                                                            const uint32_t   num_words,
249                                                            const uint32_t * InData_Text,
250                                                            uint32_t       * OutData_Text);
251 
252 extern fsp_err_t HW_SCE_AES_192CbcEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
253                                                            const uint32_t * InData_IV,
254                                                            const uint32_t   num_words,
255                                                            const uint32_t * InData_Text,
256                                                            uint32_t       * OutData_Text,
257                                                            uint32_t       * OutData_IV);
258 
259 extern fsp_err_t HW_SCE_AES_192CbcDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
260                                                            const uint32_t * InData_IV,
261                                                            const uint32_t   num_words,
262                                                            const uint32_t * InData_Text,
263                                                            uint32_t       * OutData_Text,
264                                                            uint32_t       * OutData_IV);
265 
266 extern fsp_err_t HW_SCE_AES_192CtrEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
267                                                            const uint32_t * InData_IV,
268                                                            const uint32_t   num_words,
269                                                            const uint32_t * InData_Text,
270                                                            uint32_t       * OutData_Text,
271                                                            uint32_t       * OutData_IV);
272 
273 extern fsp_err_t HW_SCE_GenerateAes256RandomKeyIndexSub(uint32_t * OutData_KeyIndex);
274 extern fsp_err_t HW_SCE_AES_256CreateEncryptedKey(uint32_t * OutData_KeyIndex);
275 
276 extern fsp_err_t HW_SCE_AES_256EcbEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
277                                                            const uint32_t   num_words,
278                                                            const uint32_t * InData_Text,
279                                                            uint32_t       * OutData_Text);
280 
281 extern fsp_err_t HW_SCE_AES_256EcbDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
282                                                            const uint32_t   num_words,
283                                                            const uint32_t * InData_Text,
284                                                            uint32_t       * OutData_Text);
285 
286 extern fsp_err_t HW_SCE_AES_256CbcEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
287                                                            const uint32_t * InData_IV,
288                                                            const uint32_t   num_words,
289                                                            const uint32_t * InData_Text,
290                                                            uint32_t       * OutData_Text,
291                                                            uint32_t       * OutData_IV);
292 
293 extern fsp_err_t HW_SCE_AES_256CbcDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
294                                                            const uint32_t * InData_IV,
295                                                            const uint32_t   num_words,
296                                                            const uint32_t * InData_Text,
297                                                            uint32_t       * OutData_Text,
298                                                            uint32_t       * OutData_IV);
299 
300 extern fsp_err_t HW_SCE_AES_256CtrEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex,
301                                                            const uint32_t * InData_IV,
302                                                            const uint32_t   num_words,
303                                                            const uint32_t * InData_Text,
304                                                            uint32_t       * OutData_Text,
305                                                            uint32_t       * OutData_IV);
306 
307 extern fsp_err_t HW_SCE_Aes128EncryptDecryptInit(const uint32_t * InData_Cmd,
308                                                  const uint32_t * InData_KeyIndex,
309                                                  const uint32_t * InData_IV);
310 
311 extern void HW_SCE_Aes128EncryptDecryptUpdate(const uint32_t * InData_Text,
312                                               uint32_t       * OutData_Text,
313                                               const uint32_t   num_words);
314 
315 extern fsp_err_t HW_SCE_Aes128EncryptDecryptFinal(void);
316 
317 extern fsp_err_t HW_SCE_Aes192EncryptDecryptInit(const uint32_t * InData_Cmd,
318                                                  const uint32_t * InData_KeyIndex,
319                                                  const uint32_t * InData_IV);
320 
321 extern void HW_SCE_Aes192EncryptDecryptUpdate(const uint32_t * InData_Text,
322                                               uint32_t       * OutData_Text,
323                                               const uint32_t   num_words);
324 
325 extern fsp_err_t HW_SCE_Aes192EncryptDecryptFinal(void);
326 
327 extern fsp_err_t HW_SCE_Aes256EncryptDecryptInit(const uint32_t * InData_Cmd,
328                                                  const uint32_t * InData_KeyIndex,
329                                                  const uint32_t * InData_IV);
330 
331 extern void HW_SCE_Aes256EncryptDecryptUpdate(const uint32_t * InData_Text,
332                                               uint32_t       * OutData_Text,
333                                               const uint32_t   num_words);
334 
335 extern fsp_err_t HW_SCE_Aes256EncryptDecryptFinal(void);
336 
337 fsp_err_t HW_SCE_Aes128EcbEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
338 fsp_err_t HW_SCE_Aes128EcbDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
339 
340 fsp_err_t HW_SCE_Aes192EcbEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
341 fsp_err_t HW_SCE_Aes192EcbDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
342 
343 fsp_err_t HW_SCE_Aes256EcbEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
344 fsp_err_t HW_SCE_Aes256EcbDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
345 
346 fsp_err_t HW_SCE_Aes128CbcEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
347 fsp_err_t HW_SCE_Aes128CbcDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
348 
349 fsp_err_t HW_SCE_Aes192CbcEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
350 fsp_err_t HW_SCE_Aes192CbcDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
351 
352 fsp_err_t HW_SCE_Aes256CbcEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
353 fsp_err_t HW_SCE_Aes256CbcDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
354 
355 fsp_err_t HW_SCE_Aes128CtrEncryptDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
356 
357 fsp_err_t HW_SCE_Aes192CtrEncryptDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
358 
359 fsp_err_t HW_SCE_Aes256CtrEncryptDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV);
360 
361 fsp_err_t HW_SCE_Aes128EncryptDecryptInitSub(const uint32_t * InData_KeyType,
362                                              const uint32_t * InData_Cmd,
363                                              const uint32_t * InData_KeyIndex,
364                                              const uint32_t * InData_IV);
365 
366 void HW_SCE_Aes128EncryptDecryptUpdateSub(const uint32_t * InData_Text, uint32_t * OutData_Text,
367                                           const uint32_t MAX_CNT);
368 
369 fsp_err_t HW_SCE_Aes128EncryptDecryptFinalSub(void);
370 
371 #endif                                 /* HW_SCE_AES_PRIVATE_H */
372