1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifdef HKS_CONFIG_FILE
17 #include HKS_CONFIG_FILE
18 #else
19 #include "hks_config.h"
20 #endif
21
22 #include "huks_access.h"
23
24 #include "hks_cfi.h"
25 #include "huks_core_hal.h"
26
27 #include "hks_log.h"
28 #include "hks_mem.h"
29 #include "hks_template.h"
30
31 static struct HuksHdi *g_hksHalDevicePtr = NULL;
32
33 #ifndef _CUT_AUTHENTICATE_
ENABLE_CFI(int32_t HuksAccessModuleInit (void))34 ENABLE_CFI(int32_t HuksAccessModuleInit(void))
35 {
36 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
37
38 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiModuleInit, HKS_ERROR_NULL_POINTER,
39 "Module Init function is null pointer")
40
41 return g_hksHalDevicePtr->HuksHdiModuleInit();
42 }
43
ENABLE_CFI(int32_t HuksAccessModuleDestroy (void))44 ENABLE_CFI(int32_t HuksAccessModuleDestroy(void))
45 {
46 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
47
48 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiModuleDestroy, HKS_ERROR_NULL_POINTER,
49 "Module Destroy function is null pointer")
50
51 return g_hksHalDevicePtr->HuksHdiModuleDestroy();
52 }
53
ENABLE_CFI(int32_t HuksAccessRefresh (void))54 ENABLE_CFI(int32_t HuksAccessRefresh(void))
55 {
56 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
57
58 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiRefresh, HKS_ERROR_NULL_POINTER,
59 "Refresh function is null pointer")
60
61 return g_hksHalDevicePtr->HuksHdiRefresh();
62 }
63
ENABLE_CFI(int32_t HuksAccessGenerateKey (const struct HksBlob * keyAlias,const struct HksParamSet * paramSetIn,const struct HksBlob * keyIn,struct HksBlob * keyOut))64 ENABLE_CFI(int32_t HuksAccessGenerateKey(const struct HksBlob *keyAlias, const struct HksParamSet *paramSetIn,
65 const struct HksBlob *keyIn, struct HksBlob *keyOut))
66 {
67 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
68
69 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiGenerateKey, HKS_ERROR_NULL_POINTER,
70 "GenerateKey function is null pointer")
71
72 return g_hksHalDevicePtr->HuksHdiGenerateKey(keyAlias, paramSetIn, keyIn, keyOut);
73 }
74
ENABLE_CFI(int32_t HuksAccessImportKey (const struct HksBlob * keyAlias,const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * keyOut))75 ENABLE_CFI(int32_t HuksAccessImportKey(const struct HksBlob *keyAlias, const struct HksBlob *key,
76 const struct HksParamSet *paramSet, struct HksBlob *keyOut))
77 {
78 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
79
80 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiImportKey, HKS_ERROR_NULL_POINTER,
81 "ImportKey function is null pointer")
82
83 return g_hksHalDevicePtr->HuksHdiImportKey(keyAlias, key, paramSet, keyOut);
84 }
85
ENABLE_CFI(int32_t HuksAccessImportWrappedKey (const struct HksBlob * wrappingKeyAlias,const struct HksBlob * key,const struct HksBlob * wrappedKeyData,const struct HksParamSet * paramSet,struct HksBlob * keyOut))86 ENABLE_CFI(int32_t HuksAccessImportWrappedKey(const struct HksBlob *wrappingKeyAlias, const struct HksBlob *key,
87 const struct HksBlob *wrappedKeyData, const struct HksParamSet *paramSet, struct HksBlob *keyOut))
88 {
89 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
90
91 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiImportWrappedKey, HKS_ERROR_NULL_POINTER,
92 "ImportWrappedKey function is null pointer")
93
94 return g_hksHalDevicePtr->HuksHdiImportWrappedKey(wrappingKeyAlias, key, wrappedKeyData, paramSet, keyOut);
95 }
96
ENABLE_CFI(int32_t HuksAccessExportPublicKey (const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * keyOut))97 ENABLE_CFI(int32_t HuksAccessExportPublicKey(const struct HksBlob *key, const struct HksParamSet *paramSet,
98 struct HksBlob *keyOut))
99 {
100 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
101
102 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiExportPublicKey, HKS_ERROR_NULL_POINTER,
103 "ExportPublicKey function is null pointer")
104
105 return g_hksHalDevicePtr->HuksHdiExportPublicKey(key, paramSet, keyOut);
106 }
107
ENABLE_CFI(int32_t HuksAccessInit (const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * handle,struct HksBlob * token))108 ENABLE_CFI(int32_t HuksAccessInit(const struct HksBlob *key, const struct HksParamSet *paramSet,
109 struct HksBlob *handle, struct HksBlob *token))
110 {
111 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
112
113 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiInit, HKS_ERROR_NULL_POINTER,
114 "Init function is null pointer")
115
116 return g_hksHalDevicePtr->HuksHdiInit(key, paramSet, handle, token);
117 }
118
ENABLE_CFI(int32_t HuksAccessUpdate (const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData))119 ENABLE_CFI(int32_t HuksAccessUpdate(const struct HksBlob *handle, const struct HksParamSet *paramSet,
120 const struct HksBlob *inData, struct HksBlob *outData))
121 {
122 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
123
124 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiUpdate, HKS_ERROR_NULL_POINTER,
125 "Update function is null pointer")
126
127 return g_hksHalDevicePtr->HuksHdiUpdate(handle, paramSet, inData, outData);
128 }
129
ENABLE_CFI(int32_t HuksAccessFinish (const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData))130 ENABLE_CFI(int32_t HuksAccessFinish(const struct HksBlob *handle, const struct HksParamSet *paramSet,
131 const struct HksBlob *inData, struct HksBlob *outData))
132 {
133 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
134
135 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiFinish, HKS_ERROR_NULL_POINTER,
136 "Finish function is null pointer")
137
138 return g_hksHalDevicePtr->HuksHdiFinish(handle, paramSet, inData, outData);
139 }
140
ENABLE_CFI(int32_t HuksAccessAbort (const struct HksBlob * handle,const struct HksParamSet * paramSet))141 ENABLE_CFI(int32_t HuksAccessAbort(const struct HksBlob *handle, const struct HksParamSet *paramSet))
142 {
143 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
144
145 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiAbort, HKS_ERROR_NULL_POINTER,
146 "Abort function is null pointer")
147
148 return g_hksHalDevicePtr->HuksHdiAbort(handle, paramSet);
149 }
150
ENABLE_CFI(int32_t HuksAccessGetKeyProperties (const struct HksParamSet * paramSet,const struct HksBlob * key))151 ENABLE_CFI(int32_t HuksAccessGetKeyProperties(const struct HksParamSet *paramSet, const struct HksBlob *key))
152 {
153 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
154
155 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiGetKeyProperties, HKS_ERROR_NULL_POINTER,
156 "GetKeyProperties function is null pointer")
157
158 return g_hksHalDevicePtr->HuksHdiGetKeyProperties(paramSet, key);
159 }
160
ENABLE_CFI(int32_t HuksAccessGetAbility (int funcType))161 ENABLE_CFI(int32_t HuksAccessGetAbility(int funcType))
162 {
163 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
164
165 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiGetAbility, HKS_ERROR_NULL_POINTER,
166 "GetAbility function is null pointer")
167
168 return g_hksHalDevicePtr->HuksHdiGetAbility(funcType);
169 }
170
ENABLE_CFI(int32_t HuksAccessGetHardwareInfo (void))171 ENABLE_CFI(int32_t HuksAccessGetHardwareInfo(void))
172 {
173 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
174
175 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiGetHardwareInfo, HKS_ERROR_NULL_POINTER,
176 "GetHardwareInfo function is null pointer")
177
178 return g_hksHalDevicePtr->HuksHdiGetHardwareInfo();
179 }
180
ENABLE_CFI(int32_t HuksAccessSign (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,struct HksBlob * signature))181 ENABLE_CFI(int32_t HuksAccessSign(const struct HksBlob *key, const struct HksParamSet *paramSet,
182 const struct HksBlob *srcData, struct HksBlob *signature))
183 {
184 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
185
186 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiSign, HKS_ERROR_NULL_POINTER,
187 "Sign function is null pointer")
188
189 return g_hksHalDevicePtr->HuksHdiSign(key, paramSet, srcData, signature);
190 }
191
ENABLE_CFI(int32_t HuksAccessVerify (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,const struct HksBlob * signature))192 ENABLE_CFI(int32_t HuksAccessVerify(const struct HksBlob *key, const struct HksParamSet *paramSet,
193 const struct HksBlob *srcData, const struct HksBlob *signature))
194 {
195 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
196
197 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiVerify, HKS_ERROR_NULL_POINTER,
198 "Verify function is null pointer")
199
200 return g_hksHalDevicePtr->HuksHdiVerify(key, paramSet, srcData, signature);
201 }
202
ENABLE_CFI(int32_t HuksAccessEncrypt (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * plainText,struct HksBlob * cipherText))203 ENABLE_CFI(int32_t HuksAccessEncrypt(const struct HksBlob *key, const struct HksParamSet *paramSet,
204 const struct HksBlob *plainText, struct HksBlob *cipherText))
205 {
206 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
207
208 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiEncrypt, HKS_ERROR_NULL_POINTER,
209 "Encrypt function is null pointer")
210
211 return g_hksHalDevicePtr->HuksHdiEncrypt(key, paramSet, plainText, cipherText);
212 }
213
ENABLE_CFI(int32_t HuksAccessDecrypt (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * cipherText,struct HksBlob * plainText))214 ENABLE_CFI(int32_t HuksAccessDecrypt(const struct HksBlob *key, const struct HksParamSet *paramSet,
215 const struct HksBlob *cipherText, struct HksBlob *plainText))
216 {
217 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
218
219 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiDecrypt, HKS_ERROR_NULL_POINTER,
220 "Decrypt function is null pointer")
221
222 return g_hksHalDevicePtr->HuksHdiDecrypt(key, paramSet, cipherText, plainText);
223 }
224
ENABLE_CFI(int32_t HuksAccessAgreeKey (const struct HksParamSet * paramSet,const struct HksBlob * privateKey,const struct HksBlob * peerPublicKey,struct HksBlob * agreedKey))225 ENABLE_CFI(int32_t HuksAccessAgreeKey(const struct HksParamSet *paramSet, const struct HksBlob *privateKey,
226 const struct HksBlob *peerPublicKey, struct HksBlob *agreedKey))
227 {
228 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
229
230 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiAgreeKey, HKS_ERROR_NULL_POINTER,
231 "AgreeKey function is null pointer")
232
233 return g_hksHalDevicePtr->HuksHdiAgreeKey(paramSet, privateKey, peerPublicKey, agreedKey);
234 }
235
ENABLE_CFI(int32_t HuksAccessDeriveKey (const struct HksParamSet * paramSet,const struct HksBlob * kdfKey,struct HksBlob * derivedKey))236 ENABLE_CFI(int32_t HuksAccessDeriveKey(const struct HksParamSet *paramSet, const struct HksBlob *kdfKey,
237 struct HksBlob *derivedKey))
238 {
239 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
240
241 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiDeriveKey, HKS_ERROR_NULL_POINTER,
242 "DeriveKey function is null pointer")
243
244 return g_hksHalDevicePtr->HuksHdiDeriveKey(paramSet, kdfKey, derivedKey);
245 }
246
ENABLE_CFI(int32_t HuksAccessMac (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,struct HksBlob * mac))247 ENABLE_CFI(int32_t HuksAccessMac(const struct HksBlob *key, const struct HksParamSet *paramSet,
248 const struct HksBlob *srcData, struct HksBlob *mac))
249 {
250 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
251
252 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiMac, HKS_ERROR_NULL_POINTER,
253 "Mac function is null pointer")
254
255 return g_hksHalDevicePtr->HuksHdiMac(key, paramSet, srcData, mac);
256 }
257
258 #ifdef HKS_ENABLE_UPGRADE_KEY
ENABLE_CFI(int32_t HuksAccessUpgradeKey (const struct HksBlob * oldKey,const struct HksParamSet * paramSet,struct HksBlob * newKey))259 ENABLE_CFI(int32_t HuksAccessUpgradeKey(const struct HksBlob *oldKey, const struct HksParamSet *paramSet,
260 struct HksBlob *newKey))
261 {
262 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
263
264 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiUpgradeKey, HKS_ERROR_NULL_POINTER,
265 "Change key owner function is null pointer")
266
267 return g_hksHalDevicePtr->HuksHdiUpgradeKey(oldKey, paramSet, newKey);
268 }
269 #endif
270
271 #ifdef _STORAGE_LITE_
ENABLE_CFI(int32_t HuksAccessCalcHeaderMac (const struct HksParamSet * paramSet,const struct HksBlob * salt,const struct HksBlob * srcData,struct HksBlob * mac))272 ENABLE_CFI(int32_t HuksAccessCalcHeaderMac(const struct HksParamSet *paramSet, const struct HksBlob *salt,
273 const struct HksBlob *srcData, struct HksBlob *mac))
274 {
275 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
276
277 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiCalcMacHeader, HKS_ERROR_NULL_POINTER,
278 "CalcMacHeader function is null pointer")
279
280 return g_hksHalDevicePtr->HuksHdiCalcMacHeader(paramSet, salt, srcData, mac);
281 }
282 #endif
283
284 #ifdef HKS_SUPPORT_API_ATTEST_KEY
ENABLE_CFI(int32_t HuksAccessAttestKey (const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * certChain))285 ENABLE_CFI(int32_t HuksAccessAttestKey(const struct HksBlob *key, const struct HksParamSet *paramSet,
286 struct HksBlob *certChain))
287 {
288 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
289
290 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiAttestKey, HKS_ERROR_NULL_POINTER,
291 "AttestKey function is null pointer")
292
293 return g_hksHalDevicePtr->HuksHdiAttestKey(key, paramSet, certChain);
294 }
295 #endif
296
297 #endif /* _CUT_AUTHENTICATE_ */
298
ENABLE_CFI(int32_t HuksAccessGenerateRandom (const struct HksParamSet * paramSet,struct HksBlob * random))299 ENABLE_CFI(int32_t HuksAccessGenerateRandom(const struct HksParamSet *paramSet, struct HksBlob *random))
300 {
301 HKS_IF_NOT_SUCC_RETURN(HksCreateHuksHdiDevice(&g_hksHalDevicePtr), HKS_ERROR_NULL_POINTER)
302
303 HKS_IF_NULL_LOGE_RETURN(g_hksHalDevicePtr->HuksHdiGenerateRandom, HKS_ERROR_NULL_POINTER,
304 "GenerateRandom function is null pointer")
305
306 return g_hksHalDevicePtr->HuksHdiGenerateRandom(paramSet, random);
307 }
308
309 #ifdef HKS_SUPPORT_CHIPSET_PLATFORM_DECRYPT
ENABLE_CFI(int32_t HuksAccessExportChipsetPlatformPublicKey (const struct HksBlob * salt,enum HksChipsetPlatformDecryptScene scene,struct HksBlob * publicKey))310 ENABLE_CFI(int32_t HuksAccessExportChipsetPlatformPublicKey(const struct HksBlob *salt,
311 enum HksChipsetPlatformDecryptScene scene, struct HksBlob *publicKey))
312 {
313 return g_hksHalDevicePtr->HuksHdiExportChipsetPlatformPublicKey(salt, scene, publicKey);
314 }
315 #endif
316