1 /*
2 * Copyright (c) 2022-2025 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 "native_huks_api.h"
17
18 #include "hks_api.h"
19 #include "hks_errcode_adapter.h"
20 #include "hks_error_code.h"
21 #include "native_huks_api_adapter.h"
22 #include "stdlib.h"
23
ConvertApiResult(int32_t ret)24 static struct OH_Huks_Result ConvertApiResult(int32_t ret)
25 {
26 struct HksResult result = HksConvertErrCode(ret);
27 return *((struct OH_Huks_Result *)(&result));
28 }
29
NewConvertApiResult(int32_t ret)30 static struct OH_Huks_Result NewConvertApiResult(int32_t ret)
31 {
32 struct HksResult result = HksConvertErrCode(ret);
33 if (result.errorCode == HUKS_ERR_CODE_ILLEGAL_ARGUMENT) {
34 result.errorCode = HUKS_ERR_CODE_INVALID_ARGUMENT;
35 }
36 return *((struct OH_Huks_Result *)(&result));
37 }
38
OH_Huks_GetSdkVersion(struct OH_Huks_Blob * sdkVersion)39 struct OH_Huks_Result OH_Huks_GetSdkVersion(struct OH_Huks_Blob *sdkVersion)
40 {
41 int32_t result = HksGetSdkVersion((struct HksBlob *) sdkVersion);
42 return ConvertApiResult(result);
43 }
44
OH_Huks_GenerateKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSetIn,struct OH_Huks_ParamSet * paramSetOut)45 struct OH_Huks_Result OH_Huks_GenerateKeyItem(const struct OH_Huks_Blob *keyAlias,
46 const struct OH_Huks_ParamSet *paramSetIn, struct OH_Huks_ParamSet *paramSetOut)
47 {
48 int32_t result = HksGenerateKey((const struct HksBlob *) keyAlias,
49 (const struct HksParamSet *) paramSetIn, (struct HksParamSet *) paramSetOut);
50 return ConvertApiResult(result);
51 }
52
OH_Huks_ImportKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,const struct OH_Huks_Blob * key)53 struct OH_Huks_Result OH_Huks_ImportKeyItem(const struct OH_Huks_Blob *keyAlias,
54 const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *key)
55 {
56 int32_t result = HksImportKey((const struct HksBlob *) keyAlias,
57 (const struct HksParamSet *) paramSet, (const struct HksBlob *) key);
58 return ConvertApiResult(result);
59 }
60
OH_Huks_ImportWrappedKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_Blob * wrappingKeyAlias,const struct OH_Huks_ParamSet * paramSet,const struct OH_Huks_Blob * wrappedKeyData)61 struct OH_Huks_Result OH_Huks_ImportWrappedKeyItem(const struct OH_Huks_Blob *keyAlias,
62 const struct OH_Huks_Blob *wrappingKeyAlias, const struct OH_Huks_ParamSet *paramSet,
63 const struct OH_Huks_Blob *wrappedKeyData)
64 {
65 int32_t result = HksImportWrappedKey((const struct HksBlob *) keyAlias,
66 (const struct HksBlob *) wrappingKeyAlias, (const struct HksParamSet *) paramSet,
67 (const struct HksBlob *) wrappedKeyData);
68 return ConvertApiResult(result);
69 }
70
OH_Huks_ExportPublicKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,struct OH_Huks_Blob * key)71 struct OH_Huks_Result OH_Huks_ExportPublicKeyItem(const struct OH_Huks_Blob *keyAlias,
72 const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_Blob *key)
73 {
74 int32_t result = HksExportPublicKey((const struct HksBlob *) keyAlias,
75 (const struct HksParamSet *) paramSet, (struct HksBlob *) key);
76 return ConvertApiResult(result);
77 }
78
OH_Huks_DeleteKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet)79 struct OH_Huks_Result OH_Huks_DeleteKeyItem(const struct OH_Huks_Blob *keyAlias,
80 const struct OH_Huks_ParamSet *paramSet)
81 {
82 int32_t result = HksDeleteKey((const struct HksBlob *) keyAlias, (const struct HksParamSet *) paramSet);
83 return ConvertApiResult(result);
84 }
85
OH_Huks_GetKeyItemParamSet(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSetIn,struct OH_Huks_ParamSet * paramSetOut)86 struct OH_Huks_Result OH_Huks_GetKeyItemParamSet(const struct OH_Huks_Blob *keyAlias,
87 const struct OH_Huks_ParamSet *paramSetIn, struct OH_Huks_ParamSet *paramSetOut)
88 {
89 int32_t result = HksGetKeyParamSet((const struct HksBlob *) keyAlias,
90 (const struct HksParamSet *) paramSetIn, (struct HksParamSet *) paramSetOut);
91 return ConvertApiResult(result);
92 }
93
OH_Huks_IsKeyItemExist(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet)94 struct OH_Huks_Result OH_Huks_IsKeyItemExist(const struct OH_Huks_Blob *keyAlias,
95 const struct OH_Huks_ParamSet *paramSet)
96 {
97 int32_t result = HksKeyExist((const struct HksBlob *) keyAlias, (const struct HksParamSet *) paramSet);
98 return ConvertApiResult(result);
99 }
100
OH_Huks_AttestKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,struct OH_Huks_CertChain * certChain)101 struct OH_Huks_Result OH_Huks_AttestKeyItem(const struct OH_Huks_Blob *keyAlias,
102 const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_CertChain *certChain)
103 {
104 int32_t result = HuksAttestAdapter(keyAlias, paramSet, certChain, false);
105 return ConvertApiResult(result);
106 }
107
OH_Huks_AnonAttestKeyItem(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,struct OH_Huks_CertChain * certChain)108 struct OH_Huks_Result OH_Huks_AnonAttestKeyItem(const struct OH_Huks_Blob *keyAlias,
109 const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_CertChain *certChain)
110 {
111 int32_t result = HuksAttestAdapter(keyAlias, paramSet, certChain, true);
112 return ConvertApiResult(result);
113 }
114
OH_Huks_InitSession(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,struct OH_Huks_Blob * handle,struct OH_Huks_Blob * token)115 struct OH_Huks_Result OH_Huks_InitSession(const struct OH_Huks_Blob *keyAlias,
116 const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_Blob *handle, struct OH_Huks_Blob *token)
117 {
118 int32_t result = HksInit((const struct HksBlob *) keyAlias,
119 (const struct HksParamSet *) paramSet, (struct HksBlob *) handle, (struct HksBlob *) token);
120 return ConvertApiResult(result);
121 }
122
OH_Huks_UpdateSession(const struct OH_Huks_Blob * handle,const struct OH_Huks_ParamSet * paramSet,const struct OH_Huks_Blob * inData,struct OH_Huks_Blob * outData)123 struct OH_Huks_Result OH_Huks_UpdateSession(const struct OH_Huks_Blob *handle,
124 const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *inData, struct OH_Huks_Blob *outData)
125 {
126 int32_t result = HksUpdate((const struct HksBlob *) handle,
127 (const struct HksParamSet *) paramSet, (const struct HksBlob *) inData, (struct HksBlob *) outData);
128 return ConvertApiResult(result);
129 }
130
OH_Huks_FinishSession(const struct OH_Huks_Blob * handle,const struct OH_Huks_ParamSet * paramSet,const struct OH_Huks_Blob * inData,struct OH_Huks_Blob * outData)131 struct OH_Huks_Result OH_Huks_FinishSession(const struct OH_Huks_Blob *handle,
132 const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *inData, struct OH_Huks_Blob *outData)
133 {
134 int32_t result = HksFinish((const struct HksBlob *) handle,
135 (const struct HksParamSet *) paramSet, (const struct HksBlob *) inData, (struct HksBlob *) outData);
136 return ConvertApiResult(result);
137 }
138
OH_Huks_AbortSession(const struct OH_Huks_Blob * handle,const struct OH_Huks_ParamSet * paramSet)139 struct OH_Huks_Result OH_Huks_AbortSession(const struct OH_Huks_Blob *handle,
140 const struct OH_Huks_ParamSet *paramSet)
141 {
142 int32_t result = HksAbort((const struct HksBlob *) handle, (const struct HksParamSet *) paramSet);
143 return ConvertApiResult(result);
144 }
145
OH_Huks_ListAliases(const struct OH_Huks_ParamSet * paramSet,struct OH_Huks_KeyAliasSet ** outData)146 struct OH_Huks_Result OH_Huks_ListAliases(const struct OH_Huks_ParamSet *paramSet,
147 struct OH_Huks_KeyAliasSet **outData)
148 {
149 int32_t result = HksListAliases((const struct HksParamSet *) paramSet, (struct HksKeyAliasSet **) outData);
150 return ConvertApiResult(result);
151 }
152
OH_Huks_WrapKey(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,struct OH_Huks_Blob * wrappedKey)153 struct OH_Huks_Result OH_Huks_WrapKey(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_ParamSet *paramSet,
154 struct OH_Huks_Blob *wrappedKey)
155 {
156 int32_t result = HksWrapKey((const struct HksBlob *) keyAlias, NULL, (const struct HksParamSet *) paramSet,
157 (struct HksBlob *) wrappedKey);
158 return NewConvertApiResult(result);
159 }
160
OH_Huks_UnwrapKey(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_ParamSet * paramSet,const struct OH_Huks_Blob * wrappedKey)161 struct OH_Huks_Result OH_Huks_UnwrapKey(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_ParamSet *paramSet,
162 const struct OH_Huks_Blob *wrappedKey)
163 {
164 int32_t result = HksUnwrapKey((const struct HksBlob *) keyAlias, NULL, (struct HksBlob *) wrappedKey,
165 (const struct HksParamSet *) paramSet);
166 return NewConvertApiResult(result);
167 }
168