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 
26 #include "hks_log.h"
27 #include "hks_mem.h"
28 #include "hks_template.h"
29 
30 #include "hks_core_service_key_attest.h"
31 #include "hks_core_service_key_chipset_platform_derive.h"
32 #include "hks_core_service_key_generate.h"
33 #include "hks_core_service_key_operate_one_stage.h"
34 #include "hks_core_service_key_operate_three_stage.h"
35 #include "hks_core_service_key_other.h"
36 
37 #ifndef _CUT_AUTHENTICATE_
ENABLE_CFI(int32_t HuksAccessModuleInit (void))38 ENABLE_CFI(int32_t HuksAccessModuleInit(void))
39 {
40     return HKS_SUCCESS;
41 }
42 
ENABLE_CFI(int32_t HuksAccessModuleDestroy (void))43 ENABLE_CFI(int32_t HuksAccessModuleDestroy(void))
44 {
45     return HKS_SUCCESS;
46 }
47 
ENABLE_CFI(int32_t HuksAccessRefresh (void))48 ENABLE_CFI(int32_t HuksAccessRefresh(void))
49 {
50     return HksCoreRefresh();
51 }
52 
ENABLE_CFI(int32_t HuksAccessGenerateKey (const struct HksBlob * keyAlias,const struct HksParamSet * paramSetIn,const struct HksBlob * keyIn,struct HksBlob * keyOut))53 ENABLE_CFI(int32_t HuksAccessGenerateKey(const struct HksBlob *keyAlias, const struct HksParamSet *paramSetIn,
54     const struct HksBlob *keyIn, struct HksBlob *keyOut))
55 {
56     return HksCoreGenerateKey(keyAlias, paramSetIn, keyIn, keyOut);
57 }
58 
ENABLE_CFI(int32_t HuksAccessImportKey (const struct HksBlob * keyAlias,const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * keyOut))59 ENABLE_CFI(int32_t HuksAccessImportKey(const struct HksBlob *keyAlias, const struct HksBlob *key,
60     const struct HksParamSet *paramSet, struct HksBlob *keyOut))
61 {
62     return HksCoreImportKey(keyAlias, key, paramSet, keyOut);
63 }
64 
ENABLE_CFI(int32_t HuksAccessImportWrappedKey (const struct HksBlob * wrappingKeyAlias,const struct HksBlob * key,const struct HksBlob * wrappedKeyData,const struct HksParamSet * paramSet,struct HksBlob * keyOut))65 ENABLE_CFI(int32_t HuksAccessImportWrappedKey(const struct HksBlob *wrappingKeyAlias, const struct HksBlob *key,
66     const struct HksBlob *wrappedKeyData, const struct HksParamSet *paramSet, struct HksBlob *keyOut))
67 {
68     return HksCoreImportWrappedKey(wrappingKeyAlias, key, wrappedKeyData, paramSet, keyOut);
69 }
70 
ENABLE_CFI(int32_t HuksAccessExportPublicKey (const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * keyOut))71 ENABLE_CFI(int32_t HuksAccessExportPublicKey(const struct HksBlob *key, const struct HksParamSet *paramSet,
72     struct HksBlob *keyOut))
73 {
74     return HksCoreExportPublicKey(key, paramSet, keyOut);
75 }
76 
ENABLE_CFI(int32_t HuksAccessInit (const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * handle,struct HksBlob * token))77 ENABLE_CFI(int32_t HuksAccessInit(const struct  HksBlob *key, const struct HksParamSet *paramSet,
78     struct HksBlob *handle, struct HksBlob *token))
79 {
80     return HksCoreInit(key, paramSet, handle, token);
81 }
82 
ENABLE_CFI(int32_t HuksAccessUpdate (const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData))83 ENABLE_CFI(int32_t HuksAccessUpdate(const struct HksBlob *handle, const struct HksParamSet *paramSet,
84     const struct HksBlob *inData, struct HksBlob *outData))
85 {
86     return HksCoreUpdate(handle, paramSet, inData, outData);
87 }
88 
ENABLE_CFI(int32_t HuksAccessFinish (const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData))89 ENABLE_CFI(int32_t HuksAccessFinish(const struct HksBlob *handle, const struct HksParamSet *paramSet,
90     const struct HksBlob *inData, struct HksBlob *outData))
91 {
92     return HksCoreFinish(handle, paramSet, inData, outData);
93 }
94 
ENABLE_CFI(int32_t HuksAccessAbort (const struct HksBlob * handle,const struct HksParamSet * paramSet))95 ENABLE_CFI(int32_t HuksAccessAbort(const struct HksBlob *handle, const struct HksParamSet *paramSet))
96 {
97     return HksCoreAbort(handle, paramSet);
98 }
99 
ENABLE_CFI(int32_t HuksAccessGetKeyProperties (const struct HksParamSet * paramSet,const struct HksBlob * key))100 ENABLE_CFI(int32_t HuksAccessGetKeyProperties(const struct HksParamSet *paramSet, const struct HksBlob *key))
101 {
102     return HksCoreGetKeyProperties(paramSet, key);
103 }
104 
ENABLE_CFI(int32_t HuksAccessGetAbility (int funcType))105 ENABLE_CFI(int32_t HuksAccessGetAbility(int funcType))
106 {
107     return HksCoreGetAbility(funcType);
108 }
109 
ENABLE_CFI(int32_t HuksAccessGetHardwareInfo (void))110 ENABLE_CFI(int32_t HuksAccessGetHardwareInfo(void))
111 {
112     return HksCoreGetHardwareInfo();
113 }
114 
ENABLE_CFI(int32_t HuksAccessSign (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,struct HksBlob * signature))115 ENABLE_CFI(int32_t HuksAccessSign(const struct HksBlob *key, const struct HksParamSet *paramSet,
116     const struct HksBlob *srcData, struct HksBlob *signature))
117 {
118     return HksCoreSign(key, paramSet, srcData, signature);
119 }
120 
ENABLE_CFI(int32_t HuksAccessVerify (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,const struct HksBlob * signature))121 ENABLE_CFI(int32_t HuksAccessVerify(const struct HksBlob *key, const struct HksParamSet *paramSet,
122     const struct HksBlob *srcData, const struct HksBlob *signature))
123 {
124     return HksCoreVerify(key, paramSet, srcData, signature);
125 }
126 
ENABLE_CFI(int32_t HuksAccessEncrypt (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * plainText,struct HksBlob * cipherText))127 ENABLE_CFI(int32_t HuksAccessEncrypt(const struct HksBlob *key, const struct HksParamSet *paramSet,
128     const struct HksBlob *plainText, struct HksBlob *cipherText))
129 {
130     return HksCoreEncrypt(key, paramSet, plainText, cipherText);
131 }
132 
ENABLE_CFI(int32_t HuksAccessDecrypt (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * cipherText,struct HksBlob * plainText))133 ENABLE_CFI(int32_t HuksAccessDecrypt(const struct HksBlob *key, const struct HksParamSet *paramSet,
134     const struct HksBlob *cipherText, struct HksBlob *plainText))
135 {
136     return HksCoreDecrypt(key, paramSet, cipherText, plainText);
137 }
138 
ENABLE_CFI(int32_t HuksAccessAgreeKey (const struct HksParamSet * paramSet,const struct HksBlob * privateKey,const struct HksBlob * peerPublicKey,struct HksBlob * agreedKey))139 ENABLE_CFI(int32_t HuksAccessAgreeKey(const struct HksParamSet *paramSet, const struct HksBlob *privateKey,
140     const struct HksBlob *peerPublicKey, struct HksBlob *agreedKey))
141 {
142     return HksCoreAgreeKey(paramSet, privateKey, peerPublicKey, agreedKey);
143 }
144 
ENABLE_CFI(int32_t HuksAccessDeriveKey (const struct HksParamSet * paramSet,const struct HksBlob * kdfKey,struct HksBlob * derivedKey))145 ENABLE_CFI(int32_t HuksAccessDeriveKey(const struct HksParamSet *paramSet, const struct HksBlob *kdfKey,
146     struct HksBlob *derivedKey))
147 {
148     return HksCoreDeriveKey(paramSet, kdfKey, derivedKey);
149 }
150 
ENABLE_CFI(int32_t HuksAccessMac (const struct HksBlob * key,const struct HksParamSet * paramSet,const struct HksBlob * srcData,struct HksBlob * mac))151 ENABLE_CFI(int32_t HuksAccessMac(const struct HksBlob *key, const struct HksParamSet *paramSet,
152     const struct HksBlob *srcData, struct HksBlob *mac))
153 {
154     return HksCoreMac(key, paramSet, srcData, mac);
155 }
156 
157 #ifdef HKS_ENABLE_UPGRADE_KEY
ENABLE_CFI(int32_t HuksAccessUpgradeKey (const struct HksBlob * oldKey,const struct HksParamSet * paramSet,struct HksBlob * newKey))158 ENABLE_CFI(int32_t HuksAccessUpgradeKey(const struct HksBlob *oldKey, const struct HksParamSet *paramSet,
159     struct HksBlob *newKey))
160 {
161     return HksCoreUpgradeKey(oldKey, paramSet, newKey);
162 }
163 #endif
164 
165 #ifdef _STORAGE_LITE_
ENABLE_CFI(int32_t HuksAccessCalcHeaderMac (const struct HksParamSet * paramSet,const struct HksBlob * salt,const struct HksBlob * srcData,struct HksBlob * mac))166 ENABLE_CFI(int32_t HuksAccessCalcHeaderMac(const struct HksParamSet *paramSet, const struct HksBlob *salt,
167     const struct HksBlob *srcData, struct HksBlob *mac))
168 {
169     return HksCoreCalcMacHeader(paramSet, salt, srcData, mac);
170 }
171 #endif
172 
173 #ifdef HKS_SUPPORT_API_ATTEST_KEY
ENABLE_CFI(int32_t HuksAccessAttestKey (const struct HksBlob * key,const struct HksParamSet * paramSet,struct HksBlob * certChain))174 ENABLE_CFI(int32_t HuksAccessAttestKey(const struct HksBlob *key, const struct HksParamSet *paramSet,
175     struct HksBlob *certChain))
176 {
177     return HksCoreAttestKey(key, paramSet, certChain);
178 }
179 #endif
180 
181 #endif /* _CUT_AUTHENTICATE_ */
182 
ENABLE_CFI(int32_t HuksAccessGenerateRandom (const struct HksParamSet * paramSet,struct HksBlob * random))183 ENABLE_CFI(int32_t HuksAccessGenerateRandom(const struct HksParamSet *paramSet, struct HksBlob *random))
184 {
185     return HksCoreGenerateRandom(paramSet, random);
186 }
187 
188 #ifdef HKS_SUPPORT_CHIPSET_PLATFORM_DECRYPT
ENABLE_CFI(int32_t HuksAccessExportChipsetPlatformPublicKey (const struct HksBlob * salt,enum HksChipsetPlatformDecryptScene scene,struct HksBlob * publicKey))189 ENABLE_CFI(int32_t HuksAccessExportChipsetPlatformPublicKey(const struct HksBlob *salt,
190     enum HksChipsetPlatformDecryptScene scene, struct HksBlob *publicKey))
191 {
192     return HksCoreExportChipsetPlatformPublicKey(salt, scene, publicKey);
193 }
194 #endif
195