1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#ifndef HUKS_HDI_TEMPLATE_H
17094332d3Sopenharmony_ci#define HUKS_HDI_TEMPLATE_H
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#include "huks_sa_type.h"
20094332d3Sopenharmony_ci
21094332d3Sopenharmony_citypedef struct HksBlob TargetBlob;
22094332d3Sopenharmony_citypedef struct HksParamSet TargetParamSet;
23094332d3Sopenharmony_ci
24094332d3Sopenharmony_ci#define HDI_ADAPTER_PARAM(oldParamPtr, newParamPtr) ((oldParamPtr) == NULL ?  NULL : (newParamPtr))
25094332d3Sopenharmony_ci
26094332d3Sopenharmony_ci
27094332d3Sopenharmony_ci#define HDI_CONVERTER_PARAM_IN_BLOB(fromHuksBlobPtr, toHksBlobPtr)  \
28094332d3Sopenharmony_ci    if ((fromHuksBlobPtr) != NULL && (toHksBlobPtr) != NULL) {      \
29094332d3Sopenharmony_ci        (toHksBlobPtr)->data = (fromHuksBlobPtr)->data;             \
30094332d3Sopenharmony_ci        (toHksBlobPtr)->size = (fromHuksBlobPtr)->dataLen;          \
31094332d3Sopenharmony_ci    }
32094332d3Sopenharmony_ci
33094332d3Sopenharmony_ci#define HDI_CONVERTER_PARAM_IN_PARAMSET(fromHuksParamSetPtr, toHksParamSetPtr)   \
34094332d3Sopenharmony_ci    if ((fromHuksParamSetPtr) != NULL && (fromHuksParamSetPtr)->data != NULL &&  \
35094332d3Sopenharmony_ci        (fromHuksParamSetPtr)->dataLen >= sizeof(TargetParamSet)) {              \
36094332d3Sopenharmony_ci        (toHksParamSetPtr) = (TargetParamSet *)(fromHuksParamSetPtr)->data;      \
37094332d3Sopenharmony_ci    }
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_ci#define HDI_CONVERTER_PARAM_OUT_BLOB(fromHksBlobPtr, toHuksBlobPtr) \
40094332d3Sopenharmony_ci    if ((fromHksBlobPtr) != NULL && (toHuksBlobPtr) != NULL) {      \
41094332d3Sopenharmony_ci        (toHuksBlobPtr)->data = (fromHksBlobPtr)->data;             \
42094332d3Sopenharmony_ci        (toHuksBlobPtr)->dataLen = (fromHksBlobPtr)->size;          \
43094332d3Sopenharmony_ci    }
44094332d3Sopenharmony_ci
45094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_GENERATEKEY(keyAlias, paramSet, keyIn, keyOut, ret, func) \
46094332d3Sopenharmony_ci    TargetBlob keyAliasCore = {0};  \
47094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
48094332d3Sopenharmony_ci    TargetBlob keyInCore = {0};  \
49094332d3Sopenharmony_ci    TargetBlob keyOutCore = {0};  \
50094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyAlias, &keyAliasCore)  \
51094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
52094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyIn, &keyInCore)  \
53094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyOut, &keyOutCore)  \
54094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(keyAlias, &keyAliasCore),  \
55094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
56094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(keyIn, &keyInCore),        \
57094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(keyOut, &keyOutCore));  \
58094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&keyOutCore, keyOut)
59094332d3Sopenharmony_ci
60094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_IMPORTKEY(keyAlias, key, paramSet, keyOut, ret, func) \
61094332d3Sopenharmony_ci    TargetBlob keyAliasCore = {0};   \
62094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;   \
63094332d3Sopenharmony_ci    TargetBlob keyCore = {0};   \
64094332d3Sopenharmony_ci    TargetBlob keyOutCore = {0};   \
65094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyAlias, &keyAliasCore)   \
66094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)   \
67094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)   \
68094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyOut, &keyOutCore)   \
69094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(keyAlias, &keyAliasCore), \
70094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(key, &keyCore),   \
71094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore), \
72094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(keyOut, &keyOutCore));   \
73094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&keyOutCore, keyOut)
74094332d3Sopenharmony_ci
75094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_IMPORTWRAPPEDKEY(wrappedKeyAlias, key, wrappedKeyData, paramSet, keyOut, ret, func)   \
76094332d3Sopenharmony_ci    TargetBlob wrappingKeyAliasCore = {0};  \
77094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
78094332d3Sopenharmony_ci    TargetBlob wrappedKeyDataCore = {0};  \
79094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
80094332d3Sopenharmony_ci    TargetBlob keyOutCore = {0};  \
81094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(wrappingKeyAlias, &wrappingKeyAliasCore)  \
82094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
83094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
84094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(wrappedKeyData, &wrappedKeyDataCore)  \
85094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyOut, &keyOutCore)  \
86094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(wrappingKeyAlias, &wrappedKeyDataCore),  \
87094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(key, &keyCore),  \
88094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(wrappedKeyData, &wrappedKeyDataCore),  \
89094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
90094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(keyOut, &keyOutCore));  \
91094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&keyOutCore, keyOut)
92094332d3Sopenharmony_ci
93094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_EXPORTPUBLICKEY(key, paramSet, keyOut, ret, func)  \
94094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
95094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
96094332d3Sopenharmony_ci    TargetBlob keyOutCore = {0};  \
97094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
98094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
99094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(keyOut, &keyOutCore)  \
100094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
101094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
102094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(keyOut, &keyOutCore));  \
103094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&keyOutCore, keyOut)
104094332d3Sopenharmony_ci
105094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_INIT(key, paramSet, handle, token, ret, func)  \
106094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
107094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
108094332d3Sopenharmony_ci    TargetBlob handleCore = {0};  \
109094332d3Sopenharmony_ci    TargetBlob tokenCore = {0};  \
110094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
111094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
112094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(handle, &handleCore)  \
113094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(token, &tokenCore)  \
114094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
115094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
116094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(handle, &handleCore),  \
117094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(token, &tokenCore));  \
118094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&handleCore, handle)  \
119094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&tokenCore, token)
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_UPDATE(handle, paramSet, inData, outData, ret, func)  \
122094332d3Sopenharmony_ci    TargetBlob handleCore = {0};  \
123094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
124094332d3Sopenharmony_ci    TargetBlob inDataCore = {0};  \
125094332d3Sopenharmony_ci    TargetBlob outDataCore = {0};  \
126094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(handle, &handleCore)  \
127094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
128094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(inData, &inDataCore)  \
129094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(outData, &outDataCore)  \
130094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(handle, &handleCore),  \
131094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
132094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(inData, &inDataCore),  \
133094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(outData, &outDataCore));  \
134094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&outDataCore, outData)
135094332d3Sopenharmony_ci
136094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_FINISH(handle, paramSet, inData, outData, ret, func)  \
137094332d3Sopenharmony_ci    TargetBlob handleCore = {0};  \
138094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
139094332d3Sopenharmony_ci    TargetBlob inDataCore = {0};  \
140094332d3Sopenharmony_ci    TargetBlob outDataCore = {0};  \
141094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(handle, &handleCore)  \
142094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
143094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(inData, &inDataCore)  \
144094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(outData, &outDataCore)  \
145094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(handle, &handleCore),  \
146094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
147094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(inData, &inDataCore),  \
148094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(outData, &outDataCore));  \
149094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&outDataCore, outData)
150094332d3Sopenharmony_ci
151094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_ABORT(handle, paramSet, ret, func)  \
152094332d3Sopenharmony_ci    TargetBlob handleCore = {0};  \
153094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
154094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(handle, &handleCore)  \
155094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
156094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(handle, &handleCore),  \
157094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore));
158094332d3Sopenharmony_ci
159094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_CHECKKEYVALIDITY(paramSet, key, ret, func)  \
160094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
161094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
162094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
163094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
164094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
165094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(key, &keyCore));
166094332d3Sopenharmony_ci
167094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_ATTESTKEY(key, paramSet, certChain, ret, func)  \
168094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
169094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
170094332d3Sopenharmony_ci    TargetBlob certChainCore = {0};  \
171094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
172094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
173094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(certChain, &certChainCore)  \
174094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
175094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
176094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(certChain, &certChainCore));  \
177094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&certChainCore, certChain)
178094332d3Sopenharmony_ci
179094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_GENERATERANDOM(paramSet, random, ret, func)  \
180094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
181094332d3Sopenharmony_ci    TargetBlob randomCore = {0};  \
182094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
183094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(random, &randomCore)  \
184094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
185094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(random, &randomCore));  \
186094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&randomCore, random)
187094332d3Sopenharmony_ci
188094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_SIGN(key, paramSet, srcData, signature, ret, func) \
189094332d3Sopenharmony_ci    TargetBlob keyCore = {0}; \
190094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL; \
191094332d3Sopenharmony_ci    TargetBlob srcDataCore = {0}; \
192094332d3Sopenharmony_ci    TargetBlob signatureCore = {0}; \
193094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore) \
194094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore) \
195094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(srcData, &srcDataCore) \
196094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(signature, &signatureCore) \
197094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore), \
198094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore), \
199094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(srcData, &srcDataCore), \
200094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(signature, &signatureCore)); \
201094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&signatureCore, signature)
202094332d3Sopenharmony_ci
203094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_VERIFY(key, paramSet, srcData, signature, ret, func)  \
204094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
205094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
206094332d3Sopenharmony_ci    TargetBlob srcDataCore = {0};  \
207094332d3Sopenharmony_ci    TargetBlob signatureCore = {0};  \
208094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
209094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
210094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(srcData, &srcDataCore)  \
211094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(signature, &signatureCore)  \
212094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
213094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
214094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(srcData, &srcDataCore),  \
215094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(signature, &signatureCore));
216094332d3Sopenharmony_ci
217094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_ENCRYPT(key, paramSet, plainText, cipherText, ret, func)  \
218094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
219094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
220094332d3Sopenharmony_ci    TargetBlob plainTextCore = {0};  \
221094332d3Sopenharmony_ci    TargetBlob cipherTextCore = {0};  \
222094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
223094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
224094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(plainText, &plainTextCore)  \
225094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(cipherText, &cipherTextCore)  \
226094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
227094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
228094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(plainText, &plainTextCore),  \
229094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(cipherText, &cipherTextCore));  \
230094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&cipherTextCore, cipherText)
231094332d3Sopenharmony_ci
232094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_DECRYPT(key, paramSet, cipherText, plainText, ret, func)  \
233094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
234094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
235094332d3Sopenharmony_ci    TargetBlob cipherTextCore = {0};  \
236094332d3Sopenharmony_ci    TargetBlob plainTextCore = {0};  \
237094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
238094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
239094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(cipherText, &cipherTextCore)  \
240094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(plainText, &plainTextCore)  \
241094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
242094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
243094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(cipherText, &cipherTextCore),  \
244094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(plainText, &plainTextCore));  \
245094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&plainTextCore, plainText)
246094332d3Sopenharmony_ci
247094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_AGREEKEY(paramSet, privateKey, peerPublicKey, agreedKey, ret, func)  \
248094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
249094332d3Sopenharmony_ci    TargetBlob privateKeyCore = {0};  \
250094332d3Sopenharmony_ci    TargetBlob peerPublicKeyCore = {0};  \
251094332d3Sopenharmony_ci    TargetBlob agreedKeyCore = {0};  \
252094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
253094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(privateKey, &privateKeyCore)  \
254094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(peerPublicKey, &peerPublicKeyCore)  \
255094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(agreedKey, &agreedKeyCore)  \
256094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
257094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(privateKey, &privateKeyCore),  \
258094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(peerPublicKey, &peerPublicKeyCore),  \
259094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(agreedKey, &agreedKeyCore));  \
260094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&agreedKeyCore, agreedKey)
261094332d3Sopenharmony_ci
262094332d3Sopenharmony_ci
263094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_DERIVEKEY(paramSet, kdfKey, derivedKey, ret, func)  \
264094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
265094332d3Sopenharmony_ci    TargetBlob kdfKeyCore = {0};  \
266094332d3Sopenharmony_ci    TargetBlob derivedKeyCore = {0};  \
267094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
268094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(kdfKey, &kdfKeyCore)  \
269094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(derivedKey, &derivedKeyCore)  \
270094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
271094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(kdfKey, &kdfKeyCore),  \
272094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(derivedKey, &derivedKeyCore));  \
273094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&derivedKeyCore, derivedKey)
274094332d3Sopenharmony_ci
275094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_MAC(key, paramSet, srcData, mac, ret, func)  \
276094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
277094332d3Sopenharmony_ci    TargetBlob keyCore = {0};  \
278094332d3Sopenharmony_ci    TargetBlob srcDataCore = {0};  \
279094332d3Sopenharmony_ci    TargetBlob macCore = {0};  \
280094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
281094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(key, &keyCore)  \
282094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(srcData, &srcDataCore)  \
283094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(mac, &macCore)  \
284094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(key, &keyCore),  \
285094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
286094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(srcData, &srcDataCore),  \
287094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(mac, &macCore));  \
288094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&macCore, mac)
289094332d3Sopenharmony_ci
290094332d3Sopenharmony_ci#define HDI_CONVERTER_FUNC_UPGRADEKEY(oldKey, paramSet, newKey, ret, func)  \
291094332d3Sopenharmony_ci    TargetParamSet *paramSetCore = NULL;  \
292094332d3Sopenharmony_ci    TargetBlob oldKeyCore = {0};  \
293094332d3Sopenharmony_ci    TargetBlob newKeyCore = {0};  \
294094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_PARAMSET(paramSet, paramSetCore)  \
295094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(oldKey, &oldKeyCore)  \
296094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_IN_BLOB(newKey, &newKeyCore)  \
297094332d3Sopenharmony_ci    ret = (func)(HDI_ADAPTER_PARAM(oldKey, &oldKeyCore),  \
298094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(paramSet, paramSetCore),  \
299094332d3Sopenharmony_ci                 HDI_ADAPTER_PARAM(newKey, &newKeyCore));  \
300094332d3Sopenharmony_ci    HDI_CONVERTER_PARAM_OUT_BLOB(&newKeyCore, newKey)
301094332d3Sopenharmony_ci
302094332d3Sopenharmony_ci#undef HUKS_NULL_POINTER
303094332d3Sopenharmony_ci
304094332d3Sopenharmony_ci#ifdef __cplusplus
305094332d3Sopenharmony_ci#define HUKS_NULL_POINTER nullptr
306094332d3Sopenharmony_ci#else
307094332d3Sopenharmony_ci#define HUKS_NULL_POINTER NULL
308094332d3Sopenharmony_ci#endif
309094332d3Sopenharmony_ci
310094332d3Sopenharmony_ci#define HUKS_HDI_IF_NOT_SUCC_RETURN(RESULT, ERROR_CODE) \
311094332d3Sopenharmony_ciif ((RESULT) != HUKS_SUCCESS) { \
312094332d3Sopenharmony_ci    return (ERROR_CODE); \
313094332d3Sopenharmony_ci}
314094332d3Sopenharmony_ci
315094332d3Sopenharmony_ci#define HUKS_HDI_IF_NULL_LOGE_RETURN(OBJECT, ERROR_CODE, LOG_MESSAGE, ...) \
316094332d3Sopenharmony_ciif ((OBJECT) == HUKS_NULL_POINTER) { \
317094332d3Sopenharmony_ci    HDF_LOGE(LOG_MESSAGE, ##__VA_ARGS__); \
318094332d3Sopenharmony_ci    return (ERROR_CODE); \
319094332d3Sopenharmony_ci}
320094332d3Sopenharmony_ci
321094332d3Sopenharmony_ci#endif
322