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 #include "hks_core_interfaces.h"
17
18 #include <stddef.h>
19 #include <stdint.h>
20
21 #include "hks_log.h"
22 #include "hks_mem.h"
23 #include "hks_template.h"
24 #include "hks_type_inner.h"
25 #include "securec.h"
26 #include "hks_core_service_key_attest.h"
27 #include "hks_core_service_key_chipset_platform_derive.h"
28 #include "hks_core_service_key_generate.h"
29 #include "hks_core_service_key_operate_one_stage.h"
30 #include "hks_core_service_key_operate_three_stage.h"
31 #include "hks_core_service_key_other.h"
32
HuksHdiModuleInit(void)33 int32_t HuksHdiModuleInit(void)
34 {
35 return HksCoreModuleInit();
36 }
37
HuksHdiModuleDestroy(void)38 int32_t HuksHdiModuleDestroy(void)
39 {
40 return HksCoreModuleDestroy();
41 }
42
HuksHdiRefresh(void)43 int32_t HuksHdiRefresh(void)
44 {
45 return HksCoreRefresh();
46 }
47
HuksHdiGenerateKey(const struct HksBlob * keyAlias,const struct HksParamSet * paramSet,const struct HksBlob * keyIn,struct HksBlob * keyOut)48 int32_t HuksHdiGenerateKey(const struct HksBlob *keyAlias, const struct HksParamSet *paramSet,
49 const struct HksBlob *keyIn, struct HksBlob *keyOut)
50 {
51 return HksCoreGenerateKey(keyAlias, paramSet, keyIn, keyOut);
52 }
53
HuksHdiImportKey(const struct HksBlob * keyAlias,const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * keyOut)54 int32_t HuksHdiImportKey(const struct HksBlob *keyAlias, const struct HksBlob *key,
55 const struct HksParamSet *paramSet, struct HksBlob *keyOut)
56 {
57 return HksCoreImportKey(keyAlias, key, paramSet, keyOut);
58 }
59
HuksHdiImportWrappedKey(const struct HksBlob * keyAlias,const struct HksBlob * key,const struct HksBlob * wrappedKeyData,const struct HksParamSet * paramSet,struct HksBlob * keyOut)60 int32_t HuksHdiImportWrappedKey(const struct HksBlob *keyAlias, const struct HksBlob *key,
61 const struct HksBlob *wrappedKeyData, const struct HksParamSet *paramSet, struct HksBlob *keyOut)
62 {
63 return HksCoreImportWrappedKey(keyAlias, key, wrappedKeyData, paramSet, keyOut);
64 }
65
HuksHdiExportPublicKey(const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * keyOut)66 int32_t HuksHdiExportPublicKey(const struct HksBlob *key, const struct HksParamSet *paramSet, struct HksBlob *keyOut)
67 {
68 return HksCoreExportPublicKey(key, paramSet, keyOut);
69 }
70
HuksHdiInit(const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * handle,struct HksBlob * token)71 int32_t HuksHdiInit(const struct HksBlob *key, const struct HksParamSet *paramSet, struct HksBlob *handle,
72 struct HksBlob *token)
73 {
74 return HksCoreInit(key, paramSet, handle, token);
75 }
76
HuksHdiUpdate(const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData)77 int32_t HuksHdiUpdate(const struct HksBlob *handle, const struct HksParamSet *paramSet, const struct HksBlob *inData,
78 struct HksBlob *outData)
79 {
80 return HksCoreUpdate(handle, paramSet, inData, outData);
81 }
82
HuksHdiFinish(const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData)83 int32_t HuksHdiFinish(const struct HksBlob *handle, const struct HksParamSet *paramSet, const struct HksBlob *inData,
84 struct HksBlob *outData)
85 {
86 return HksCoreFinish(handle, paramSet, inData, outData);
87 }
88
HuksHdiAbort(const struct HksBlob * handle,const struct HksParamSet * paramSet)89 int32_t HuksHdiAbort(const struct HksBlob *handle, const struct HksParamSet *paramSet)
90 {
91 return HksCoreAbort(handle, paramSet);
92 }
93
HuksHdiGetKeyProperties(const struct HksParamSet * paramSet,const struct HksBlob * key)94 int32_t HuksHdiGetKeyProperties(const struct HksParamSet *paramSet, const struct HksBlob *key)
95 {
96 return HksCoreGetKeyProperties(paramSet, key);
97 }
98
HuksHdiAttestKey(const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * certChain)99 int32_t HuksHdiAttestKey(const struct HksBlob *key, const struct HksParamSet *paramSet, struct HksBlob *certChain)
100 {
101 return HksCoreAttestKey(key, paramSet, certChain);
102 }
103
HuksHdiGetAbility(int32_t funcType)104 int32_t HuksHdiGetAbility(int32_t funcType)
105 {
106 return HksCoreGetAbility(funcType);
107 }
108
HuksHdiGetHardwareInfo(void)109 int32_t HuksHdiGetHardwareInfo(void)
110 {
111 return HksCoreGetHardwareInfo();
112 }
113
HuksHdiGenerateRandom(const struct HksParamSet * paramSet,struct HksBlob * random)114 int32_t HuksHdiGenerateRandom(const struct HksParamSet *paramSet, struct HksBlob *random)
115 {
116 return HksCoreGenerateRandom(paramSet, random);
117 }
118
HuksHdiSign(const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,struct HksBlob * signature)119 int32_t HuksHdiSign(const struct HksBlob *key, const struct HksParamSet *paramSet,
120 const struct HksBlob *srcData, struct HksBlob *signature)
121 {
122 return HksCoreSign(key, paramSet, srcData, signature);
123 }
124
HuksHdiVerify(const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,const struct HksBlob * signature)125 int32_t HuksHdiVerify(const struct HksBlob *key, const struct HksParamSet *paramSet,
126 const struct HksBlob *srcData, const struct HksBlob *signature)
127 {
128 return HksCoreVerify(key, paramSet, srcData, signature);
129 }
130
HuksHdiEncrypt(const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * plainText,struct HksBlob * cipherText)131 int32_t HuksHdiEncrypt(const struct HksBlob *key, const struct HksParamSet *paramSet,
132 const struct HksBlob *plainText, struct HksBlob *cipherText)
133 {
134 return HksCoreEncrypt(key, paramSet, plainText, cipherText);
135 }
136
HuksHdiDecrypt(const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * cipherText,struct HksBlob * plainText)137 int32_t HuksHdiDecrypt(const struct HksBlob *key, const struct HksParamSet *paramSet,
138 const struct HksBlob *cipherText, struct HksBlob *plainText)
139 {
140 return HksCoreDecrypt(key, paramSet, cipherText, plainText);
141 }
142
HuksHdiAgreeKey(const struct HksParamSet * paramSet,const struct HksBlob * privateKey,const struct HksBlob * peerPublicKey,struct HksBlob * agreedKey)143 int32_t HuksHdiAgreeKey(const struct HksParamSet *paramSet, const struct HksBlob *privateKey,
144 const struct HksBlob *peerPublicKey, struct HksBlob *agreedKey)
145 {
146 return HksCoreAgreeKey(paramSet, privateKey, peerPublicKey, agreedKey);
147 }
148
HuksHdiDeriveKey(const struct HksParamSet * paramSet,const struct HksBlob * kdfKey,struct HksBlob * derivedKey)149 int32_t HuksHdiDeriveKey(const struct HksParamSet *paramSet, const struct HksBlob *kdfKey,
150 struct HksBlob *derivedKey)
151 {
152 return HksCoreDeriveKey(paramSet, kdfKey, derivedKey);
153 }
154
HuksHdiMac(const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,struct HksBlob * mac)155 int32_t HuksHdiMac(const struct HksBlob *key, const struct HksParamSet *paramSet,
156 const struct HksBlob *srcData, struct HksBlob *mac)
157 {
158 return HksCoreMac(key, paramSet, srcData, mac);
159 }
160
HuksHdiUpgradeKey(const struct HksBlob * oldKey,const struct HksParamSet * paramSet,struct HksBlob * newKey)161 int32_t HuksHdiUpgradeKey(const struct HksBlob *oldKey, const struct HksParamSet *paramSet,
162 struct HksBlob *newKey)
163 {
164 return HksCoreUpgradeKey(oldKey, paramSet, newKey);
165 }
166
167 #ifdef _STORAGE_LITE_
HuksHdiCalcMacHeader(const struct HksParamSet * paramSet,const struct HksBlob * salt,const struct HksBlob * srcData,struct HksBlob * mac)168 int32_t HuksHdiCalcMacHeader(const struct HksParamSet *paramSet, const struct HksBlob *salt,
169 const struct HksBlob *srcData, struct HksBlob *mac)
170 {
171 return HksCoreCalcMacHeader(paramSet, salt, srcData, mac);
172 }
173 #endif
174
HuksCreateHdiDevicePtr(void)175 struct HuksHdi *HuksCreateHdiDevicePtr(void)
176 {
177 struct HuksHdi *hdiDevicePtr = (struct HuksHdi *)HksMalloc(sizeof(struct HuksHdi));
178 HKS_IF_NULL_RETURN(hdiDevicePtr, hdiDevicePtr)
179
180 (void)memset_s(hdiDevicePtr, sizeof(struct HuksHdi), 0, sizeof(struct HuksHdi));
181
182 #ifndef _CUT_AUTHENTICATE_
183 hdiDevicePtr->HuksHdiModuleInit = HuksHdiModuleInit;
184 hdiDevicePtr->HuksHdiModuleDestroy = HuksHdiModuleDestroy;
185 hdiDevicePtr->HuksHdiRefresh = HuksHdiRefresh;
186 hdiDevicePtr->HuksHdiGenerateKey = HuksHdiGenerateKey;
187 hdiDevicePtr->HuksHdiImportKey = HuksHdiImportKey;
188 hdiDevicePtr->HuksHdiImportWrappedKey = HuksHdiImportWrappedKey;
189 hdiDevicePtr->HuksHdiExportPublicKey = HuksHdiExportPublicKey;
190 hdiDevicePtr->HuksHdiInit = HuksHdiInit;
191 hdiDevicePtr->HuksHdiUpdate = HuksHdiUpdate;
192 hdiDevicePtr->HuksHdiFinish = HuksHdiFinish;
193 hdiDevicePtr->HuksHdiAbort = HuksHdiAbort;
194 hdiDevicePtr->HuksHdiGetKeyProperties = HuksHdiGetKeyProperties;
195 hdiDevicePtr->HuksHdiAttestKey = HuksHdiAttestKey;
196 hdiDevicePtr->HuksHdiGetAbility = HuksHdiGetAbility;
197 hdiDevicePtr->HuksHdiGetHardwareInfo = HuksHdiGetHardwareInfo;
198 hdiDevicePtr->HuksHdiSign = HuksHdiSign;
199 hdiDevicePtr->HuksHdiVerify = HuksHdiVerify;
200 hdiDevicePtr->HuksHdiEncrypt = HuksHdiEncrypt;
201 hdiDevicePtr->HuksHdiDecrypt = HuksHdiDecrypt;
202 hdiDevicePtr->HuksHdiAgreeKey = HuksHdiAgreeKey;
203 hdiDevicePtr->HuksHdiDeriveKey = HuksHdiDeriveKey;
204 hdiDevicePtr->HuksHdiMac = HuksHdiMac;
205 hdiDevicePtr->HuksHdiUpgradeKey = HuksHdiUpgradeKey;
206 #ifdef _STORAGE_LITE_
207 hdiDevicePtr->HuksHdiCalcMacHeader = HuksHdiCalcMacHeader;
208 #endif
209
210 #endif /* _CUT_AUTHENTICATE_ */
211
212 hdiDevicePtr->HuksHdiGenerateRandom = HksCoreGenerateRandom;
213 #ifdef HKS_SUPPORT_CHIPSET_PLATFORM_DECRYPT
214 hdiDevicePtr->HuksHdiExportChipsetPlatformPublicKey = HksCoreExportChipsetPlatformPublicKey;
215 #endif
216
217 return hdiDevicePtr;
218 }
219
HuksDestoryHdiDevicePtr(struct HuksHdi * hdiDevicePtr)220 void HuksDestoryHdiDevicePtr(struct HuksHdi *hdiDevicePtr)
221 {
222 HKS_FREE(hdiDevicePtr);
223 }
224