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
9 ***********************************************************************************************************************/
10
11 #include "bsp_api.h"
12 #include "hw_sce_aes_private.h"
13 #include "hw_sce_ra_private.h"
14
15 /***********************************************************************************************************************
16 * Global variables and functions
17 ***********************************************************************************************************************/
18
HW_SCE_AES_128CtrEncrypt(const uint32_t * InData_Key,const uint32_t * InData_IV,const uint32_t num_words,const uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t * OutData_IV)19 fsp_err_t HW_SCE_AES_128CtrEncrypt (const uint32_t * InData_Key,
20 const uint32_t * InData_IV,
21 const uint32_t num_words,
22 const uint32_t * InData_Text,
23 uint32_t * OutData_Text,
24 uint32_t * OutData_IV)
25 {
26 fsp_err_t iret = FSP_SUCCESS;
27 FSP_PARAMETER_NOT_USED(OutData_IV);
28 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
29 if ((InData_Key == (const uint32_t *) 0) ||
30 ((InData_IV == (const uint32_t *) 0) || (InData_Text == (const uint32_t *) 0)) ||
31 (OutData_Text == (const uint32_t *) 0) || (num_words == 0))
32 {
33 iret = FSP_ERR_INVALID_ARGUMENT;
34 }
35 #endif
36
37 R_AES_B->AESCNTL = R_AES_AESCNTL_CTR_128_ENC;
38 hw_aes_set_key((uint8_t *) InData_Key, SIZE_AES_128BIT_KEYLEN_BYTES);
39
40 if (FSP_SUCCESS == iret)
41 {
42 hw_aes_set_iv((uint8_t *) InData_IV);
43 R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
44 hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, num_words);
45 }
46
47 return iret;
48 }
49
HW_SCE_AES_192CtrEncrypt(const uint32_t * InData_Key,const uint32_t * InData_IV,const uint32_t num_words,const uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t * OutData_IV)50 fsp_err_t HW_SCE_AES_192CtrEncrypt (const uint32_t * InData_Key,
51 const uint32_t * InData_IV,
52 const uint32_t num_words,
53 const uint32_t * InData_Text,
54 uint32_t * OutData_Text,
55 uint32_t * OutData_IV)
56 {
57 fsp_err_t iret = FSP_SUCCESS;
58 FSP_PARAMETER_NOT_USED(OutData_IV);
59 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
60 if ((InData_Key == (const uint32_t *) 0) ||
61 ((InData_IV == (const uint32_t *) 0) || (InData_Text == (const uint32_t *) 0)) ||
62 (OutData_Text == (const uint32_t *) 0) || (num_words == 0))
63 {
64 iret = FSP_ERR_INVALID_ARGUMENT;
65 }
66 #endif
67
68 R_AES_B->AESCNTL = R_AES_AESCNTL_CTR_192_ENC;
69 hw_aes_set_key((uint8_t *) InData_Key, SIZE_AES_192BIT_KEYLEN_BYTES);
70
71 if (FSP_SUCCESS == iret)
72 {
73 hw_aes_set_iv((uint8_t *) InData_IV);
74 R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
75 hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, num_words);
76 }
77
78 return iret;
79 }
80
HW_SCE_AES_256CtrEncrypt(const uint32_t * InData_Key,const uint32_t * InData_IV,const uint32_t num_words,const uint32_t * InData_Text,uint32_t * OutData_Text,uint32_t * OutData_IV)81 fsp_err_t HW_SCE_AES_256CtrEncrypt (const uint32_t * InData_Key,
82 const uint32_t * InData_IV,
83 const uint32_t num_words,
84 const uint32_t * InData_Text,
85 uint32_t * OutData_Text,
86 uint32_t * OutData_IV)
87 {
88 fsp_err_t iret = FSP_SUCCESS;
89 FSP_PARAMETER_NOT_USED(OutData_IV);
90 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
91 if ((InData_Key == (const uint32_t *) 0) ||
92 ((InData_IV == (const uint32_t *) 0) || (InData_Text == (const uint32_t *) 0)) ||
93 (OutData_Text == (const uint32_t *) 0) || (num_words == 0))
94 {
95 iret = FSP_ERR_INVALID_ARGUMENT;
96 }
97 #endif
98
99 R_AES_B->AESCNTL = R_AES_AESCNTL_CTR_256_ENC;
100 hw_aes_set_key((uint8_t *) InData_Key, SIZE_AES_256BIT_KEYLEN_BYTES);
101
102 if (FSP_SUCCESS == iret)
103 {
104 hw_aes_set_iv((uint8_t *) InData_IV);
105 R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
106 hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, num_words);
107 }
108
109 return iret;
110 }
111
HW_SCE_AES_128CtrDecrypt(const uint32_t * InData_Key,const uint32_t * InData_IV,const uint32_t num_words,const uint32_t * InData_Text,uint32_t * OutData_Text)112 fsp_err_t HW_SCE_AES_128CtrDecrypt (const uint32_t * InData_Key,
113 const uint32_t * InData_IV,
114 const uint32_t num_words,
115 const uint32_t * InData_Text,
116 uint32_t * OutData_Text)
117 {
118 fsp_err_t iret = FSP_SUCCESS;
119 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
120 if ((InData_Key == (const uint32_t *) 0) ||
121 ((InData_IV == (const uint32_t *) 0) || (InData_Text == (const uint32_t *) 0)) ||
122 (OutData_Text == (const uint32_t *) 0))
123 {
124 iret = FSP_ERR_INVALID_ARGUMENT;
125 }
126 #endif
127
128 R_AES_B->AESCNTL = R_AES_AESCNTL_CTR_128_DEC;
129 hw_aes_set_key((uint8_t *) InData_Key, SIZE_AES_128BIT_KEYLEN_BYTES);
130
131 if (FSP_SUCCESS == iret)
132 {
133 hw_aes_set_iv((uint8_t *) InData_IV);
134 R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
135 hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, num_words);
136 }
137
138 return iret;
139 }
140
HW_SCE_AES_192CtrDecrypt(const uint32_t * InData_Key,const uint32_t * InData_IV,const uint32_t num_words,const uint32_t * InData_Text,uint32_t * OutData_Text)141 fsp_err_t HW_SCE_AES_192CtrDecrypt (const uint32_t * InData_Key,
142 const uint32_t * InData_IV,
143 const uint32_t num_words,
144 const uint32_t * InData_Text,
145 uint32_t * OutData_Text)
146 {
147 fsp_err_t iret = FSP_SUCCESS;
148 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
149 if ((InData_Key == (const uint32_t *) 0) ||
150 ((InData_IV == (const uint32_t *) 0) || (InData_Text == (const uint32_t *) 0)) ||
151 (OutData_Text == (const uint32_t *) 0))
152 {
153 iret = FSP_ERR_INVALID_ARGUMENT;
154 }
155 #endif
156
157 R_AES_B->AESCNTL = R_AES_AESCNTL_CTR_192_DEC;
158 hw_aes_set_key((uint8_t *) InData_Key, SIZE_AES_192BIT_KEYLEN_BYTES);
159
160 if (FSP_SUCCESS == iret)
161 {
162 hw_aes_set_iv((uint8_t *) InData_IV);
163 R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
164 hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, num_words);
165 }
166
167 return iret;
168 }
169
HW_SCE_AES_256CtrDecrypt(const uint32_t * InData_Key,const uint32_t * InData_IV,const uint32_t num_words,const uint32_t * InData_Text,uint32_t * OutData_Text)170 fsp_err_t HW_SCE_AES_256CtrDecrypt (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 {
176 fsp_err_t iret = FSP_SUCCESS;
177 #if RM_TINYCRYPT_PORT_CFG_PARAM_CHECKING_ENABLE
178 if ((InData_Key == (const uint32_t *) 0) ||
179 ((InData_IV == (const uint32_t *) 0) || (InData_Text == (const uint32_t *) 0)) ||
180 (OutData_Text == (const uint32_t *) 0))
181 {
182 iret = FSP_ERR_INVALID_ARGUMENT;
183 }
184 #endif
185
186 R_AES_B->AESCNTL = R_AES_AESCNTL_CTR_256_DEC;
187 hw_aes_set_key((uint8_t *) InData_Key, SIZE_AES_256BIT_KEYLEN_BYTES);
188
189 if (FSP_SUCCESS == iret)
190 {
191 hw_aes_set_iv((uint8_t *) InData_IV);
192 R_AES_B->AESDCNTL = R_AES_AESDCNTL_BIT_2_3_MODE_2;
193 hw_aes_start((uint8_t *) InData_Text, (uint8_t *) OutData_Text, num_words);
194 }
195
196 return iret;
197 }
198