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