• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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