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 23int32_t FfiOHOSGetSdkVersion(struct HksBlob *sdkVersion) 24{ 25 return HksGetSdkVersion(sdkVersion); 26} 27 28int32_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 35int32_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 41int32_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 47int32_t FfiOHOSAbortSession(const struct HksBlob *handle, const struct HksParamSet *paramSet) 48{ 49 return HksAbort(handle, paramSet); 50} 51 52int32_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 58int32_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 65int32_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 72int32_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 79int32_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 86int32_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 94int32_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 101int32_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 107int32_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 113void FfiOHOSConvertErrCode(int32_t hksCode, struct HksResult *ret) 114{ 115 *ret = HksConvertErrCode(hksCode); 116} 117 118int32_t FfiOHOSListAliases(const struct HksParamSet *paramSet, uint32_t *retAliasesCnt, struct HksBlob **retAliases) 119{ 120 struct HksKeyAliasSet *outSet = NULL; 121 int32_t result = HksListAliases(paramSet, &outSet); 122 if (result == HKS_SUCCESS) { 123 // Though HKS_SUCCESS, when query result is empty, `outSet` is still NULL. 124 if (outSet == NULL) { 125 return HKS_SUCCESS; 126 } 127 *retAliasesCnt = outSet->aliasesCnt; 128 // ATTENTION: aliases will be released by caller 129 *retAliases = outSet->aliases; 130 free(outSet); 131 } 132 return result; 133} 134