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