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  * Includes   <System Includes> , "Project Includes"
9  ***********************************************************************************************************************/
10 #include "hw_sce_ra_private.h"
11 #include "bsp_api.h"
12 #include <stdint.h>
13 
14 /***********************************************************************************************************************
15  * Macro definitions
16  ***********************************************************************************************************************/
17 
18 /* Waitting time to make sure calculation is finished
19  * Refer to Table 1.3 Numbers of Clock Cycles Required for Processing in the CCM Mode
20  * Waiting time for 91 Clock Cycles Required for Processing in the CCM Mode with PCLKB 32MHz
21  * Note: waiting for 91 clock cycles is still not enough for encryption of AES-CCM 256 bits key length.
22  * Must be to 120 clock cycles.
23  * */
24 #define HW_SCE_AES_CCM_WAITING_CYCLES    (120U)
25 #define HW_SCE_FREQUENCY_IN_HZ           (1000000U)
26 
27 /***********************************************************************************************************************
28  * Typedef definitions
29  ***********************************************************************************************************************/
30 
31 /***********************************************************************************************************************
32  * Imported global variables and functions
33  ***********************************************************************************************************************/
34 
35 extern void HW_SCE_AesCcmEncryptKeyOperation(uint32_t * InData_KeyIndex,
36                                              uint32_t   InData_KeyType,
37                                              uint32_t * InData_IV,
38                                              uint32_t   InData_IVLength);
39 
40 extern void HW_SCE_AesCcmDecryptKeyOperation(uint32_t * InData_KeyIndex,
41                                              uint32_t   InData_KeyType,
42                                              uint32_t * InData_IV,
43                                              uint32_t   InData_IVLength);
44 
45 extern void HW_SCE_AesCcmEncryptCounterGenerate(uint32_t InData_TextLength,
46                                                 uint32_t InData_Hdrlen,
47                                                 uint32_t InData_MacLength,
48                                                 uint32_t InData_IVLength);
49 
50 extern void HW_SCE_AesCcmEncryptInputAssociatedData(uint32_t * InData_Header, uint32_t InData_Hdrlen);
51 
52 extern void HW_SCE_AesCcmDecryptInputAssociatedData(uint32_t * InData_Header, uint32_t InData_Hdrlen);
53 
54 extern void HW_SCE_AesCcmEncryptPlaintextInputInit();
55 
56 extern void HW_SCE_AesCcmEncryptGenerateTag(uint32_t * OutData_MAC);
57 
58 extern void hw_aes_ccm_decrypt_init(uint32_t indata_cmd);
59 
60 /***********************************************************************************************************************
61  * Exported global variables
62  ***********************************************************************************************************************/
63 
64 /***********************************************************************************************************************
65  * Private global variables and functions
66  ***********************************************************************************************************************/
67 
68 static uint8_t InputData_DataA[SIZE_AES_GCM_IN_DATA_AAD_LEN_BYTES]     = {0};
69 static uint8_t InputData_IV_GCM[SIZE_AES_GCM_IN_DATA_IV_GCM_LEN_BYTES] = {0};
70 static uint8_t InputData_IV_GCM_LEN_BYTES = 0;
71 
change_endian_long(uint32_t a)72 uint32_t change_endian_long (uint32_t a)
73 {
74     return __REV(a);
75 }
76 
77 /***********************************************************************************************************************
78  * Function Name: hw_aes_set_key
79  * Description  : This function move the key from specified address (1st arg "key" to AES peripheral register with define
80  *       length (2nd arg "KeyLen")
81  * Arguments    :   key     :   key data area
82  *                  KeyLen  :   key length in bits
83  * Return Value : None
84  ***********************************************************************************************************************/
hw_aes_set_key(uint8_t * key,uint32_t KeyLen)85 void hw_aes_set_key (uint8_t * key, uint32_t KeyLen)
86 {
87     uint16_t * ptr = (uint16_t *) key;
88 
89     if (KeyLen > SIZE_AES_192BIT_KEYLEN_BYTES)
90     {
91         R_AES_B->AESKEY7.AESKEYH = *ptr;
92         R_AES_B->AESKEY7.AESKEYL = *(ptr + 1);
93         R_AES_B->AESKEY6.AESKEYH = *(ptr + 2);
94         R_AES_B->AESKEY6.AESKEYL = *(ptr + 3);
95         ptr += 4;
96     }
97 
98     if (KeyLen > SIZE_AES_128BIT_KEYLEN_BYTES)
99     {
100         R_AES_B->AESKEY5.AESKEYH = *ptr;
101         R_AES_B->AESKEY5.AESKEYL = *(ptr + 1);
102         R_AES_B->AESKEY4.AESKEYH = *(ptr + 2);
103         R_AES_B->AESKEY4.AESKEYL = *(ptr + 3);
104         ptr += 4;
105     }
106 
107     R_AES_B->AESKEY3.AESKEYH = *ptr;
108     R_AES_B->AESKEY3.AESKEYL = *(ptr + 1);
109     R_AES_B->AESKEY2.AESKEYH = *(ptr + 2);
110     R_AES_B->AESKEY2.AESKEYL = *(ptr + 3);
111     R_AES_B->AESKEY1.AESKEYH = *(ptr + 4);
112     R_AES_B->AESKEY1.AESKEYL = *(ptr + 5);
113     R_AES_B->AESKEY0.AESKEYH = *(ptr + 6);
114     R_AES_B->AESKEY0.AESKEYL = *(ptr + 7);
115 }
116 
117 /***********************************************************************************************************************
118  * Function Name: hw_aes_set_iv
119  * Description  : This function move Initialize vector from specified address (1st arg. "iv") to AES register.
120  * Arguments    : iv    :   Initialization vector area (16 byte)
121  * Return Value : None
122  ***********************************************************************************************************************/
hw_aes_set_iv(uint8_t * initialize_vector)123 void hw_aes_set_iv (uint8_t * initialize_vector)
124 {
125     uint16_t * p_in = (uint16_t *) initialize_vector;
126 
127     R_AES_B->AESIV3.AESIVH = *p_in;
128     R_AES_B->AESIV3.AESIVL = *(p_in + 1);
129     R_AES_B->AESIV2.AESIVH = *(p_in + 2);
130     R_AES_B->AESIV2.AESIVL = *(p_in + 3);
131     R_AES_B->AESIV1.AESIVH = *(p_in + 4);
132     R_AES_B->AESIV1.AESIVL = *(p_in + 5);
133     R_AES_B->AESIV0.AESIVH = *(p_in + 6);
134     R_AES_B->AESIV0.AESIVL = *(p_in + 7);
135 }
136 
137 /***********************************************************************************************************************
138  * Function Name: hw_aes_set_plaintext
139  * Description  : This function move input data from specified address(1st arg. "ptext") to AES Data Input register.
140  * Arguments    : ptext :   Input data area (block * 16bytes)
141  * Return Value : None
142  ***********************************************************************************************************************/
hw_aes_set_plaintext(uint8_t * ptext)143 static void hw_aes_set_plaintext (uint8_t * ptext)
144 {
145     uint16_t * p_in = (uint16_t *) ptext;
146 
147     R_AES_B->AESIDAT3.AESIDATH = *p_in;
148     R_AES_B->AESIDAT3.AESIDATL = *(p_in + 1);
149     R_AES_B->AESIDAT2.AESIDATH = *(p_in + 2);
150     R_AES_B->AESIDAT2.AESIDATL = *(p_in + 3);
151     R_AES_B->AESIDAT1.AESIDATH = *(p_in + 4);
152     R_AES_B->AESIDAT1.AESIDATL = *(p_in + 5);
153     R_AES_B->AESIDAT0.AESIDATH = *(p_in + 6);
154     R_AES_B->AESIDAT0.AESIDATL = *(p_in + 7);
155 }
156 
157 /***********************************************************************************************************************
158  * Function Name: hw_aes_get_ciphertext
159  * Description  : This function move AES register output to specified address (1st arg. "output").
160  * Arguments    : output    : output data area (block * 16bytes)
161  * Return Value : None
162  ***********************************************************************************************************************/
hw_aes_get_ciphertext(uint8_t * output)163 static void hw_aes_get_ciphertext (uint8_t * output)
164 {
165     uint16_t * ptr;
166     ptr = (uint16_t *) output;
167 
168     *ptr       = R_AES_B->AESODAT3.AESODATH;
169     *(ptr + 1) = R_AES_B->AESODAT3.AESODATL;
170     *(ptr + 2) = R_AES_B->AESODAT2.AESODATH;
171     *(ptr + 3) = R_AES_B->AESODAT2.AESODATL;
172     *(ptr + 4) = R_AES_B->AESODAT1.AESODATH;
173     *(ptr + 5) = R_AES_B->AESODAT1.AESODATL;
174     *(ptr + 6) = R_AES_B->AESODAT0.AESODATH;
175     *(ptr + 7) = R_AES_B->AESODAT0.AESODATL;
176 }
177 
hw_aes_start(uint8_t * input,uint8_t * output,uint32_t block)178 void hw_aes_start (uint8_t * input, uint8_t * output, uint32_t block)
179 {
180     uint8_t * ptr;
181     uint8_t * ptr_out;
182     uint32_t  block_ctr = 0;
183 
184     ptr       = input;
185     ptr_out   = output;
186     block_ctr = 0;
187     do
188     {
189         hw_aes_set_plaintext(ptr);
190         R_AES_B->AESDCNTL |= R_AES_AESDCNTL_CALCULATE_START;
191 
192         while ((R_AES_B->AESSTSL & R_AES_AESSTSL_BIT_5) != 0)
193         {
194             ;
195         }
196 
197         if ((R_AES_B->AESSTSL & R_AES_AESSTSL_CALCULATE_COMPLETED) != 0)
198         {
199             hw_aes_get_ciphertext(ptr_out);
200             R_AES_B->AESSTSCL = R_AES_AESSTSCL_DATA_CLEAN;
201             R_AES_B->AESDCNTL = 0;
202         }
203 
204         ptr     += 16;
205         ptr_out += 16;
206         block_ctr++;
207     } while (block_ctr < block);
208 }
209 
210 /***********************************************************************************************************************
211  * Function Name: hw_aes_ccm_mode_start
212  * Description  : This function move input data from specified address(1st arg. "input") to AES Data Input register
213  * and move AES register output to specified address(2nd arg. "output").
214  *                In case 1st arg. "input" is NULL, this function move AES register output to "output" only.
215  *                In case 2nd arg. "output" is NULL, this function move input data from "input" to AES Data Input register only.
216  * Arguments    :   input : Input data area (block * 16bytes)
217  *                  output: Output data area (block * 16bytes)
218  * Return Value : None
219  ***********************************************************************************************************************/
hw_aes_ccm_mode_start(uint8_t * input,uint8_t * output,uint32_t block)220 void hw_aes_ccm_mode_start (uint8_t * input, uint8_t * output, uint32_t block)
221 {
222     uint32_t block_ctr;
223     uint32_t system_clock_freq_mhz = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_PCLKB) / HW_SCE_FREQUENCY_IN_HZ;
224 
225     /* Round up the frequency to a whole number */
226     uint32_t delay_us = (HW_SCE_AES_CCM_WAITING_CYCLES + system_clock_freq_mhz - 1) / system_clock_freq_mhz;
227 
228     for (block_ctr = 0; block_ctr < block; block_ctr++)
229     {
230         if (NULL != input)
231         {
232             hw_aes_set_plaintext(input);
233             R_AES_B->AESDCNTL |= R_AES_AESDCNTL_CALCULATE_START;
234             R_BSP_SoftwareDelay(delay_us, BSP_DELAY_UNITS_MICROSECONDS);
235         }
236 
237         if (NULL != output)
238         {
239             hw_aes_get_ciphertext(output);
240             output += SIZE_AES_BLOCK_BYTES;
241         }
242 
243         input += SIZE_AES_BLOCK_BYTES;
244     }
245 }
246 
HW_SCE_GenerateAes128RandomKeyIndexSub(uint32_t * OutData_KeyIndex)247 fsp_err_t HW_SCE_GenerateAes128RandomKeyIndexSub (uint32_t * OutData_KeyIndex)
248 {
249     FSP_PARAMETER_NOT_USED(OutData_KeyIndex);
250 
251     return FSP_ERR_UNSUPPORTED;
252 }
253 
HW_SCE_GenerateAes192RandomKeyIndexSub(uint32_t * OutData_KeyIndex)254 fsp_err_t HW_SCE_GenerateAes192RandomKeyIndexSub (uint32_t * OutData_KeyIndex)
255 {
256     FSP_PARAMETER_NOT_USED(OutData_KeyIndex);
257 
258     return FSP_ERR_UNSUPPORTED;
259 }
260 
HW_SCE_GenerateAes256RandomKeyIndexSub(uint32_t * OutData_KeyIndex)261 fsp_err_t HW_SCE_GenerateAes256RandomKeyIndexSub (uint32_t * OutData_KeyIndex)
262 {
263     FSP_PARAMETER_NOT_USED(OutData_KeyIndex);
264 
265     return FSP_ERR_UNSUPPORTED;
266 }
267 
HW_SCE_Aes192EncryptDecryptInitSub(const uint32_t * InData_Cmd,const uint32_t * InData_KeyIndex,const uint32_t * InData_IV)268 fsp_err_t HW_SCE_Aes192EncryptDecryptInitSub (const uint32_t * InData_Cmd,
269                                               const uint32_t * InData_KeyIndex,
270                                               const uint32_t * InData_IV)
271 {
272 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
273     if ((InData_Cmd == (const uint32_t *) 0) ||
274         (InData_KeyIndex == (const uint32_t *) 0) ||
275         (InData_IV == (const uint32_t *) 0))
276     {
277         return FSP_ERR_CRYPTO_SCE_FAIL;
278     }
279 #endif
280 
281     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_192BIT_KEYLEN_BYTES);
282     hw_aes_set_iv((uint8_t *) InData_IV);
283     switch (change_endian_long(*InData_Cmd))
284     {
285         case SCE_AES_IN_DATA_CMD_CTR_ENCRYPTION_DECRYPTION:
286         {
287             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
288             R_AES_B->AESCNTL  = R_AES_AESCNTL_CTR_192_ENC;
289             break;
290         }
291 
292         case SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION:
293         {
294             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_1;
295             R_AES_B->AESCNTL  = R_AES_AESCNTL_ECB_192_ENC;
296             break;
297         }
298 
299         case SCE_AES_IN_DATA_CMD_ECB_DECRYPTION:
300         {
301             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_1;
302             R_AES_B->AESCNTL  = R_AES_AESCNTL_ECB_192_DEC;
303             break;
304         }
305 
306         case SCE_AES_IN_DATA_CMD_CBC_ENCRYPTION:
307         {
308             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
309             R_AES_B->AESCNTL  = R_AES_AESCNTL_CBC_192_ENC;
310             break;
311         }
312 
313         case SCE_AES_IN_DATA_CMD_CBC_DECRYPTION:
314         {
315             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
316             R_AES_B->AESCNTL  = R_AES_AESCNTL_CBC_192_DEC;
317             break;
318         }
319     }
320 
321     return FSP_SUCCESS;
322 }
323 
HW_SCE_Aes192EncryptDecryptUpdateSub(const uint32_t * InData_Text,uint32_t * OutData_Text,const uint32_t MAX_CNT)324 void HW_SCE_Aes192EncryptDecryptUpdateSub (const uint32_t * InData_Text, uint32_t * OutData_Text,
325                                            const uint32_t MAX_CNT)
326 {
327     hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
328 }
329 
HW_SCE_Aes192EncryptDecryptFinalSub(void)330 fsp_err_t HW_SCE_Aes192EncryptDecryptFinalSub (void)
331 {
332     while ((R_AES_B->AESSTSL & R_AES_AESSTSL_BIT_5) != 0)
333     {
334         ;
335     }
336 
337     if ((R_AES_B->AESSTSL & R_AES_AESSTSL_CALCULATE_COMPLETED) != 0)
338     {
339         R_AES_B->AESSTSCL = R_AES_AESSTSCL_DATA_CLEAN;
340         R_AES_B->AESDCNTL = 0;
341     }
342 
343     return FSP_SUCCESS;
344 }
345 
HW_SCE_Aes128EncryptDecryptInitSub(const uint32_t * InData_KeyType,const uint32_t * InData_Cmd,const uint32_t * InData_KeyIndex,const uint32_t * InData_IV)346 fsp_err_t HW_SCE_Aes128EncryptDecryptInitSub (const uint32_t * InData_KeyType,
347                                               const uint32_t * InData_Cmd,
348                                               const uint32_t * InData_KeyIndex,
349                                               const uint32_t * InData_IV)
350 {
351     FSP_PARAMETER_NOT_USED(InData_KeyType);
352 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
353     if ((InData_Cmd == (const uint32_t *) 0) ||
354         (InData_KeyIndex == (const uint32_t *) 0) ||
355         (InData_IV == (const uint32_t *) 0))
356     {
357         return FSP_ERR_CRYPTO_SCE_FAIL;
358     }
359 #endif
360 
361     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_128BIT_KEYLEN_BYTES);
362     hw_aes_set_iv((uint8_t *) InData_IV);
363     switch (change_endian_long(*InData_Cmd))
364     {
365         case SCE_AES_IN_DATA_CMD_CTR_ENCRYPTION_DECRYPTION:
366         {
367             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
368             R_AES_B->AESCNTL  = R_AES_AESCNTL_CTR_128_ENC;
369             break;
370         }
371 
372         case SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION:
373         {
374             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_1;
375             R_AES_B->AESCNTL  = R_AES_AESCNTL_ECB_128_ENC;
376             break;
377         }
378 
379         case SCE_AES_IN_DATA_CMD_ECB_DECRYPTION:
380         {
381             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_1;
382             R_AES_B->AESCNTL  = R_AES_AESCNTL_ECB_128_DEC;
383             break;
384         }
385 
386         case SCE_AES_IN_DATA_CMD_CBC_ENCRYPTION:
387         {
388             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
389             R_AES_B->AESCNTL  = R_AES_AESCNTL_CBC_128_ENC;
390             break;
391         }
392 
393         case SCE_AES_IN_DATA_CMD_CBC_DECRYPTION:
394         {
395             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
396             R_AES_B->AESCNTL  = R_AES_AESCNTL_CBC_128_DEC;
397             break;
398         }
399     }
400 
401     return FSP_SUCCESS;
402 }
403 
HW_SCE_Aes128EncryptDecryptUpdateSub(const uint32_t * InData_Text,uint32_t * OutData_Text,const uint32_t MAX_CNT)404 void HW_SCE_Aes128EncryptDecryptUpdateSub (const uint32_t * InData_Text, uint32_t * OutData_Text,
405                                            const uint32_t MAX_CNT)
406 {
407     hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
408 }
409 
HW_SCE_Aes128EncryptDecryptFinalSub(void)410 fsp_err_t HW_SCE_Aes128EncryptDecryptFinalSub (void)
411 {
412     while ((R_AES_B->AESSTSL & R_AES_AESSTSL_BIT_5) != 0)
413     {
414         ;
415     }
416 
417     if ((R_AES_B->AESSTSL & R_AES_AESSTSL_CALCULATE_COMPLETED) != 0)
418     {
419         R_AES_B->AESSTSCL = R_AES_AESSTSCL_DATA_CLEAN;
420         R_AES_B->AESDCNTL = 0;
421     }
422 
423     return FSP_SUCCESS;
424 }
425 
HW_SCE_Aes256EncryptDecryptInitSub(const uint32_t * InData_KeyType,const uint32_t * InData_Cmd,const uint32_t * InData_KeyIndex,const uint32_t * InData_IV)426 fsp_err_t HW_SCE_Aes256EncryptDecryptInitSub (const uint32_t * InData_KeyType,
427                                               const uint32_t * InData_Cmd,
428                                               const uint32_t * InData_KeyIndex,
429                                               const uint32_t * InData_IV)
430 {
431     FSP_PARAMETER_NOT_USED(InData_KeyType);
432 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
433     if ((InData_Cmd == (const uint32_t *) 0) ||
434         (InData_KeyIndex == (const uint32_t *) 0) ||
435         (InData_IV == (const uint32_t *) 0))
436     {
437         return FSP_ERR_CRYPTO_SCE_FAIL;
438     }
439 #endif
440 
441     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_256BIT_KEYLEN_BYTES);
442     hw_aes_set_iv((uint8_t *) InData_IV);
443     switch (change_endian_long(*InData_Cmd))
444     {
445         case SCE_AES_IN_DATA_CMD_CTR_ENCRYPTION_DECRYPTION:
446         {
447             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
448             R_AES_B->AESCNTL  = R_AES_AESCNTL_CTR_256_ENC;
449             break;
450         }
451 
452         case SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION:
453         {
454             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_1;
455             R_AES_B->AESCNTL  = R_AES_AESCNTL_ECB_256_ENC;
456             break;
457         }
458 
459         case SCE_AES_IN_DATA_CMD_ECB_DECRYPTION:
460         {
461             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_1;
462             R_AES_B->AESCNTL  = R_AES_AESCNTL_ECB_256_DEC;
463             break;
464         }
465 
466         case SCE_AES_IN_DATA_CMD_CBC_ENCRYPTION:
467         {
468             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
469             R_AES_B->AESCNTL  = R_AES_AESCNTL_CBC_256_ENC;
470             break;
471         }
472 
473         case SCE_AES_IN_DATA_CMD_CBC_DECRYPTION:
474         {
475             R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
476             R_AES_B->AESCNTL  = R_AES_AESCNTL_CBC_256_DEC;
477             break;
478         }
479     }
480 
481     return FSP_SUCCESS;
482 }
483 
HW_SCE_Aes256EncryptDecryptUpdateSub(const uint32_t * InData_Text,uint32_t * OutData_Text,const uint32_t MAX_CNT)484 void HW_SCE_Aes256EncryptDecryptUpdateSub (const uint32_t * InData_Text, uint32_t * OutData_Text,
485                                            const uint32_t MAX_CNT)
486 {
487     hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
488 }
489 
HW_SCE_Aes256EncryptDecryptFinalSub(void)490 fsp_err_t HW_SCE_Aes256EncryptDecryptFinalSub (void)
491 {
492     while ((R_AES_B->AESSTSL & R_AES_AESSTSL_BIT_5) != 0)
493     {
494         ;
495     }
496 
497     if ((R_AES_B->AESSTSL & R_AES_AESSTSL_CALCULATE_COMPLETED) != 0)
498     {
499         R_AES_B->AESSTSCL = R_AES_AESSTSCL_DATA_CLEAN;
500         R_AES_B->AESDCNTL = 0;
501     }
502 
503     return FSP_SUCCESS;
504 }
505 
HW_SCE_Aes128GcmEncryptInitSub(uint32_t * InData_KeyType,uint32_t * InData_KeyIndex,uint32_t * InData_IV)506 fsp_err_t HW_SCE_Aes128GcmEncryptInitSub (uint32_t * InData_KeyType, uint32_t * InData_KeyIndex, uint32_t * InData_IV)
507 {
508     FSP_PARAMETER_NOT_USED(InData_KeyType);
509     R_AES_B->AESCNTL = R_AES_AESCNTL_GCM_128_ENC;
510     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_128BIT_KEYLEN_BYTES);
511     R_AES_B->AESDCNTL          = R_AES_AESDCNTL_BIT_2_3_MODE_1;
512     InputData_IV_GCM_LEN_BYTES = (uint8_t) *((unsigned int *) InData_KeyIndex + SCE_AES_GCM_IN_DATA_IV_LEN_LOC);
513     memcpy(&InputData_IV_GCM[0], (uint8_t *) InData_IV, InputData_IV_GCM_LEN_BYTES);
514 
515     return FSP_SUCCESS;
516 }
517 
HW_SCE_Aes128GcmEncryptUpdateAADSub(uint32_t * InData_DataA,uint32_t MAX_CNT)518 void HW_SCE_Aes128GcmEncryptUpdateAADSub (uint32_t * InData_DataA, uint32_t MAX_CNT)
519 {
520     FSP_PARAMETER_NOT_USED(MAX_CNT);
521     if (InData_DataA != 0)
522     {
523         memcpy(&InputData_DataA[0], (uint8_t *) InData_DataA, sizeof(InputData_DataA));
524     }
525 }
526 
HW_SCE_Aes128GcmEncryptUpdateTransitionSub(void)527 void HW_SCE_Aes128GcmEncryptUpdateTransitionSub (void)
528 {
529 }
530 
HW_SCE_Aes128GcmEncryptUpdateSub(uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t MAX_CNT)531 void HW_SCE_Aes128GcmEncryptUpdateSub (uint32_t * InData_Text, uint32_t * OutData_Text, uint32_t MAX_CNT)
532 {
533     FSP_PARAMETER_NOT_USED(InData_Text);
534     FSP_PARAMETER_NOT_USED(OutData_Text);
535     FSP_PARAMETER_NOT_USED(MAX_CNT);
536 }
537 
HW_SCE_Aes128GcmEncryptFinalSub(uint32_t * InData_Text,uint32_t * InData_DataALen,uint32_t * InData_TextLen,uint32_t * OutData_Text,uint32_t * OutData_DataT)538 fsp_err_t HW_SCE_Aes128GcmEncryptFinalSub (uint32_t * InData_Text,
539                                            uint32_t * InData_DataALen,
540                                            uint32_t * InData_TextLen,
541                                            uint32_t * OutData_Text,
542                                            uint32_t * OutData_DataT)
543 {
544     fsp_err_t status;
545     status = hw_gcm_calculation((uint8_t *) InData_Text,
546                                 (uint8_t *) OutData_Text,
547                                 *InData_TextLen,
548                                 (uint8_t *) OutData_DataT,
549                                 &InputData_IV_GCM[0],
550                                 InputData_IV_GCM_LEN_BYTES,
551                                 &InputData_DataA[0],
552                                 *InData_DataALen);
553 
554     return status;
555 }
556 
HW_SCE_Aes128GcmDecryptInitSub(uint32_t * InData_KeyType,uint32_t * InData_KeyIndex,uint32_t * InData_IV)557 fsp_err_t HW_SCE_Aes128GcmDecryptInitSub (uint32_t * InData_KeyType, uint32_t * InData_KeyIndex, uint32_t * InData_IV)
558 {
559     FSP_PARAMETER_NOT_USED(InData_KeyType);
560     R_AES_B->AESCNTL = R_AES_AESCNTL_GCM_128_DEC;
561     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_128BIT_KEYLEN_BYTES);
562     R_AES_B->AESDCNTL          = R_AES_AESDCNTL_BIT_2_3_MODE_1;
563     InputData_IV_GCM_LEN_BYTES = (uint8_t) *((unsigned int *) InData_KeyIndex + SCE_AES_GCM_IN_DATA_IV_LEN_LOC);
564     memcpy(&InputData_IV_GCM[0], (uint8_t *) InData_IV, InputData_IV_GCM_LEN_BYTES);
565 
566     return FSP_SUCCESS;
567 }
568 
HW_SCE_Aes128GcmDecryptUpdateAADSub(uint32_t * InData_DataA,uint32_t MAX_CNT)569 void HW_SCE_Aes128GcmDecryptUpdateAADSub (uint32_t * InData_DataA, uint32_t MAX_CNT)
570 {
571     FSP_PARAMETER_NOT_USED(MAX_CNT);
572     if (InData_DataA != 0)
573     {
574         memcpy(&InputData_DataA[0], (uint8_t *) InData_DataA, sizeof(InputData_DataA));
575     }
576 }
577 
HW_SCE_Aes128GcmDecryptUpdateTransitionSub(void)578 void HW_SCE_Aes128GcmDecryptUpdateTransitionSub (void)
579 {
580 }
581 
HW_SCE_Aes128GcmDecryptUpdateSub(uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t MAX_CNT)582 void HW_SCE_Aes128GcmDecryptUpdateSub (uint32_t * InData_Text, uint32_t * OutData_Text, uint32_t MAX_CNT)
583 {
584     FSP_PARAMETER_NOT_USED(InData_Text);
585     FSP_PARAMETER_NOT_USED(OutData_Text);
586     FSP_PARAMETER_NOT_USED(MAX_CNT);
587 }
588 
HW_SCE_Aes128GcmDecryptFinalSub(uint32_t * InData_Text,uint32_t * InData_DataT,uint32_t * InData_DataALen,uint32_t * InData_TextLen,uint32_t * InData_DataTLen,uint32_t * OutData_Text)589 fsp_err_t HW_SCE_Aes128GcmDecryptFinalSub (uint32_t * InData_Text,
590                                            uint32_t * InData_DataT,
591                                            uint32_t * InData_DataALen,
592                                            uint32_t * InData_TextLen,
593                                            uint32_t * InData_DataTLen,
594                                            uint32_t * OutData_Text)
595 {
596     uint8_t   Tag[16];
597     uint8_t   temp;
598     fsp_err_t status;
599     uint8_t   Target_Tag[16] = {0};
600     memcpy(&Target_Tag[0], InData_DataT, (uint8_t) *InData_DataTLen);
601 
602     status = hw_gcm_calculation((uint8_t *) InData_Text,
603                                 (uint8_t *) OutData_Text,
604                                 *InData_TextLen,
605                                 &Tag[0],
606                                 &InputData_IV_GCM[0],
607                                 InputData_IV_GCM_LEN_BYTES,
608                                 &InputData_DataA[0],
609                                 *InData_DataALen);
610     if (status != FSP_SUCCESS)
611     {
612         return FSP_ERR_CRYPTO_UNKNOWN;
613     }
614 
615     /* Athentication Tag Verification*/
616     if ((uint8_t) *InData_DataTLen != 0)
617     {
618         for (uint8_t iLoop = 0; iLoop < (uint8_t) *InData_DataTLen; iLoop++)
619         {
620             temp = Target_Tag[iLoop];
621             if (temp != Tag[iLoop])
622             {
623                 status = FSP_ERR_INVALID_ARGUMENT;
624                 break;
625             }
626         }
627 
628         if (status == FSP_ERR_INVALID_ARGUMENT)
629         {
630             memset(OutData_Text, 0, *InData_TextLen);
631 
632             return FSP_ERR_CRYPTO_UNKNOWN;
633         }
634     }
635 
636     return FSP_SUCCESS;
637 }
638 
HW_SCE_Aes192GcmEncryptInitSub(uint32_t * InData_KeyType,uint32_t * InData_KeyIndex,uint32_t * InData_IV)639 fsp_err_t HW_SCE_Aes192GcmEncryptInitSub (uint32_t * InData_KeyType, uint32_t * InData_KeyIndex, uint32_t * InData_IV)
640 {
641     FSP_PARAMETER_NOT_USED(InData_KeyType);
642     R_AES_B->AESCNTL = R_AES_AESCNTL_GCM_192_ENC;
643     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_192BIT_KEYLEN_BYTES);
644     R_AES_B->AESDCNTL          = R_AES_AESDCNTL_BIT_2_3_MODE_1;
645     InputData_IV_GCM_LEN_BYTES = (uint8_t) *((unsigned int *) InData_KeyIndex + SCE_AES_GCM_IN_DATA_IV_LEN_LOC);
646     memcpy(&InputData_IV_GCM[0], (uint8_t *) InData_IV, InputData_IV_GCM_LEN_BYTES);
647 
648     return FSP_SUCCESS;
649 }
650 
HW_SCE_Aes192GcmEncryptUpdateAADSub(uint32_t * InData_DataA,uint32_t MAX_CNT)651 void HW_SCE_Aes192GcmEncryptUpdateAADSub (uint32_t * InData_DataA, uint32_t MAX_CNT)
652 {
653     FSP_PARAMETER_NOT_USED(MAX_CNT);
654     if (InData_DataA != 0)
655     {
656         memcpy(&InputData_DataA[0], (uint8_t *) InData_DataA, sizeof(InputData_DataA));
657     }
658 }
659 
HW_SCE_Aes192GcmEncryptUpdateTransitionSub(void)660 void HW_SCE_Aes192GcmEncryptUpdateTransitionSub (void)
661 {
662 }
663 
HW_SCE_Aes192GcmEncryptUpdateSub(uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t MAX_CNT)664 void HW_SCE_Aes192GcmEncryptUpdateSub (uint32_t * InData_Text, uint32_t * OutData_Text, uint32_t MAX_CNT)
665 {
666     FSP_PARAMETER_NOT_USED(InData_Text);
667     FSP_PARAMETER_NOT_USED(OutData_Text);
668     FSP_PARAMETER_NOT_USED(MAX_CNT);
669 }
670 
HW_SCE_Aes192GcmEncryptFinalSub(uint32_t * InData_Text,uint32_t * InData_DataALen,uint32_t * InData_TextLen,uint32_t * OutData_Text,uint32_t * OutData_DataT)671 fsp_err_t HW_SCE_Aes192GcmEncryptFinalSub (uint32_t * InData_Text,
672                                            uint32_t * InData_DataALen,
673                                            uint32_t * InData_TextLen,
674                                            uint32_t * OutData_Text,
675                                            uint32_t * OutData_DataT)
676 {
677     fsp_err_t status;
678     status = hw_gcm_calculation((uint8_t *) InData_Text,
679                                 (uint8_t *) OutData_Text,
680                                 *InData_TextLen,
681                                 (uint8_t *) OutData_DataT,
682                                 &InputData_IV_GCM[0],
683                                 InputData_IV_GCM_LEN_BYTES,
684                                 &InputData_DataA[0],
685                                 *InData_DataALen);
686 
687     return status;
688 }
689 
HW_SCE_Aes192GcmDecryptInitSub(uint32_t * InData_KeyType,uint32_t * InData_KeyIndex,uint32_t * InData_IV)690 fsp_err_t HW_SCE_Aes192GcmDecryptInitSub (uint32_t * InData_KeyType, uint32_t * InData_KeyIndex, uint32_t * InData_IV)
691 {
692     FSP_PARAMETER_NOT_USED(InData_KeyType);
693     R_AES_B->AESCNTL = R_AES_AESCNTL_GCM_192_DEC;
694     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_192BIT_KEYLEN_BYTES);
695     R_AES_B->AESDCNTL          = R_AES_AESDCNTL_BIT_2_3_MODE_1;
696     InputData_IV_GCM_LEN_BYTES = (uint8_t) *((unsigned int *) InData_KeyIndex + SCE_AES_GCM_IN_DATA_IV_LEN_LOC);
697     memcpy(&InputData_IV_GCM[0], (uint8_t *) InData_IV, InputData_IV_GCM_LEN_BYTES);
698 
699     return FSP_SUCCESS;
700 }
701 
HW_SCE_Aes192GcmDecryptUpdateAADSub(uint32_t * InData_DataA,uint32_t MAX_CNT)702 void HW_SCE_Aes192GcmDecryptUpdateAADSub (uint32_t * InData_DataA, uint32_t MAX_CNT)
703 {
704     FSP_PARAMETER_NOT_USED(MAX_CNT);
705     if (InData_DataA != 0)
706     {
707         memcpy(&InputData_DataA[0], (uint8_t *) InData_DataA, sizeof(InputData_DataA));
708     }
709 }
710 
HW_SCE_Aes192GcmDecryptUpdateTransitionSub(void)711 void HW_SCE_Aes192GcmDecryptUpdateTransitionSub (void)
712 {
713 }
714 
HW_SCE_Aes192GcmDecryptUpdateSub(uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t MAX_CNT)715 void HW_SCE_Aes192GcmDecryptUpdateSub (uint32_t * InData_Text, uint32_t * OutData_Text, uint32_t MAX_CNT)
716 {
717     FSP_PARAMETER_NOT_USED(InData_Text);
718     FSP_PARAMETER_NOT_USED(OutData_Text);
719     FSP_PARAMETER_NOT_USED(MAX_CNT);
720 }
721 
HW_SCE_Aes192GcmDecryptFinalSub(uint32_t * InData_Text,uint32_t * InData_DataT,uint32_t * InData_DataALen,uint32_t * InData_TextLen,uint32_t * InData_DataTLen,uint32_t * OutData_Text)722 fsp_err_t HW_SCE_Aes192GcmDecryptFinalSub (uint32_t * InData_Text,
723                                            uint32_t * InData_DataT,
724                                            uint32_t * InData_DataALen,
725                                            uint32_t * InData_TextLen,
726                                            uint32_t * InData_DataTLen,
727                                            uint32_t * OutData_Text)
728 {
729     uint8_t   Tag[16];
730     uint8_t   temp;
731     fsp_err_t status;
732     uint8_t   Target_Tag[16] = {0};
733     memcpy(&Target_Tag[0], InData_DataT, (uint8_t) *InData_DataTLen);
734 
735     status = hw_gcm_calculation((uint8_t *) InData_Text,
736                                 (uint8_t *) OutData_Text,
737                                 *InData_TextLen,
738                                 &Tag[0],
739                                 &InputData_IV_GCM[0],
740                                 InputData_IV_GCM_LEN_BYTES,
741                                 &InputData_DataA[0],
742                                 *InData_DataALen);
743     if (status != FSP_SUCCESS)
744     {
745         return FSP_ERR_CRYPTO_UNKNOWN;
746     }
747 
748     /* Athentication Tag Verification*/
749     if (*InData_DataTLen != 0)
750     {
751         for (uint32_t iLoop = 0; iLoop < (uint8_t) *InData_DataTLen; iLoop++)
752         {
753             temp = Target_Tag[iLoop];
754             if (temp != Tag[iLoop])
755             {
756                 status = FSP_ERR_INVALID_ARGUMENT;
757                 break;
758             }
759         }
760 
761         if (status == FSP_ERR_INVALID_ARGUMENT)
762         {
763             memset(OutData_Text, 0, *InData_TextLen);
764 
765             return FSP_ERR_CRYPTO_UNKNOWN;
766         }
767     }
768 
769     return FSP_SUCCESS;
770 }
771 
HW_SCE_Aes256GcmEncryptInitSub(uint32_t * InData_KeyType,uint32_t * InData_KeyIndex,uint32_t * InData_IV)772 fsp_err_t HW_SCE_Aes256GcmEncryptInitSub (uint32_t * InData_KeyType, uint32_t * InData_KeyIndex, uint32_t * InData_IV)
773 {
774     FSP_PARAMETER_NOT_USED(InData_KeyType);
775     R_AES_B->AESCNTL = R_AES_AESCNTL_GCM_256_ENC;
776     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_256BIT_KEYLEN_BYTES);
777     R_AES_B->AESDCNTL          = R_AES_AESDCNTL_BIT_2_3_MODE_1;
778     InputData_IV_GCM_LEN_BYTES = (uint8_t) *((unsigned int *) InData_KeyIndex + SCE_AES_GCM_IN_DATA_IV_LEN_LOC);
779     memcpy(&InputData_IV_GCM[0], (uint8_t *) InData_IV, InputData_IV_GCM_LEN_BYTES);
780 
781     return FSP_SUCCESS;
782 }
783 
HW_SCE_Aes256GcmEncryptUpdateAADSub(uint32_t * InData_DataA,uint32_t MAX_CNT)784 void HW_SCE_Aes256GcmEncryptUpdateAADSub (uint32_t * InData_DataA, uint32_t MAX_CNT)
785 {
786     FSP_PARAMETER_NOT_USED(MAX_CNT);
787     if (InData_DataA != 0)
788     {
789         memcpy(&InputData_DataA[0], (uint8_t *) InData_DataA, sizeof(InputData_DataA));
790     }
791 }
792 
HW_SCE_Aes256GcmEncryptUpdateTransitionSub(void)793 void HW_SCE_Aes256GcmEncryptUpdateTransitionSub (void)
794 {
795 }
796 
HW_SCE_Aes256GcmEncryptUpdateSub(uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t MAX_CNT)797 void HW_SCE_Aes256GcmEncryptUpdateSub (uint32_t * InData_Text, uint32_t * OutData_Text, uint32_t MAX_CNT)
798 {
799     FSP_PARAMETER_NOT_USED(InData_Text);
800     FSP_PARAMETER_NOT_USED(OutData_Text);
801     FSP_PARAMETER_NOT_USED(MAX_CNT);
802 }
803 
HW_SCE_Aes256GcmEncryptFinalSub(uint32_t * InData_Text,uint32_t * InData_DataALen,uint32_t * InData_TextLen,uint32_t * OutData_Text,uint32_t * OutData_DataT)804 fsp_err_t HW_SCE_Aes256GcmEncryptFinalSub (uint32_t * InData_Text,
805                                            uint32_t * InData_DataALen,
806                                            uint32_t * InData_TextLen,
807                                            uint32_t * OutData_Text,
808                                            uint32_t * OutData_DataT)
809 {
810     fsp_err_t status;
811     status = hw_gcm_calculation((uint8_t *) InData_Text,
812                                 (uint8_t *) OutData_Text,
813                                 *InData_TextLen,
814                                 (uint8_t *) OutData_DataT,
815                                 &InputData_IV_GCM[0],
816                                 InputData_IV_GCM_LEN_BYTES,
817                                 &InputData_DataA[0],
818                                 *InData_DataALen);
819 
820     return status;
821 }
822 
HW_SCE_Aes256GcmDecryptInitSub(uint32_t * InData_KeyType,uint32_t * InData_KeyIndex,uint32_t * InData_IV)823 fsp_err_t HW_SCE_Aes256GcmDecryptInitSub (uint32_t * InData_KeyType, uint32_t * InData_KeyIndex, uint32_t * InData_IV)
824 {
825     FSP_PARAMETER_NOT_USED(InData_KeyType);
826     R_AES_B->AESCNTL = R_AES_AESCNTL_GCM_256_DEC;
827     hw_aes_set_key((uint8_t *) InData_KeyIndex, SIZE_AES_256BIT_KEYLEN_BYTES);
828     R_AES_B->AESDCNTL          = R_AES_AESDCNTL_BIT_2_3_MODE_1;
829     InputData_IV_GCM_LEN_BYTES = (uint8_t) *((unsigned int *) InData_KeyIndex + SCE_AES_GCM_IN_DATA_IV_LEN_LOC);
830     memcpy((uint8_t *) &InputData_IV_GCM[0], (uint8_t *) InData_IV, InputData_IV_GCM_LEN_BYTES);
831 
832     return FSP_SUCCESS;
833 }
834 
HW_SCE_Aes256GcmDecryptUpdateAADSub(uint32_t * InData_DataA,uint32_t MAX_CNT)835 void HW_SCE_Aes256GcmDecryptUpdateAADSub (uint32_t * InData_DataA, uint32_t MAX_CNT)
836 {
837     FSP_PARAMETER_NOT_USED(MAX_CNT);
838     if (InData_DataA != 0)
839     {
840         memcpy((uint8_t *) &InputData_DataA[0], (uint8_t *) InData_DataA, sizeof(InputData_DataA));
841     }
842 }
843 
HW_SCE_Aes256GcmDecryptUpdateTransitionSub(void)844 void HW_SCE_Aes256GcmDecryptUpdateTransitionSub (void)
845 {
846 }
847 
HW_SCE_Aes256GcmDecryptUpdateSub(uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t MAX_CNT)848 void HW_SCE_Aes256GcmDecryptUpdateSub (uint32_t * InData_Text, uint32_t * OutData_Text, uint32_t MAX_CNT)
849 {
850     FSP_PARAMETER_NOT_USED(InData_Text);
851     FSP_PARAMETER_NOT_USED(OutData_Text);
852     FSP_PARAMETER_NOT_USED(MAX_CNT);
853 }
854 
HW_SCE_Aes256GcmDecryptFinalSub(uint32_t * InData_Text,uint32_t * InData_DataT,uint32_t * InData_DataALen,uint32_t * InData_TextLen,uint32_t * InData_DataTLen,uint32_t * OutData_Text)855 fsp_err_t HW_SCE_Aes256GcmDecryptFinalSub (uint32_t * InData_Text,
856                                            uint32_t * InData_DataT,
857                                            uint32_t * InData_DataALen,
858                                            uint32_t * InData_TextLen,
859                                            uint32_t * InData_DataTLen,
860                                            uint32_t * OutData_Text)
861 {
862     uint8_t   Tag[16];
863     uint8_t   temp;
864     fsp_err_t status;
865     uint8_t   Target_Tag[16] = {0};
866     memcpy(&Target_Tag[0], InData_DataT, (uint8_t) *InData_DataTLen);
867 
868     status = hw_gcm_calculation((uint8_t *) InData_Text,
869                                 (uint8_t *) OutData_Text,
870                                 *InData_TextLen,
871                                 &Tag[0],
872                                 &InputData_IV_GCM[0],
873                                 InputData_IV_GCM_LEN_BYTES,
874                                 InputData_DataA,
875                                 *InData_DataALen);
876     if (status != 0)
877     {
878         return FSP_ERR_CRYPTO_UNKNOWN;
879     }
880 
881     /* Athentication Tag Verification*/
882     if (*InData_DataTLen != 0)
883     {
884         for (uint32_t iLoop = 0; iLoop < (uint8_t) *InData_DataTLen; iLoop++)
885         {
886             temp = Target_Tag[iLoop];
887             if (temp != Tag[iLoop])
888             {
889                 status = FSP_ERR_INVALID_ARGUMENT;
890                 break;
891             }
892         }
893 
894         if (status == FSP_ERR_INVALID_ARGUMENT)
895         {
896             memset(OutData_Text, 0, *InData_TextLen);
897 
898             return FSP_ERR_CRYPTO_UNKNOWN;
899         }
900     }
901 
902     return FSP_SUCCESS;
903 }
904 
HW_SCE_Aes128CcmEncryptInitSub(const uint32_t InData_KeyType[],const uint32_t InData_DataType[],const uint32_t InData_Cmd[],const uint32_t InData_TextLen[],const uint32_t InData_KeyIndex[],const uint32_t InData_IV[],const uint32_t InData_Header[],const uint32_t InData_SeqNum[],const uint32_t Header_Len)905 fsp_err_t HW_SCE_Aes128CcmEncryptInitSub (const uint32_t InData_KeyType[],
906                                           const uint32_t InData_DataType[],
907                                           const uint32_t InData_Cmd[],
908                                           const uint32_t InData_TextLen[],
909                                           const uint32_t InData_KeyIndex[],
910                                           const uint32_t InData_IV[],
911                                           const uint32_t InData_Header[],
912                                           const uint32_t InData_SeqNum[],
913                                           const uint32_t Header_Len)
914 {
915     FSP_PARAMETER_NOT_USED(InData_KeyType);
916     FSP_PARAMETER_NOT_USED(InData_DataType);
917     FSP_PARAMETER_NOT_USED(InData_SeqNum);
918 
919     uint32_t InData_IVLen  = InData_Cmd[0];
920     uint32_t InData_MACLen = InData_Cmd[1];
921 
922     /* Apply key operations */
923     HW_SCE_AesCcmEncryptKeyOperation((uint32_t *) InData_KeyIndex,
924                                      SIZE_AES_128BIT_KEYLEN_BYTES,
925                                      (uint32_t *) InData_IV,
926                                      InData_IVLen);
927 
928     /* Formatting function and counter generation function */
929     HW_SCE_AesCcmEncryptCounterGenerate(*InData_TextLen, Header_Len, InData_MACLen, InData_IVLen);
930 
931     /* Apply formating function with associated data */
932     HW_SCE_AesCcmEncryptInputAssociatedData((uint32_t *) InData_Header, Header_Len);
933 
934     /* Plaintext input initialization */
935     HW_SCE_AesCcmEncryptPlaintextInputInit();
936 
937     return FSP_SUCCESS;
938 }
939 
HW_SCE_Aes192CcmEncryptInitSub(const uint32_t InData_KeyType[],const uint32_t InData_DataType[],const uint32_t InData_Cmd[],const uint32_t InData_TextLen[],const uint32_t InData_KeyIndex[],const uint32_t InData_IV[],const uint32_t InData_Header[],const uint32_t InData_SeqNum[],const uint32_t Header_Len)940 fsp_err_t HW_SCE_Aes192CcmEncryptInitSub (const uint32_t InData_KeyType[],
941                                           const uint32_t InData_DataType[],
942                                           const uint32_t InData_Cmd[],
943                                           const uint32_t InData_TextLen[],
944                                           const uint32_t InData_KeyIndex[],
945                                           const uint32_t InData_IV[],
946                                           const uint32_t InData_Header[],
947                                           const uint32_t InData_SeqNum[],
948                                           const uint32_t Header_Len)
949 {
950     FSP_PARAMETER_NOT_USED(InData_KeyType);
951     FSP_PARAMETER_NOT_USED(InData_DataType);
952     FSP_PARAMETER_NOT_USED(InData_SeqNum);
953 
954     uint32_t InData_IVLen  = InData_Cmd[0];
955     uint32_t InData_MACLen = InData_Cmd[1];
956 
957     /* Apply key operations */
958     HW_SCE_AesCcmEncryptKeyOperation((uint32_t *) InData_KeyIndex,
959                                      SIZE_AES_192BIT_KEYLEN_BYTES,
960                                      (uint32_t *) InData_IV,
961                                      InData_IVLen);
962 
963     /* Formatting function and counter generation function */
964     HW_SCE_AesCcmEncryptCounterGenerate(*InData_TextLen, Header_Len, InData_MACLen, InData_IVLen);
965 
966     /* Apply formating function with associated data */
967     HW_SCE_AesCcmEncryptInputAssociatedData((uint32_t *) InData_Header, Header_Len);
968 
969     /* Plaintext input initialization */
970     HW_SCE_AesCcmEncryptPlaintextInputInit();
971 
972     return FSP_SUCCESS;
973 }
974 
HW_SCE_Aes256CcmEncryptInitSub(const uint32_t InData_KeyType[],const uint32_t InData_DataType[],const uint32_t InData_Cmd[],const uint32_t InData_TextLen[],const uint32_t InData_KeyIndex[],const uint32_t InData_IV[],const uint32_t InData_Header[],const uint32_t InData_SeqNum[],const uint32_t Header_Len)975 fsp_err_t HW_SCE_Aes256CcmEncryptInitSub (const uint32_t InData_KeyType[],
976                                           const uint32_t InData_DataType[],
977                                           const uint32_t InData_Cmd[],
978                                           const uint32_t InData_TextLen[],
979                                           const uint32_t InData_KeyIndex[],
980                                           const uint32_t InData_IV[],
981                                           const uint32_t InData_Header[],
982                                           const uint32_t InData_SeqNum[],
983                                           const uint32_t Header_Len)
984 {
985     FSP_PARAMETER_NOT_USED(InData_KeyType);
986     FSP_PARAMETER_NOT_USED(InData_DataType);
987     FSP_PARAMETER_NOT_USED(InData_SeqNum);
988 
989     uint32_t InData_IVLen  = InData_Cmd[0];
990     uint32_t InData_MACLen = InData_Cmd[1];
991 
992     /* Apply key operations */
993     HW_SCE_AesCcmEncryptKeyOperation((uint32_t *) InData_KeyIndex,
994                                      SIZE_AES_256BIT_KEYLEN_BYTES,
995                                      (uint32_t *) InData_IV,
996                                      InData_IVLen);
997 
998     /* Formatting function and counter generation function */
999     HW_SCE_AesCcmEncryptCounterGenerate(*InData_TextLen, Header_Len, InData_MACLen, InData_IVLen);
1000 
1001     /* Apply formating function with associated data */
1002     HW_SCE_AesCcmEncryptInputAssociatedData((uint32_t *) InData_Header, Header_Len);
1003 
1004     /* Plaintext input initialization */
1005     HW_SCE_AesCcmEncryptPlaintextInputInit();
1006 
1007     return FSP_SUCCESS;
1008 }
1009 
HW_SCE_Aes128CcmEncryptUpdateSub(const uint32_t InData_Text[],uint32_t OutData_Text[],const uint32_t MAX_CNT)1010 void HW_SCE_Aes128CcmEncryptUpdateSub (const uint32_t InData_Text[], uint32_t OutData_Text[], const uint32_t MAX_CNT)
1011 {
1012     hw_aes_ccm_mode_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
1013 }
1014 
HW_SCE_Aes192CcmEncryptUpdateSub(const uint32_t InData_Text[],uint32_t OutData_Text[],const uint32_t MAX_CNT)1015 void HW_SCE_Aes192CcmEncryptUpdateSub (const uint32_t InData_Text[], uint32_t OutData_Text[], const uint32_t MAX_CNT)
1016 {
1017     hw_aes_ccm_mode_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
1018 }
1019 
HW_SCE_Aes256CcmEncryptUpdateSub(const uint32_t InData_Text[],uint32_t OutData_Text[],const uint32_t MAX_CNT)1020 void HW_SCE_Aes256CcmEncryptUpdateSub (const uint32_t InData_Text[], uint32_t OutData_Text[], const uint32_t MAX_CNT)
1021 {
1022     hw_aes_ccm_mode_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
1023 }
1024 
HW_SCE_Aes128CcmEncryptFinalSub(const uint32_t InData_Text[],uint32_t OutData_Text[],uint32_t OutData_MAC[])1025 fsp_err_t HW_SCE_Aes128CcmEncryptFinalSub (const uint32_t InData_Text[], uint32_t OutData_Text[],
1026                                            uint32_t OutData_MAC[])
1027 {
1028     FSP_PARAMETER_NOT_USED(InData_Text);
1029     FSP_PARAMETER_NOT_USED(OutData_Text);
1030 
1031     /* Generate tag */
1032     HW_SCE_AesCcmEncryptGenerateTag(OutData_MAC);
1033 
1034     return FSP_SUCCESS;
1035 }
1036 
HW_SCE_Aes192CcmEncryptFinalSub(const uint32_t InData_Text[],uint32_t OutData_Text[],uint32_t OutData_MAC[])1037 fsp_err_t HW_SCE_Aes192CcmEncryptFinalSub (const uint32_t InData_Text[], uint32_t OutData_Text[],
1038                                            uint32_t OutData_MAC[])
1039 {
1040     FSP_PARAMETER_NOT_USED(InData_Text);
1041     FSP_PARAMETER_NOT_USED(OutData_Text);
1042 
1043     /* Generate tag */
1044     HW_SCE_AesCcmEncryptGenerateTag(OutData_MAC);
1045 
1046     return FSP_SUCCESS;
1047 }
1048 
HW_SCE_Aes256CcmEncryptFinalSub(const uint32_t InData_Text[],uint32_t OutData_Text[],uint32_t OutData_MAC[])1049 fsp_err_t HW_SCE_Aes256CcmEncryptFinalSub (const uint32_t InData_Text[], uint32_t OutData_Text[],
1050                                            uint32_t OutData_MAC[])
1051 {
1052     FSP_PARAMETER_NOT_USED(InData_Text);
1053     FSP_PARAMETER_NOT_USED(OutData_Text);
1054 
1055     /* Generate tag */
1056     HW_SCE_AesCcmEncryptGenerateTag(OutData_MAC);
1057 
1058     return FSP_SUCCESS;
1059 }
1060 
HW_SCE_Aes128CcmDecryptInitSub(const uint32_t InData_KeyType[],const uint32_t InData_DataType[],const uint32_t InData_Cmd[],const uint32_t InData_TextLen[],const uint32_t InData_MACLength[],const uint32_t InData_KeyIndex[],const uint32_t InData_IV[],const uint32_t InData_Header[],const uint32_t InData_SeqNum[],const uint32_t Header_Len)1061 fsp_err_t HW_SCE_Aes128CcmDecryptInitSub (const uint32_t InData_KeyType[],
1062                                           const uint32_t InData_DataType[],
1063                                           const uint32_t InData_Cmd[],
1064                                           const uint32_t InData_TextLen[],
1065                                           const uint32_t InData_MACLength[],
1066                                           const uint32_t InData_KeyIndex[],
1067                                           const uint32_t InData_IV[],
1068                                           const uint32_t InData_Header[],
1069                                           const uint32_t InData_SeqNum[],
1070                                           const uint32_t Header_Len)
1071 {
1072     FSP_PARAMETER_NOT_USED(InData_KeyType);
1073     FSP_PARAMETER_NOT_USED(InData_DataType);
1074     FSP_PARAMETER_NOT_USED(InData_Cmd);
1075     FSP_PARAMETER_NOT_USED(InData_SeqNum);
1076     uint32_t InData_IVLen = InData_Cmd[0];
1077 
1078     if (*InData_DataType == 0)
1079     {
1080         FSP_PARAMETER_NOT_USED(InData_Header);
1081 
1082         /* Apply key operations */
1083         uint8_t A_InData_IV[SIZE_AES_BLOCK_BYTES] = {0};
1084         memcpy(&A_InData_IV[SIZE_AES_BLOCK_BYTES - InData_IVLen], InData_IV, InData_IVLen);
1085         HW_SCE_AesCcmDecryptKeyOperation((uint32_t *) InData_KeyIndex,
1086                                          *InData_KeyType,
1087                                          (uint32_t *) A_InData_IV,
1088                                          SIZE_AES_128BIT_KEYLEN_BYTES);
1089 
1090         /* Formatting function and counter generation function */
1091         HW_SCE_AesCcmDecryptCounterGenerate((*InData_TextLen - *InData_MACLength),
1092                                             Header_Len,
1093                                             *InData_MACLength,
1094                                             InData_IVLen);
1095     }
1096     else
1097     {
1098         FSP_PARAMETER_NOT_USED(InData_TextLen);
1099         FSP_PARAMETER_NOT_USED(InData_MACLength);
1100         FSP_PARAMETER_NOT_USED(InData_KeyIndex);
1101         FSP_PARAMETER_NOT_USED(InData_IV);
1102 
1103         /* Apply formating function with associated data */
1104         HW_SCE_AesCcmDecryptInputAssociatedData((uint32_t *) InData_Header, Header_Len);
1105     }
1106 
1107     return FSP_SUCCESS;
1108 }
1109 
HW_SCE_Aes192CcmDecryptInitSub(const uint32_t InData_KeyType[],const uint32_t InData_DataType[],const uint32_t InData_Cmd[],const uint32_t InData_TextLen[],const uint32_t InData_MACLength[],const uint32_t InData_KeyIndex[],const uint32_t InData_IV[],const uint32_t InData_Header[],const uint32_t InData_SeqNum[],const uint32_t Header_Len)1110 fsp_err_t HW_SCE_Aes192CcmDecryptInitSub (const uint32_t InData_KeyType[],
1111                                           const uint32_t InData_DataType[],
1112                                           const uint32_t InData_Cmd[],
1113                                           const uint32_t InData_TextLen[],
1114                                           const uint32_t InData_MACLength[],
1115                                           const uint32_t InData_KeyIndex[],
1116                                           const uint32_t InData_IV[],
1117                                           const uint32_t InData_Header[],
1118                                           const uint32_t InData_SeqNum[],
1119                                           const uint32_t Header_Len)
1120 {
1121     FSP_PARAMETER_NOT_USED(InData_KeyType);
1122     FSP_PARAMETER_NOT_USED(InData_DataType);
1123     FSP_PARAMETER_NOT_USED(InData_Cmd);
1124     FSP_PARAMETER_NOT_USED(InData_SeqNum);
1125     uint32_t InData_IVLen = InData_Cmd[0];
1126 
1127     if (*InData_DataType == 0)
1128     {
1129         FSP_PARAMETER_NOT_USED(InData_Header);
1130 
1131         /* Apply key operations */
1132         uint8_t A_InData_IV[SIZE_AES_BLOCK_BYTES] = {0};
1133         memcpy(&A_InData_IV[SIZE_AES_BLOCK_BYTES - InData_IVLen], InData_IV, InData_IVLen);
1134         HW_SCE_AesCcmDecryptKeyOperation((uint32_t *) InData_KeyIndex,
1135                                          *InData_KeyType,
1136                                          (uint32_t *) A_InData_IV,
1137                                          SIZE_AES_128BIT_KEYLEN_BYTES);
1138 
1139         /* Formatting function and counter generation function */
1140         HW_SCE_AesCcmDecryptCounterGenerate((*InData_TextLen - *InData_MACLength),
1141                                             Header_Len,
1142                                             *InData_MACLength,
1143                                             InData_IVLen);
1144     }
1145     else
1146     {
1147         FSP_PARAMETER_NOT_USED(InData_TextLen);
1148         FSP_PARAMETER_NOT_USED(InData_MACLength);
1149         FSP_PARAMETER_NOT_USED(InData_KeyIndex);
1150         FSP_PARAMETER_NOT_USED(InData_IV);
1151 
1152         /* Apply formating function with associated data */
1153         HW_SCE_AesCcmDecryptInputAssociatedData((uint32_t *) InData_Header, Header_Len);
1154     }
1155 
1156     return FSP_SUCCESS;
1157 }
1158 
HW_SCE_Aes256CcmDecryptInitSub(const uint32_t InData_KeyType[],const uint32_t InData_DataType[],const uint32_t InData_Cmd[],const uint32_t InData_TextLen[],const uint32_t InData_MACLength[],const uint32_t InData_KeyIndex[],const uint32_t InData_IV[],const uint32_t InData_Header[],const uint32_t InData_SeqNum[],const uint32_t Header_Len)1159 fsp_err_t HW_SCE_Aes256CcmDecryptInitSub (const uint32_t InData_KeyType[],
1160                                           const uint32_t InData_DataType[],
1161                                           const uint32_t InData_Cmd[],
1162                                           const uint32_t InData_TextLen[],
1163                                           const uint32_t InData_MACLength[],
1164                                           const uint32_t InData_KeyIndex[],
1165                                           const uint32_t InData_IV[],
1166                                           const uint32_t InData_Header[],
1167                                           const uint32_t InData_SeqNum[],
1168                                           const uint32_t Header_Len)
1169 {
1170     FSP_PARAMETER_NOT_USED(InData_KeyType);
1171     FSP_PARAMETER_NOT_USED(InData_DataType);
1172     FSP_PARAMETER_NOT_USED(InData_Cmd);
1173     FSP_PARAMETER_NOT_USED(InData_SeqNum);
1174     uint32_t InData_IVLen = InData_Cmd[0];
1175 
1176     if (*InData_DataType == 0)
1177     {
1178         FSP_PARAMETER_NOT_USED(InData_Header);
1179 
1180         /* Apply key operations */
1181         uint8_t A_InData_IV[SIZE_AES_BLOCK_BYTES] = {0};
1182         memcpy(&A_InData_IV[SIZE_AES_BLOCK_BYTES - InData_IVLen], InData_IV, InData_IVLen);
1183         HW_SCE_AesCcmDecryptKeyOperation((uint32_t *) InData_KeyIndex,
1184                                          InData_KeyType[0],
1185                                          (uint32_t *) A_InData_IV,
1186                                          SIZE_AES_128BIT_KEYLEN_BYTES);
1187 
1188         /* Formatting function and counter generation function */
1189         HW_SCE_AesCcmDecryptCounterGenerate((*InData_TextLen - *InData_MACLength),
1190                                             Header_Len,
1191                                             *InData_MACLength,
1192                                             InData_IVLen);
1193     }
1194     else
1195     {
1196         FSP_PARAMETER_NOT_USED(InData_TextLen);
1197         FSP_PARAMETER_NOT_USED(InData_MACLength);
1198         FSP_PARAMETER_NOT_USED(InData_KeyIndex);
1199         FSP_PARAMETER_NOT_USED(InData_IV);
1200 
1201         /* Apply formating function with associated data */
1202         HW_SCE_AesCcmDecryptInputAssociatedData((uint32_t *) InData_Header, Header_Len);
1203     }
1204 
1205     return FSP_SUCCESS;
1206 }
1207 
HW_SCE_Aes128CcmDecryptUpdateSub(const uint32_t InData_Text[],uint32_t OutData_Text[],const uint32_t MAX_CNT)1208 void HW_SCE_Aes128CcmDecryptUpdateSub (const uint32_t InData_Text[], uint32_t OutData_Text[], const uint32_t MAX_CNT)
1209 {
1210     /* CTR decryption */
1211     hw_aes_ccm_decrypt_init(SCE_AES_IN_DATA_CMD_CCM_DEC_CTR_DECRYPT);
1212     hw_aes_ccm_mode_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, MAX_CNT / 4);
1213 }
1214 
HW_SCE_Aes192CcmDecryptUpdateSub(const uint32_t InData_Text[],uint32_t OutData_Text[],const uint32_t MAX_CNT)1215 void HW_SCE_Aes192CcmDecryptUpdateSub (const uint32_t InData_Text[], uint32_t OutData_Text[], const uint32_t MAX_CNT)
1216 {
1217     HW_SCE_Aes128CcmDecryptUpdateSub(InData_Text, OutData_Text, MAX_CNT);
1218 }
1219 
HW_SCE_Aes256CcmDecryptUpdateSub(const uint32_t InData_Text[],uint32_t OutData_Text[],const uint32_t MAX_CNT)1220 void HW_SCE_Aes256CcmDecryptUpdateSub (const uint32_t InData_Text[], uint32_t OutData_Text[], const uint32_t MAX_CNT)
1221 {
1222     HW_SCE_Aes128CcmDecryptUpdateSub(InData_Text, OutData_Text, MAX_CNT);
1223 }
1224 
HW_SCE_Aes128CcmDecryptFinalSub(const uint32_t InData_Text[],const uint32_t InData_TextLen[],const uint32_t InData_MAC[],const uint32_t InData_MACLength[],uint32_t OutData_Text[])1225 fsp_err_t HW_SCE_Aes128CcmDecryptFinalSub (const uint32_t InData_Text[],
1226                                            const uint32_t InData_TextLen[],
1227                                            const uint32_t InData_MAC[],
1228                                            const uint32_t InData_MACLength[],
1229                                            uint32_t       OutData_Text[])
1230 {
1231     fsp_err_t err           = FSP_SUCCESS;
1232     bool      mac_unaligned = !HW_32BIT_ALIGNED((uint32_t) &InData_Text[0]);
1233     bool      dst_unaligned = !HW_32BIT_ALIGNED((uint32_t) &OutData_Text[0]);
1234     uint32_t  payload_len   = *InData_TextLen - *InData_MACLength;
1235     uint32_t  block_num     = HW_AES_DATA_FIT_TO_BLOCK_SIZE(payload_len) /
1236                               SIZE_AES_BLOCK_BYTES;
1237     uint32_t payload_remain                   = HW_AES_DATA_GET_LAST_REMAINS(payload_len);
1238     uint8_t  Yr[SIZE_AES_BLOCK_BYTES]         = {0};
1239     uint8_t  Tag[SIZE_AES_BLOCK_BYTES]        = {0};
1240     uint8_t  LSB_C_Tlen[SIZE_AES_BLOCK_BYTES] = {0};
1241 
1242     FSP_PARAMETER_NOT_USED(InData_Text);
1243 
1244     /* Formatting function for payload */
1245     /* SCE AES hardware configuration for formatting function for payload */
1246     hw_aes_ccm_decrypt_init(SCE_AES_IN_DATA_CMD_CCM_DEC_FORMAT_PAYLOAD);
1247     if ((true == dst_unaligned) || (true == mac_unaligned))
1248     {
1249         uint32_t  data_tmp[SIZE_AES_BLOCK_BYTES / 4];
1250         uint8_t * p_buf_in   = (uint8_t *) OutData_Text;
1251         uint8_t * p_local_in = (uint8_t *) data_tmp;
1252         uint32_t  index;
1253 
1254         for (index = 0; index < block_num; index++)
1255         {
1256             memset(p_local_in, 0, SIZE_AES_BLOCK_BYTES);
1257             memcpy(p_local_in, p_buf_in, SIZE_AES_BLOCK_BYTES);
1258             hw_aes_ccm_mode_start(p_local_in, NULL, SIZE_AES_BLOCK_BYTES / SIZE_AES_BLOCK_BYTES);
1259             p_buf_in += SIZE_AES_BLOCK_BYTES;
1260         }
1261 
1262         if (payload_remain)
1263         {
1264             p_local_in = (uint8_t *) data_tmp;
1265             memset(p_local_in, 0, SIZE_AES_BLOCK_BYTES);
1266             memcpy(p_local_in, p_buf_in, payload_remain);
1267             hw_aes_ccm_mode_start(p_local_in, NULL, SIZE_AES_BLOCK_BYTES / SIZE_AES_BLOCK_BYTES);
1268         }
1269 
1270         hw_aes_ccm_mode_start(NULL, &Yr[0], SIZE_AES_BLOCK_BYTES / SIZE_AES_BLOCK_BYTES);
1271 
1272         if (true == mac_unaligned)
1273         {
1274             p_local_in = (uint8_t *) data_tmp;
1275             memset(p_local_in, 0, SIZE_AES_BLOCK_BYTES);
1276             memcpy(p_local_in, (uint8_t *) InData_MAC, *InData_MACLength);
1277             memcpy(&LSB_C_Tlen[0], p_local_in, *InData_MACLength);
1278         }
1279         else
1280         {
1281             memcpy(&LSB_C_Tlen[0], InData_MAC, *InData_MACLength);
1282         }
1283     }
1284     else
1285     {
1286         /* Out is uint32_t aligned */
1287         uint8_t * p_buf_in = (uint8_t *) OutData_Text;
1288         if (block_num)
1289         {
1290             hw_aes_ccm_mode_start((uint8_t *) p_buf_in, (uint8_t *) NULL, block_num);
1291             p_buf_in += block_num * SIZE_AES_BLOCK_BYTES;
1292         }
1293 
1294         if (payload_remain)
1295         {
1296             uint32_t InOut_DataTmp[SIZE_AES_BLOCK_BYTES / sizeof(uint32_t)];
1297             memset(InOut_DataTmp, 0, SIZE_AES_BLOCK_BYTES);
1298             memcpy(InOut_DataTmp, p_buf_in, payload_remain);
1299             hw_aes_ccm_mode_start((uint8_t *) InOut_DataTmp,
1300                                   (uint8_t *) NULL,
1301                                   SIZE_AES_BLOCK_BYTES / SIZE_AES_BLOCK_BYTES);
1302         }
1303 
1304         hw_aes_ccm_mode_start(NULL, &Yr[0], SIZE_AES_BLOCK_BYTES / SIZE_AES_BLOCK_BYTES);
1305 
1306         memcpy(&LSB_C_Tlen[0], InData_MAC, *InData_MACLength);
1307     }
1308 
1309     /* SCE AES hardware configuration for TAG generation */
1310     hw_aes_ccm_decrypt_init(SCE_AES_IN_DATA_CMD_CCM_DEC_GENERATE_TAG);
1311     hw_aes_ccm_mode_start((uint8_t *) &LSB_C_Tlen[0], (uint8_t *) &Tag[0], SIZE_AES_BLOCK_BYTES / SIZE_AES_BLOCK_BYTES);
1312 
1313     if (0 != memcmp(Tag, Yr, *InData_MACLength))
1314     {
1315         err = FSP_ERR_CRYPTO_SCE_VERIFY_FAIL;
1316     }
1317 
1318     return err;
1319 }
1320 
HW_SCE_Aes192CcmDecryptFinalSub(const uint32_t InData_Text[],const uint32_t InData_TextLen[],const uint32_t InData_MAC[],const uint32_t InData_MACLength[],uint32_t OutData_Text[])1321 fsp_err_t HW_SCE_Aes192CcmDecryptFinalSub (const uint32_t InData_Text[],
1322                                            const uint32_t InData_TextLen[],
1323                                            const uint32_t InData_MAC[],
1324                                            const uint32_t InData_MACLength[],
1325                                            uint32_t       OutData_Text[])
1326 {
1327     fsp_err_t err = FSP_SUCCESS;
1328     err = HW_SCE_Aes128CcmDecryptFinalSub(InData_Text, InData_TextLen, InData_MAC, InData_MACLength, OutData_Text);
1329 
1330     return err;
1331 }
1332 
HW_SCE_Aes256CcmDecryptFinalSub(const uint32_t InData_Text[],const uint32_t InData_TextLen[],const uint32_t InData_MAC[],const uint32_t InData_MACLength[],uint32_t OutData_Text[])1333 fsp_err_t HW_SCE_Aes256CcmDecryptFinalSub (const uint32_t InData_Text[],
1334                                            const uint32_t InData_TextLen[],
1335                                            const uint32_t InData_MAC[],
1336                                            const uint32_t InData_MACLength[],
1337                                            uint32_t       OutData_Text[])
1338 {
1339     fsp_err_t err = FSP_SUCCESS;
1340     err = HW_SCE_Aes128CcmDecryptFinalSub(InData_Text, InData_TextLen, InData_MAC, InData_MACLength, OutData_Text);
1341 
1342     return err;
1343 }
1344