1/* 2 *Copyright (c) 2023 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 <securec.h> 17 18#include "v1_0/ihuks.h" 19#include "v1_0/ihuks_types.h" 20 21#include "huks_hdi_passthrough_adapter.h" 22#include "huks_hdi_template.h" 23#include "huks_sa_type.h" 24 25#define HDF_LOG_TAG huks_hdi_service 26 27struct HuksService { 28 struct IHuks interface; 29}; 30 31static int32_t HuksModuleInit(struct IHuks *self) 32{ 33 (void)self; 34 return HuksHdiAdapterModuleInit(); 35} 36 37static int32_t HuksModuleDestroy(struct IHuks *self) 38{ 39 (void)self; 40 return HuksHdiAdapterModuleDestroy(); 41} 42 43static int32_t HuksGenerateKey(struct IHuks *self, const struct HuksBlob *keyAlias, const struct HuksParamSet *paramSet, 44 const struct HuksBlob *keyIn, struct HuksBlob *encKeyOut) 45{ 46 (void)self; 47 int32_t ret = HUKS_FAILURE; 48 HDI_CONVERTER_FUNC_GENERATEKEY(keyAlias, paramSet, keyIn, encKeyOut, ret, HuksHdiAdapterGenerateKey) 49 return ret; 50} 51 52static int32_t HuksImportKey(struct IHuks *self, const struct HuksBlob *keyAlias, const struct HuksBlob *key, 53 const struct HuksParamSet *paramSet, struct HuksBlob *encKeyOut) 54{ 55 (void)self; 56 int32_t ret = HUKS_FAILURE; 57 HDI_CONVERTER_FUNC_IMPORTKEY(keyAlias, key, paramSet, encKeyOut, ret, HuksHdiAdapterImportKey) 58 return ret; 59} 60 61static int32_t HuksImportWrappedKey(struct IHuks *self, const struct HuksBlob *wrappingKeyAlias, 62 const struct HuksBlob *wrappingEncKey, const struct HuksBlob *wrappedKeyData, const struct HuksParamSet *paramSet, 63 struct HuksBlob *encKeyOut) 64{ 65 (void)self; 66 int32_t ret = HUKS_FAILURE; 67 HDI_CONVERTER_FUNC_IMPORTWRAPPEDKEY(wrappingKeyAlias, wrappingEncKey, wrappedKeyData, paramSet, encKeyOut, ret, 68 HuksHdiAdapterImportWrappedKey) 69 return ret; 70} 71 72static int32_t HuksExportPublicKey(struct IHuks *self, const struct HuksBlob *encKey, 73 const struct HuksParamSet *paramSet, struct HuksBlob *keyOut) 74{ 75 (void)self; 76 int32_t ret = HUKS_FAILURE; 77 HDI_CONVERTER_FUNC_EXPORTPUBLICKEY(encKey, paramSet, keyOut, ret, HuksHdiAdapterExportPublicKey) 78 return ret; 79} 80 81static int32_t HuksInit(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 82 struct HuksBlob *handle, struct HuksBlob *token) 83{ 84 (void)self; 85 int32_t ret = HUKS_FAILURE; 86 HDI_CONVERTER_FUNC_INIT(encKey, paramSet, handle, token, ret, HuksHdiAdapterInit) 87 return ret; 88} 89 90static int32_t HuksUpdate(struct IHuks *self, const struct HuksBlob *handle, const struct HuksParamSet *paramSet, 91 const struct HuksBlob *inData, struct HuksBlob *outData) 92{ 93 (void)self; 94 int32_t ret = HUKS_FAILURE; 95 HDI_CONVERTER_FUNC_UPDATE(handle, paramSet, inData, outData, ret, HuksHdiAdapterUpdate) 96 return ret; 97} 98 99static int32_t HuksFinish(struct IHuks *self, const struct HuksBlob *handle, const struct HuksParamSet *paramSet, 100 const struct HuksBlob *inData, struct HuksBlob *outData) 101{ 102 (void)self; 103 int32_t ret = HUKS_FAILURE; 104 HDI_CONVERTER_FUNC_FINISH(handle, paramSet, inData, outData, ret, HuksHdiAdapterFinish) 105 return ret; 106} 107 108static int32_t HuksAbort(struct IHuks *self, const struct HuksBlob *handle, const struct HuksParamSet *paramSet) 109{ 110 (void)self; 111 int32_t ret = HUKS_FAILURE; 112 HDI_CONVERTER_FUNC_ABORT(handle, paramSet, ret, HuksHdiAdapterAbort) 113 return ret; 114} 115 116static int32_t HuksCheckKeyValidity(struct IHuks *self, const struct HuksParamSet *paramSet, 117 const struct HuksBlob *encKey) 118{ 119 (void)self; 120 int32_t ret = HUKS_FAILURE; 121 HDI_CONVERTER_FUNC_CHECKKEYVALIDITY(paramSet, encKey, ret, HuksHdiAdapterGetKeyProperties) 122 return ret; 123} 124 125static int32_t HuksAttestKey(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 126 struct HuksBlob *certChain) 127{ 128 (void)self; 129 int32_t ret = HUKS_FAILURE; 130 HDI_CONVERTER_FUNC_ATTESTKEY(encKey, paramSet, certChain, ret, HuksHdiAdapterAttestKey) 131 return ret; 132} 133 134static int32_t HuksGenerateRandom(struct IHuks *self, const struct HuksParamSet *paramSet, struct HuksBlob *random) 135{ 136 (void)self; 137 int32_t ret = HUKS_FAILURE; 138 HDI_CONVERTER_FUNC_GENERATERANDOM(paramSet, random, ret, HuksHdiAdapterGenerateRandom) 139 return ret; 140} 141 142static int32_t HuksSign(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 143 const struct HuksBlob *srcData, struct HuksBlob *signature) 144{ 145 (void)self; 146 int32_t ret = HUKS_FAILURE; 147 HDI_CONVERTER_FUNC_SIGN(encKey, paramSet, srcData, signature, ret, HuksHdiAdapterSign) 148 return ret; 149} 150 151static int32_t HuksVerify(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 152 const struct HuksBlob *srcData, const struct HuksBlob *signature) 153{ 154 (void)self; 155 int32_t ret = HUKS_FAILURE; 156 HDI_CONVERTER_FUNC_VERIFY(encKey, paramSet, srcData, signature, ret, HuksHdiAdapterVerify) 157 return ret; 158} 159 160static int32_t HuksEncrypt(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 161 const struct HuksBlob *plainText, struct HuksBlob *cipherText) 162{ 163 (void)self; 164 int32_t ret = HUKS_FAILURE; 165 HDI_CONVERTER_FUNC_ENCRYPT(encKey, paramSet, plainText, cipherText, ret, HuksHdiAdapterEncrypt) 166 return ret; 167} 168 169static int32_t HuksDecrypt(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 170 const struct HuksBlob *cipherText, struct HuksBlob *plainText) 171{ 172 (void)self; 173 int32_t ret = HUKS_FAILURE; 174 HDI_CONVERTER_FUNC_DECRYPT(encKey, paramSet, cipherText, plainText, ret, HuksHdiAdapterDecrypt) 175 return ret; 176} 177 178static int32_t HuksAgreeKey(struct IHuks *self, const struct HuksParamSet *paramSet, 179 const struct HuksBlob *encPrivateKey, const struct HuksBlob *peerPublicKey, struct HuksBlob *agreedKey) 180{ 181 (void)self; 182 int32_t ret = HUKS_FAILURE; 183 HDI_CONVERTER_FUNC_AGREEKEY(paramSet, encPrivateKey, peerPublicKey, agreedKey, ret, HuksHdiAdapterAgreeKey) 184 return ret; 185} 186 187static int32_t HuksDeriveKey(struct IHuks *self, const struct HuksParamSet *paramSet, const struct HuksBlob *encKdfKey, 188 struct HuksBlob *derivedKey) 189{ 190 (void)self; 191 int32_t ret = HUKS_FAILURE; 192 HDI_CONVERTER_FUNC_DERIVEKEY(paramSet, encKdfKey, derivedKey, ret, HuksHdiAdapterDeriveKey) 193 return ret; 194} 195 196static int32_t HuksMac(struct IHuks *self, const struct HuksBlob *encKey, const struct HuksParamSet *paramSet, 197 const struct HuksBlob *srcData, struct HuksBlob *mac) 198{ 199 (void)self; 200 int32_t ret = HUKS_FAILURE; 201 HDI_CONVERTER_FUNC_MAC(encKey, paramSet, srcData, mac, ret, HuksHdiAdapterMac) 202 return ret; 203} 204 205static int32_t HuksUpgradeKey(struct IHuks *self, const struct HuksBlob *encOldKey, const struct HuksParamSet *paramSet, 206 struct HuksBlob *encNewKey) 207{ 208 (void)self; 209 int32_t ret = HUKS_FAILURE; 210 HDI_CONVERTER_FUNC_UPGRADEKEY(encOldKey, paramSet, encNewKey, ret, HuksHdiAdapterUpgradeKey) 211 return ret; 212} 213 214static int32_t HuksExportChipsetPlatformPublicKey(struct IHuks *self, const struct HuksBlob *salt, 215 enum HuksChipsetPlatformDecryptScene scene, struct HuksBlob *publicKey) 216{ 217 (void)self; 218 (void)salt; 219 (void)scene; 220 (void)publicKey; 221 return HUKS_ERROR_API_NOT_SUPPORTED; 222} 223 224static int32_t HuksGetVersion(struct IHuks *self, uint32_t *majorVer, uint32_t *minorVer) 225{ 226 *majorVer = IHUKS_MAJOR_VERSION; 227 *minorVer = IHUKS_MINOR_VERSION; 228 return HUKS_SUCCESS; 229} 230 231struct IHuks *HuksImplGetInstance(void) 232{ 233 struct HuksService *service = (struct HuksService *)malloc(sizeof(struct HuksService)); 234 if (service == NULL) { 235 return NULL; 236 } 237 238 service->interface.ModuleInit = HuksModuleInit; 239 service->interface.ModuleDestroy = HuksModuleDestroy; 240 service->interface.GenerateKey = HuksGenerateKey; 241 service->interface.ImportKey = HuksImportKey; 242 service->interface.ImportWrappedKey = HuksImportWrappedKey; 243 service->interface.ExportPublicKey = HuksExportPublicKey; 244 service->interface.Init = HuksInit; 245 service->interface.Update = HuksUpdate; 246 service->interface.Finish = HuksFinish; 247 service->interface.Abort = HuksAbort; 248 service->interface.CheckKeyValidity = HuksCheckKeyValidity; 249 service->interface.AttestKey = HuksAttestKey; 250 service->interface.GenerateRandom = HuksGenerateRandom; 251 service->interface.Sign = HuksSign; 252 service->interface.Verify = HuksVerify; 253 service->interface.Encrypt = HuksEncrypt; 254 service->interface.Decrypt = HuksDecrypt; 255 service->interface.AgreeKey = HuksAgreeKey; 256 service->interface.DeriveKey = HuksDeriveKey; 257 service->interface.Mac = HuksMac; 258 service->interface.ExportChipsetPlatformPublicKey = HuksExportChipsetPlatformPublicKey; 259 service->interface.UpgradeKey = HuksUpgradeKey; 260 service->interface.GetVersion = HuksGetVersion; 261 return &service->interface; 262} 263 264void HuksImplRelease(struct IHuks *instance) 265{ 266 if (instance == NULL) { 267 return; 268 } 269 (void)HuksReleaseCoreEngine(); 270 free(instance); 271} 272