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