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