1 /*
2  * Copyright (c) 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 <string.h>
17 
18 #include "hks_api.h"
19 #include "hks_errcode_adapter.h"
20 
21 #include "cj_huks_ffi.h"
22 
FfiOHOSGetSdkVersion(struct HksBlob * sdkVersion)23 int32_t FfiOHOSGetSdkVersion(struct HksBlob *sdkVersion)
24 {
25     return HksGetSdkVersion(sdkVersion);
26 }
27 
FfiOHOSInitSession(const char * keyAlias,const struct HksParamSet * paramSet,struct HksBlob * handle,struct HksBlob * token)28 int32_t FfiOHOSInitSession(const char *keyAlias, const struct HksParamSet *paramSet,
29                            struct HksBlob *handle, struct HksBlob *token)
30 {
31     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
32     return HksInit(&keyAliasBlob, paramSet, handle, token);
33 }
34 
FfiOHOSUpdateSession(const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData)35 int32_t FfiOHOSUpdateSession(const struct HksBlob *handle, const struct HksParamSet *paramSet,
36                              const struct HksBlob *inData, struct HksBlob *outData)
37 {
38     return HksUpdate(handle, paramSet, inData, outData);
39 }
40 
FfiOHOSFinishSession(const struct HksBlob * handle,const struct HksParamSet * paramSet,const struct HksBlob * inData,struct HksBlob * outData)41 int32_t FfiOHOSFinishSession(const struct HksBlob *handle, const struct HksParamSet *paramSet,
42                              const struct HksBlob *inData, struct HksBlob *outData)
43 {
44     return HksFinish(handle, paramSet, inData, outData);
45 }
46 
FfiOHOSAbortSession(const struct HksBlob * handle,const struct HksParamSet * paramSet)47 int32_t FfiOHOSAbortSession(const struct HksBlob *handle, const struct HksParamSet *paramSet)
48 {
49     return HksAbort(handle, paramSet);
50 }
51 
FfiOHOSIsKeyExist(const char * keyAlias,const struct HksParamSet * paramSet)52 int32_t FfiOHOSIsKeyExist(const char *keyAlias, const struct HksParamSet *paramSet)
53 {
54     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
55     return HksKeyExist(&keyAliasBlob, paramSet);
56 }
57 
FfiOHOSGetKeyItemProperties(const char * keyAlias,const struct HksParamSet * paramSetIn,struct HksParamSet * paramSetOut)58 int32_t FfiOHOSGetKeyItemProperties(const char *keyAlias,
59                                     const struct HksParamSet *paramSetIn, struct HksParamSet *paramSetOut)
60 {
61     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
62     return HksGetKeyParamSet(&keyAliasBlob, paramSetIn, paramSetOut);
63 }
64 
FfiOHOSHAttestKey(const char * keyAlias,const struct HksParamSet * paramSet,struct HksCertChain * certChain)65 int32_t FfiOHOSHAttestKey(const char *keyAlias, const struct HksParamSet *paramSet,
66                           struct HksCertChain *certChain)
67 {
68     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
69     return HksAttestKey(&keyAliasBlob, paramSet, certChain);
70 }
71 
FfiOHOSHAnonAttestKey(const char * keyAlias,const struct HksParamSet * paramSet,struct HksCertChain * certChain)72 int32_t FfiOHOSHAnonAttestKey(const char *keyAlias, const struct HksParamSet *paramSet,
73                               struct HksCertChain *certChain)
74 {
75     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
76     return HksAnonAttestKey(&keyAliasBlob, paramSet, certChain);
77 }
78 
FfiOHOSExportKey(const char * keyAlias,const struct HksParamSet * paramSet,struct HksBlob * key)79 int32_t FfiOHOSExportKey(const char *keyAlias, const struct HksParamSet *paramSet,
80                          struct HksBlob *key)
81 {
82     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
83     return HksExportPublicKey(&keyAliasBlob, paramSet, key);
84 }
85 
FfiOHOSImportWrappedKey(const char * keyAlias,const char * wrappingKeyAlias,const struct HksParamSet * paramSet,const struct HksBlob * wrappedKeyData)86 int32_t FfiOHOSImportWrappedKey(const char *keyAlias, const char *wrappingKeyAlias,
87                                 const struct HksParamSet *paramSet, const struct HksBlob *wrappedKeyData)
88 {
89     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
90     struct HksBlob wrappingKeyAliasBlob = {strlen(wrappingKeyAlias), (uint8_t *)wrappingKeyAlias};
91     return HksImportWrappedKey(&keyAliasBlob, &wrappingKeyAliasBlob, paramSet, wrappedKeyData);
92 }
93 
FfiOHOSGenerateKey(const char * keyAlias,const struct HksParamSet * paramSetIn,struct HksParamSet * paramSetOut)94 int32_t FfiOHOSGenerateKey(const char *keyAlias, const struct HksParamSet *paramSetIn,
95                            struct HksParamSet *paramSetOut)
96 {
97     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
98     return HksGenerateKey(&keyAliasBlob, paramSetIn, paramSetOut);
99 }
100 
FfiOHOSDeleteKey(const char * keyAlias,const struct HksParamSet * paramSet)101 int32_t FfiOHOSDeleteKey(const char *keyAlias, const struct HksParamSet *paramSet)
102 {
103     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
104     return HksDeleteKey(&keyAliasBlob, paramSet);
105 }
106 
FfiOHOSImportKey(const char * keyAlias,const struct HksParamSet * paramSet,struct HksBlob * key)107 int32_t FfiOHOSImportKey(const char *keyAlias, const struct HksParamSet *paramSet, struct HksBlob *key)
108 {
109     struct HksBlob keyAliasBlob = {strlen(keyAlias), (uint8_t *)keyAlias};
110     return HksImportKey(&keyAliasBlob, paramSet, key);
111 }
112 
FfiOHOSConvertErrCode(int32_t hksCode,struct HksResult * ret)113 void FfiOHOSConvertErrCode(int32_t hksCode, struct HksResult *ret)
114 {
115     *ret = HksConvertErrCode(hksCode);
116 }
117