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#ifndef OHOS_HDI_HUKS_V1_0_IHUKS_H 17#define OHOS_HDI_HUKS_V1_0_IHUKS_H 18 19#include <stdbool.h> 20#include <stdint.h> 21#include <hdf_base.h> 22#include "huks/v1_0/ihuks_types.h" 23 24#ifdef __cplusplus 25extern "C" { 26#endif /* __cplusplus */ 27 28#define IHUKS_INTERFACE_DESC "ohos.hdi.huks.v1_0.IHuks" 29 30#define IHUKS_MAJOR_VERSION 1 31#define IHUKS_MINOR_VERSION 0 32 33struct IHuks { 34 int32_t (*ModuleInit)(struct IHuks *self); 35 36 int32_t (*ModuleDestroy)(struct IHuks *self); 37 38 int32_t (*GenerateKey)(struct IHuks *self, const struct HuksBlob* keyAlias, const struct HuksParamSet* paramSet, 39 const struct HuksBlob* keyIn, struct HuksBlob* encKeyOut); 40 41 int32_t (*ImportKey)(struct IHuks *self, const struct HuksBlob* keyAlias, const struct HuksBlob* key, 42 const struct HuksParamSet* paramSet, struct HuksBlob* encKeyOut); 43 44 int32_t (*ImportWrappedKey)(struct IHuks *self, const struct HuksBlob* wrappingKeyAlias, 45 const struct HuksBlob* wrappingEncKey, const struct HuksBlob* wrappedKeyData, const struct HuksParamSet* paramSet, struct HuksBlob* encKeyOut); 46 47 int32_t (*ExportPublicKey)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 48 struct HuksBlob* keyOut); 49 50 int32_t (*Init)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 51 struct HuksBlob* handle, struct HuksBlob* token); 52 53 int32_t (*Update)(struct IHuks *self, const struct HuksBlob* handle, const struct HuksParamSet* paramSet, 54 const struct HuksBlob* inData, struct HuksBlob* outData); 55 56 int32_t (*Finish)(struct IHuks *self, const struct HuksBlob* handle, const struct HuksParamSet* paramSet, 57 const struct HuksBlob* inData, struct HuksBlob* outData); 58 59 int32_t (*Abort)(struct IHuks *self, const struct HuksBlob* handle, const struct HuksParamSet* paramSet); 60 61 int32_t (*CheckKeyValidity)(struct IHuks *self, const struct HuksParamSet* paramSet, const struct HuksBlob* encKey); 62 63 int32_t (*AttestKey)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 64 struct HuksBlob* certChain); 65 66 int32_t (*GenerateRandom)(struct IHuks *self, const struct HuksParamSet* paramSet, struct HuksBlob* random); 67 68 int32_t (*Sign)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 69 const struct HuksBlob* srcData, struct HuksBlob* signature); 70 71 int32_t (*Verify)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 72 const struct HuksBlob* srcData, const struct HuksBlob* signature); 73 74 int32_t (*Encrypt)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 75 const struct HuksBlob* plainText, struct HuksBlob* cipherText); 76 77 int32_t (*Decrypt)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 78 const struct HuksBlob* cipherText, struct HuksBlob* plainText); 79 80 int32_t (*AgreeKey)(struct IHuks *self, const struct HuksParamSet* paramSet, const struct HuksBlob* encPrivateKey, 81 const struct HuksBlob* peerPublicKey, struct HuksBlob* agreedKey); 82 83 int32_t (*DeriveKey)(struct IHuks *self, const struct HuksParamSet* paramSet, const struct HuksBlob* encKdfKey, 84 struct HuksBlob* derivedKey); 85 86 int32_t (*Mac)(struct IHuks *self, const struct HuksBlob* encKey, const struct HuksParamSet* paramSet, 87 const struct HuksBlob* srcData, struct HuksBlob* mac); 88 89 int32_t (*UpgradeKey)(struct IHuks *self, const struct HuksBlob* encOldKey, const struct HuksParamSet* paramSet, 90 struct HuksBlob* encNewKey); 91 92 int32_t (*ExportChipsetPlatformPublicKey)(struct IHuks *self, const struct HuksBlob* salt, 93 enum HuksChipsetPlatformDecryptScene scene, struct HuksBlob* publicKey); 94 95 int32_t (*GetVersion)(struct IHuks *self, uint32_t* majorVer, uint32_t* minorVer); 96}; 97 98// external method used to create client object, it support ipc and passthrought mode 99struct IHuks *IHuksGet(bool isStub); 100struct IHuks *IHuksGetInstance(const char *serviceName, bool isStub); 101 102// external method used to create release object, it support ipc and passthrought mode 103void IHuksRelease(struct IHuks *instance, bool isStub); 104void IHuksReleaseInstance(const char *serviceName, struct IHuks *instance, bool isStub); 105#ifdef __cplusplus 106} 107#endif /* __cplusplus */ 108 109#endif // OHOS_HDI_HUKS_V1_0_IHUKS_H