• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "dslm_oem_property_test.h"
17 
18 #include <gtest/gtest.h>
19 
20 #include "file_ex.h"
21 #include "nativetoken_kit.h"
22 #include "securec.h"
23 #include "token_setproc.h"
24 
25 #include "device_security_defines.h"
26 #include "dslm_credential.h"
27 #include "dslm_credential_utils.h"
28 #include "dslm_crypto.h"
29 #include "external_interface_adapter.h"
30 #include "hks_adapter.h"
31 #include "hks_type.h"
32 #include "utils_mem.h"
33 #include "utils_tlv.h"
34 
35 using namespace std;
36 using namespace std::chrono;
37 using namespace testing;
38 using namespace testing::ext;
39 
40 // for testing
41 extern "C" {
42 extern int32_t EcdsaVerify(const struct DataBuffer *srcData, const struct DataBuffer *sigData,
43     const struct DataBuffer *pbkData, uint32_t algorithm);
44 extern int32_t FillHksParamSet(struct HksParamSet **paramSet, struct HksParam *param, int32_t paramNums);
45 extern int32_t HksGenerateKeyAdapter(const struct HksBlob *keyAlias);
46 extern int32_t BufferToHksCertChain(const uint8_t *data, uint32_t dataLen, struct HksCertChain *hksCertChain);
47 extern int32_t HksCertChainToBuffer(const struct HksCertChain *hksCertChain, uint8_t **data, uint32_t *dataLen);
48 extern void DestroyHksCertChain(struct HksCertChain *certChain);
49 extern int32_t ConstructHksCertChain(struct HksCertChain **certChain,
50     const struct HksCertChainInitParams *certChainParam);
51 }
52 
53 namespace OHOS {
54 namespace Security {
55 namespace DslmUnitTest {
SetUpTestCase()56 void DslmOemPropertyTest::SetUpTestCase()
57 {
58 }
TearDownTestCase()59 void DslmOemPropertyTest::TearDownTestCase()
60 {
61 }
SetUp()62 void DslmOemPropertyTest::SetUp()
63 {
64 }
TearDown()65 void DslmOemPropertyTest::TearDown()
66 {
67 }
68 
69 /**
70  * @tc.name: VerifyDslmCredential_case4
71  * @tc.desc: function VerifyDslmCredential with malformed input
72  * @tc.type: FUNC
73  * @tc.require: issueNumber
74  */
75 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case1, TestSize.Level0)
76 {
77     int32_t ret;
78     const char *cred = "test";
79     DslmCredInfo info;
80     AttestationList list;
81     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
82     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
83 
84     ret = VerifyDslmCredential(cred, nullptr, &list);
85     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
86 
87     ret = VerifyDslmCredential(cred, &info, &list);
88     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
89 
90     ret = VerifyDslmCredential(nullptr, &info, &list);
91     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
92 }
93 
94 /**
95  * @tc.name: VerifyDslmCredential_case2
96  * @tc.desc: function VerifyDslmCredential with malformed input
97  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
98  * @tc.type: FUNC
99  * @tc.require: issueNumber
100  */
101 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case2, TestSize.Level0)
102 {
103     DslmCredInfo info;
104     AttestationList list;
105     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
106     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
107 
108     {
109         const char *cred = "eyJ0eXAiOiAiRFNMIn0=";
110 
111         int32_t ret = VerifyDslmCredential(cred, &info, &list);
112         EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
113     }
114 
115     {
116         const char *cred = "eyJ0eXAiOiAiRFNMIn0=."
117                            "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjo"
118                            "gInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnbl"
119                            "RpbWUiOiAiMjAyMjExMjYxNzMzNDMiLCAidmVyc2lvbiI6ICIxLjAuMSJ9";
120 
121         int32_t ret = VerifyDslmCredential(cred, &info, &list);
122         EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
123     }
124 
125     {
126         const char *cred = "eyJ0eXAiOiAiRFNMIn0=."
127                            "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjo"
128                            "gInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnbl"
129                            "RpbWUiOiAiMjAyMjExMjYxNzMzNDMiLCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGUCMEPpiP8hOZlve/"
130                            "H81B7AvL4Fuwe8YYAdKckLEOcEQKKTiNRM6irjXSwboMppAFNMSgIxAILC1S6KMp6Zp2ACppXF3j3fV0PBdLZOSO1Lm"
131                            "9sqtdiJ5FidaAaMYlwdLMy3vfBeSg==";
132 
133         int32_t ret = VerifyDslmCredential(cred, &info, &list);
134         EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
135     }
136 }
137 
138 /**
139  * @tc.name: VerifyDslmCredential_case3
140  * @tc.desc: function VerifyDslmCredential with malformed input
141  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
142  * @tc.type: FUNC
143  * @tc.require: issueNumber
144  */
145 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case3, TestSize.Level0)
146 {
147     DslmCredInfo info;
148     AttestationList list;
149     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
150     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
151 
152     {
153         const char *cred = "eyJ0eXAiOiAiRFNMIn0=.";
154 
155         int32_t ret = VerifyDslmCredential(cred, &info, &list);
156         EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
157     }
158 
159     {
160         const char *cred = "eyJ0eXAiOiAiRFNMIn0=."
161                            "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjo"
162                            "gInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnbl"
163                            "RpbWUiOiAiMjAyMjExMjYxNzMzNDMiLCAidmVyc2lvbiI6ICIxLjAuMSJ9.";
164 
165         int32_t ret = VerifyDslmCredential(cred, &info, &list);
166         EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
167     }
168 
169     {
170         const char *cred = "eyJ0eXAiOiAiRFNMIn0=."
171                            "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjo"
172                            "gInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnbl"
173                            "RpbWUiOiAiMjAyMjExMjYxNzMzNDMiLCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGUCMEPpiP8hOZlve/"
174                            "H81B7AvL4Fuwe8YYAdKckLEOcEQKKTiNRM6irjXSwboMppAFNMSgIxAILC1S6KMp6Zp2ACppXF3j3fV0PBdLZOSO1Lm"
175                            "9sqtdiJ5FidaAaMYlwdLMy3vfBeSg==.";
176 
177         int32_t ret = VerifyDslmCredential(cred, &info, &list);
178         EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
179     }
180 }
181 
182 /**
183  * @tc.name: VerifyDslmCredential_case4
184  * @tc.desc: function VerifyDslmCredential with malformed input
185  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
186  * @tc.type: FUNC
187  * @tc.require: issueNumber
188  */
189 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case4, TestSize.Level0)
190 {
191     DslmCredInfo info;
192     AttestationList list;
193     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
194     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
195 
196     // malformed attestation makes SplitCredentialAttestationList()
197     // failed when DslmCreateJson()
198     const char *cred =
199         "eyJ0eXAiOiAiRFNMIn0=."
200         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
201         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjYxNzMzNDMi"
202         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGUCMEPpiP8hOZlve/"
203         "H81B7AvL4Fuwe8YYAdKckLEOcEQKKTiNRM6irjXSwboMppAFNMSgIxAILC1S6KMp6Zp2ACppXF3j3fV0PBdLZOSO1Lm9sqtdiJ5FidaAaM"
204         "YlwdLMy3vfBeSg==."
205         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
206         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
207         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HVUNNUUNIUVdzYXNYc1NpL3dJUThmWW5PRlhsaWhTem"
208         "5ETG1RSjBEOGp4U3RVM2Z2bk4xZkgzUVJJUnRzM1lIK293bE9zQ01EY2pJU0pOK2J6M2g0VUU2UTl1NW92K0RHcFRHL2Vqd0xTU2FyMHJz"
209         "Z09ZSVovODdRb0p2QllaM2hFamlDcWQ1dz09In0sIHsidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQV"
210         "FFTEEySUFCRkRMR2M4YlhQT2RBYVpLN25OQUZrYkRoVHBwcTNaQW92T3FKZDJKMy9vdW14eG84QnQ4ZGhiQjBtR3FHQjE4V0hpTkUwNFRC"
211         "S1RvYU9lQ3NtZEZ0dUtXcEtwZEtIRDdGL3YvaXhxbHd6MnMzSk9scFQ3dUQzbjNieHFaVHJzMnFnPT0iLCAic2lnbmF0dXJlIjxxIk1HUU"
212         "NNSGthczBkZDgwUVpiQVB6eElhMXhBYmd1WlxxNjU0T29rL2VGR2M0ekxLczlqYjVKK24xxHJDcytoa0JrR0N0b3dJd1pYcGlYUjRiS1h3"
213         "RUlTZmdpSDI4dkZaZVQxcFJCcnFkSHd2d3ErOXxxxWQzMkhkeC90YWhHZ1kySHVZZFNHZDUifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3"
214         "dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJEVTVaYkhESGl2TGgzRFN4UDEwbGluL2FIMXJabG1XMnBMZ3JwZ3BiL0lnWkkr"
215         "MzJyWC9QdFhURGZWYmVyRG93VkhURTJ0MFZMNzlnQ2wrbUVCL1dBeDVEZW1lamlMNTJ6S0l6M2RTNWJxVHdYVExvRHZTSml3Z3dxYmZPME"
216         "ZtK3c9PSIsICJzaWxxYXR1cmUiOiAiTUdRQ01HWlI0MUdsd1RnL0xUMGtFT3lTZnRHTDBlV04xx2dXdFo0NTZ2VkdqMm56WnhsamFlN2pv"
217         "eWw4cWZHNjZSTUdTQUl3S2M3V2VpQ1c1UlFGSjROWitSRUErNVNpMHhRVFpOdzlhb1FTUG5LVTA0L2ZIWUhkVERNWitncUY3U3RJMDZTbS"
218         "J9XQ==";
219 
220     int32_t ret = VerifyDslmCredential(cred, &info, &list);
221     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
222 }
223 
224 /**
225  * @tc.name: VerifyDslmCredential_case5
226  * @tc.desc: function VerifyDslmCredential with malformed input
227  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
228  * @tc.type: FUNC
229  * @tc.require: issueNumber
230  */
231 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case5, TestSize.Level0)
232 {
233     DslmCredInfo info;
234     AttestationList list;
235     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
236     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
237 
238     // malformed attestation makes SplitCredentialAttestationList()
239     // failed when DslmGetJsonFieldJsonArraySize()
240     const char *cred =
241         "eyJ0eXAiOiAiRFNMIn0=."
242         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
243         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxNzQzMzUi"
244         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMA0DfA8wWdMn08lA8h76mpNadU0EJIoJGmaub6ccWZynHaPcSsMtCz6CrNTYMcP9+"
245         "QIwGc5T3K0csJUYxnFgvgfMuq2rHPzACTls0b7e+s8pZtsK97MFzwIxX6oskIYxkVra."
246         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
247         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
248         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HVUNNSC9LWDVDVmljZ3ZQYmUvYzFWUTl1eFV5N2x6ZX"
249         "lMQmtQYkc4UnNLcURKSERRK1NZeFpoZWd5SzZRZ3JXbTVhcUFJeEFJcHhpNVd1eG5QeXNvZ3MreE1YWmU5ZXVJSHFxUzlmdWtrK1ROQzhv"
250         "dXFjU29Wd3RkbUgzSUpNb091b3JQdFpiZz09In0sIHsidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQV"
251         "FFTEEySUFCRkRMR2M4YlhQT2RBYVpLN25OQUZrYkRoVHBwcTNaQW92T3FKZDJKMy9vdW14eG84QnQ4ZGhiQjBtR3FHQjE4V0hpTkUwNFRC"
252         "S1RvYU9lQ3NtZEZ0dUtXcEtwZEtIRDdGL3YvaXhxbHd6MnMzSk9scFQ3dUQzbjNieHFaVHJzMnFnPT0iLCAic2lnbmF0dXJlIjogIk1HUU"
253         "NNSFU3b3M3UEgzd0ttcDdmN0krUFNlRzY3K2cvWkRwZE1XM1ZwMWVhUEgzVEpCendSTlJKNE83SlNneE4zZjVCbVFJd0ZUOHBBTVVLNTY0"
254         "NXRTNDZnQ3d5UzdxM2RKWElMbGJhVkxCeWVZY0RMN3B2WUZERWhPSlV0aEhPdGoxRnZxQ0wifV0=";
255 
256     int32_t ret = VerifyDslmCredential(cred, &info, &list);
257     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
258 }
259 
260 /**
261  * @tc.name: VerifyDslmCredential_case6
262  * @tc.desc: function VerifyDslmCredential with malformed input
263  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
264  * @tc.type: FUNC
265  * @tc.require: issueNumber
266  */
267 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case6, TestSize.Level0)
268 {
269     DslmCredInfo info;
270     AttestationList list;
271     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
272     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
273 
274     // malformed attestation makes SplitCredentialAttestationList()
275     // failed when ParsePublicKeyAttestation() for root key
276     const char *cred =
277         "eyJ0eXAiOiAiRFNMIn0=."
278         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
279         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxODA0Mzki"
280         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9."
281         "MGQCMAGiIvvXg9REZbTBVRy3VCcM8yP11x3R0mfLYQbZr71sAjS2jMJdXzlyJaCK8SQ73wIwW8DDJsYlHKHGPmRZkvS2x+Va4rglp+"
282         "GXWsbP2wYeMeGh/"
283         "degW3Azc7BjbNiUU6M4."
284         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
285         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
286         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNRHRmODVrTldIMkM3UEljbHZNWWVyOG1MdnhFVD"
287         "FPZHUvc0R3RUlEUGFCSGkrZ2JhbzJQZjlqUXdScHkwZGJmcGdJd1hHdVNMUG0xbVNLQXRnNFg5blFYNjdiRTBJNjB4RHRWSEFuRzBGNVFJ"
288         "SSt3UFBEYlE2L2wxOHpHQ21LcjlJck0ifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQT"
289         "JJQUJGRExHYzhiWFBPZEFhWks3bk5BRmtiRGhUcHBxM1pBb3ZPcUpkMkozL291bXh4bzhCdDhkaGJCMG1HcUdCMThXSGlORTA0VEJLVG9h"
290         "T2VDc21kRnR1S1dwS3BkS0hEN0Yvdi9peHFsd3oyczNKT2xwVDd1RDNuM2J4cVpUcnMycWc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01IQ3"
291         "NncFVtcFZCamlraTduOHlBb1ZBajROUnI1R1dLcXJhUitramc4MllKWnh4cFV1VlI5QWJjZEFZaUFQcGdEUUl3ZWhxenB2MXNwemd0elho"
292         "cnY0cGdONVcvdVdRZFRHclk3bndOdldaTE04M0JReG1aSW1oQ0thSFZrejlJeWlJcSJ9LCB7InNlY3JldGtleSI6ICJNSG93RkFZSEtvWk"
293         "l6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCRFU1WmJIREhpdkxoM0RTeFAxMGxpbi9hSDFyWmxtVzJwTGdycGdwYi9JZ1pJKzMyclgvUHRY"
294         "VERmVmJlckRvd1ZIVEUydDBWTDc5Z0NsK21FQi9XQXg1RGVtZWppTDUyektJejNkUzVicVR3WFRMb0R2U0ppd2d3cWJmTzBGbSt3PT0iLC"
295         "Aic2lnbmF0dXJlIjogIk1HUUNNQ2xvdDJqTWVRN3RlTzJVRXVkSjE0VDVIVTArWFd5cVYzcE4zaElSOXZkaVdXVGhVSmlkRTQvRzZjaVU3"
296         "Tjh6N2dJd09weDd6MHdhbDl4SlRERURIZjBsZlU5Z2FCVXRreVkrM2Zmd2FlaVpmVVJteWpUQ1RveitSdVpibjRxUzhtclkifV0=";
297 
298     int32_t ret = VerifyDslmCredential(cred, &info, &list);
299     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
300 }
301 
302 /**
303  * @tc.name: VerifyDslmCredential_case7
304  * @tc.desc: function VerifyDslmCredential with malformed input
305  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
306  * @tc.type: FUNC
307  * @tc.require: issueNumber
308  */
309 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case7, TestSize.Level0)
310 {
311     DslmCredInfo info;
312     AttestationList list;
313     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
314     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
315 
316     // malformed attestation makes SplitCredentialAttestationList()
317     // failed when ParsePublicKeyAttestation() for intermediate key
318     const char *cred =
319         "eyJ0eXAiOiAiRFNMIn0=."
320         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
321         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxODA3Mzci"
322         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMCIp5PS8K+rFeHY0uQU9e/"
323         "6Xa3mv+GEzZl0POKBspU+2Qh9PAKmFr8yFgzvWVV8M0QIwLk2GUeWOa46BqF4klWphRZmXZ/"
324         "lnDOfoDIILQdCDsV1UpObyol6i1fOYp3AF1DpS."
325         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
326         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
327         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNR29iWVhGM2VHYjZpTm9DQU4ySmI4dkliajY4VV"
328         "A4eWlleGxaa2R4VlZVNDEvL2I3cDBVa01LbmtnbFFNNnFhOHdJd2F3RDVoNXI2N25yRW5PRzJ4NUNBVVpwZkJTNmJZdEUrR0dPODdwVHRl"
329         "WngvZG5uRXk1UlE5VElYRENzS0F4aWYifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQT"
330         "JJQUJGRExHYzhiWFBPZEFhWks3bk5BRmtiRGhUcHBxM1pBb3ZPcUpkMkozL291bXh4bzhCdDhkaGJCMG1HcUdCMThXSGlORTA0VEJLVG9h"
331         "T2VDc21kRnR1S1dwS3BkS0hEN0Yvdi9peHFsd3oyczNKT2xwVDd1RDNuM2J4cVpUcnMycWc9PSIsICJuby1zaWciOiAiTUdRQ01DTXBhc0"
332         "ZlUFdvd01aOTRXc1lwR0ZXQ3l4SDJTamU0OWozTTVwVWJkdHdEeUlpNDZLSUJEQ1c4Rnl1dXBsYTBSQUl3WkFSaXZlaUN6MWd5bk5yOXhM"
333         "S0hHVTgvb05WMFh1NEYrY3lHcmIveFA0bkNmaVBtN0N5Q29ycFljVjREN250MiJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWUhLb1"
334         "pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkRVNVpiSERIaXZMaDNEU3hQMTBsaW4vYUgxclpsbVcycExncnBncGIvSWdaSSszMnJYL1B0"
335         "WFREZlZiZXJEb3dWSFRFMnQwVkw3OWdDbCttRUIvV0F4NURlbWVqaUw1MnpLSXozZFM1YnFUd1hUTG9EdlNKaXdnd3FiZk8wRm0rdz09Ii"
336         "wgInNpZ25hdHVyZSI6ICJNR1VDTVFDR1hoRlA4SnVoWnRDekZQZ1JpL1NZNXNNNEJqYmdhRFRvSkFaNFcxdXFzV05sSmFUZjJXREg2T2l2"
337         "bEs2QkhYZ0NNQXhLc3pNRzFsYStSYzVDNnlubEthS3pVMnZnRVJYbXFDcmFwQWs3L0pzYitRVGxHbGZJT3plQXhJbUIybmFuZHc9PSJ9XQ"
338         "==";
339 
340     int32_t ret = VerifyDslmCredential(cred, &info, &list);
341     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
342 }
343 
344 /**
345  * @tc.name: VerifyDslmCredential_case8
346  * @tc.desc: function VerifyDslmCredential with malformed input
347  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
348  * @tc.type: FUNC
349  * @tc.require: issueNumber
350  */
351 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case8, TestSize.Level0)
352 {
353     DslmCredInfo info;
354     AttestationList list;
355     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
356     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
357 
358     // malformed attestation makes SplitCredentialAttestationList()
359     // failed when ParsePublicKeyAttestation() for last key
360     const char *cred =
361         "eyJ0eXAiOiAiRFNMIn0=."
362         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
363         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxODExNTUi"
364         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMF8Z7Ql+"
365         "YrX4TEcFRVGwfKMRR2og3SYe9AaBUgR0szDXzpA1RKl3mEkzR4lAQ6Iw8AIwI498oHh9d80CveF41ntRSoxLT3VtpG+BVnTgWGe6wUm4/"
366         "egsSNTHEgeUDjU+SrGp."
367         "W3sibm8tcHVibGljIjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJCKzNMclZRTXdxaXBzZWc5QUFPS3AwMkV4M0"
368         "o5MmVTN2srSTlwUk9adW84VkVCZW9vMXpGKzYxaG1VTlMya2M3Rzc1MFU4TE5PalRqaFRUanY1bUJCN0F2eGdQMzBzd3dIMnV0VWhzOEZH"
369         "MDBBTGw5Rm5YVmxKY2loajlIYnRaM2c9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01BT0F6ajluMFVkSUtrWWZrWjN2SkJMOWQ5WGpSMUxQMj"
370         "lwNXBwVUJ4bjRrVGRBTzN1OGh6bVBySWFQdkEwRTR6d0l3VVpscm03dmlhUUdoL3IxY2tjRW1BNEpYTVM1UGwvcUdMdTJUSnd3RUtjMnBO"
371         "MzVHbXB5bExUV2xIWHpVZC90MyJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQk"
372         "ZETEdjOGJYUE9kQWFaSzduTkFGa2JEaFRwcHEzWkFvdk9xSmQySjMvb3VteHhvOEJ0OGRoYkIwbUdxR0IxOFdIaU5FMDRUQktUb2FPZUNz"
373         "bWRGdHVLV3BLcGRLSEQ3Ri92L2l4cWx3ejJzM0pPbHBUN3VEM24zYnhxWlRyczJxZz09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUVKWnlUbj"
374         "dRMG9GUUdmMzl2TUJSa3pjeFcxSE5RZWplbjYxNG12UjA2eHNIejU4Q2FKUFB5UldKbVEzbWRma1hBSXdZODBodmxCWWNFczBDdXc1c1h3"
375         "Vi95QkJwWHFzTU1JdlplM1hkbTFpZVhlY1RjTFBXMHdnU0VUZVJWeDdRaE4vIn0sIHsidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWk"
376         "l6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCRFU1WmJIREhpdkxoM0RTeFAxMGxpbi9hSDFyWmxtVzJwTGdycGdwYi9JZ1pJKzMyclgvUHRY"
377         "VERmVmJlckRvd1ZIVEUydDBWTDc5Z0NsK21FQi9XQXg1RGVtZWppTDUyektJejNkUzVicVR3WFRMb0R2U0ppd2d3cWJmTzBGbSt3PT0iLC"
378         "Aic2lnbmF0dXJlIjogIk1HUUNNQ3ZCQ3VqTUNTMXBTS3ZMRjJ1U3VRQUlrb3UrU2Fhb1ZXajFsWFVWU3A0bjZqeWRyL2NRQU81VFZGODZ3"
379         "ODl1OXdJd0FXZ2ZlRWxDRWNmTXgwNzkra2pEQjlTRHdZdFRqMWVYWWljRHREOVV6b0tkcm1uNlhPeStsZ21vVHpWd2xtbUIifV0=";
380 
381     int32_t ret = VerifyDslmCredential(cred, &info, &list);
382     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
383 }
384 
385 /**
386  * @tc.name: VerifyDslmCredential_case9
387  * @tc.desc: function VerifyDslmCredential with malformed input
388  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
389  * @tc.type: FUNC
390  * @tc.require: issueNumber
391  */
392 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case9, TestSize.Level0)
393 {
394     DslmCredInfo info;
395     AttestationList list;
396     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
397     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
398 
399     // add algorithm to PublicKeyAttestation, just for coverage
400     const char *cred =
401         "eyJ0eXAiOiAiRFNMIn0=."
402         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
403         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxODIwMTMi"
404         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMFICCTcS8DeMzex9czJn049f/"
405         "rJGaRRQKNoxA0d7Cszdq2w1m9XyCmPhG4kARQ6T0gIwZTkJspsaEQ3F/"
406         "5+NwAaE+MemIdCE79kDCaFAYWEM2GwDFmlMGA7XI2PxQ3b7EsBL."
407         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
408         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
409         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNR3dVejlydDVEcUhHRmJBTnVTMTZNZEQ5THJtWG"
410         "5EMnBGOTI5U2U0Ujk3Ui91TUp1eGVMejUvSW9uelVBQmNYaWdJd05oc3dMRjhVS2x4U1B5TUo0WncyMlJTYTdZei93dlZQS1pXL2pjSGha"
411         "V2RLV1YxL3pWbDZ0ODRlYzI0NkpMZ3MiLCAiYWxnb3JpdGhtIjogIlNIQTI1NndpdGhFQ0RTQSJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTU"
412         "hvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZETEdjOGJYUE9kQWFaSzduTkFGa2JEaFRwcHEzWkFvdk9xSmQySjMvb3Vt"
413         "eHhvOEJ0OGRoYkIwbUdxR0IxOFdIaU5FMDRUQktUb2FPZUNzbWRGdHVLV3BLcGRLSEQ3Ri92L2l4cWx3ejJzM0pPbHBUN3VEM24zYnhxWl"
414         "RyczJxZz09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUE5bWc0akowQzhIR1dTM0dkNWlVZXFCaGhPWFRoVUNXRW1PM010TU9qcHUrN3EzeGRm"
415         "VnZySXNRMlF5Z1NOMTZ3SXdmWnlHdi9YczZtRlFEakhFc2E3bzg2NW1LUzl2RmdjYzB4Tzc2OXpGaklmYlU3aUMwS3NDdSsrREdhZnJIWj"
416         "dPIiwgImFsZ29yaXRobSI6ICJTSEEzODR3aXRoRUNEU0EifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lR"
417         "REF3SUlBUUVMQTJJQUJEVTVaYkhESGl2TGgzRFN4UDEwbGluL2FIMXJabG1XMnBMZ3JwZ3BiL0lnWkkrMzJyWC9QdFhURGZWYmVyRG93Vk"
418         "hURTJ0MFZMNzlnQ2wrbUVCL1dBeDVEZW1lamlMNTJ6S0l6M2RTNWJxVHdYVExvRHZTSml3Z3dxYmZPMEZtK3c9PSIsICJzaWduYXR1cmUi"
419         "OiAiTUdRQ01GeUJXUlREVVRUN08vVmYwaHJTYnEvdmZKNGNVckFSVEtYVU9RTXRUZnVUTFNRbEVMTVkxa05sNVIxelB1STI3UUl3VlY2Yk"
420         "dRNFlmYTJuaUJNWlc4WlVVbENDdmM3QUY1ZGdRYVR4NTZneHRNaDFKelNQeUhicnFKd05ZUnBCck9yMyIsICJhbGdvcml0aG0iOiAiU0hB"
421         "Mzk0d2l0aEVDRFNBIn1d";
422 
423     int32_t ret = VerifyDslmCredential(cred, &info, &list);
424     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
425 }
426 
427 /**
428  * @tc.name: VerifyDslmCredential_case10
429  * @tc.desc: function VerifyDslmCredential with malformed input
430  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
431  * @tc.type: FUNC
432  * @tc.require: issueNumber
433  */
434 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case10, TestSize.Level0)
435 {
436     DslmCredInfo info;
437     AttestationList list;
438     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
439     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
440 
441     // malformed attestation makes VerifyCredentialCb()
442     // failed when checking root key
443     const char *cred =
444         "eyJ0eXAiOiAiRFNMIn0=."
445         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
446         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxOTI3MDgi"
447         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMBvYjmGGfMs3SLnyHgqLe5jq78Er8SqzpvEmj/"
448         "h90X6rapua6LFD2C7BCZwuNmTqdgIwWXQWQ82XtSp9xWuCOgl0ix2TTn03zQKN/"
449         "zqzpj436bDEgq+JrRRx3SSvKCNkwvGg."
450         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
451         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
452         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNRWhLUGt6bnVjc09HdFBERTRxWXhrWjVYeEJuY1"
453         "c2VDNsZk9PWVcweFlBVmh0dVFzcmZBb1ljL2pBaHVIaGdYbWdJd0RadFJ1UjJIbFFjekdzbHlOVjFlbU5sREVHQ1pnTldnYlZ4UGpwWWJJ"
454         "QmRYZkUwNnk0Qm1zQTFXUUN6TGFERUgifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQT"
455         "JJQUJGRExHYzhiWFBPZEFhWks3bk5BRmtiRGhUcHBxM1pBb3ZPcUpkMkozL291bXh4bzhCdDhkaGJCMG1HcUdCMThXSGlORTA0VEJLVG9h"
456         "T2VDc21kRnR1S1dwS3BkS0hEN0Yvdi9peHFsd3oyczNKT2xwVDd1RDNuM2J4cVpUcnMycWc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01DWF"
457         "gwUEFJbU5vejlSV2s1YnFjMWxGaUUwODZGaGFrN1dRVlBRNG1VVnNvNzhXRFVoOUNYbERIdVcyZUoydFM5d0l3YmF1NDg4bEZaYS8vbGVD"
458         "RW5PaC9RWXNtZnVKZWlTRU5hYkRjSGJVcnQ3OWFVK09rME9ZTCsrcTVhNEJ0VzFBTiJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWU"
459         "hLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZETEdjOGJYUE9kQWFaSzduTkFGa2JEaFRwcHEzWkFvdk9xSmQySjMvb3VteHhvOEJ0"
460         "OGRoYkIwbUdxR0IxOFdIaU5FMDRUQktUb2FPZUNzbWRGdHVLV3BLcGRLSEQ3Ri92L2l4cWx3ejJzM0pPbHBUN3VEM24zYnhxWlRyczJxZz"
461         "09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUFMam1MTnVJRDNLRDNEODJiRXhKMVExVWZWOHVvbkd1enVoZUIvZFBXNnRDeFZ6dExQdXo4dG54"
462         "K0d4UGdIZVNRSXdVNjhXVW1qazdsZzhWRDlQSU5pTm5NUWJ1RHR3MjlDZndvV0Nra1h0VzhKTjN4b3hXaWpOeXY3MGkrRlNqQUF4In1d";
463 
464     int32_t ret = VerifyDslmCredential(cred, &info, &list);
465     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
466 }
467 
468 /**
469  * @tc.name: VerifyDslmCredential_case11
470  * @tc.desc: function VerifyDslmCredential with malformed input
471  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
472  * @tc.type: FUNC
473  * @tc.require: issueNumber
474  */
475 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case11, TestSize.Level0)
476 {
477     DslmCredInfo info;
478     AttestationList list;
479     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
480     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
481 
482     // malformed attestation makes VerifyCredentialCb()
483     // failed when checking intermediate key
484     const char *cred =
485         "eyJ0eXAiOiAiRFNMIn0=."
486         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
487         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxOTI4MTEi"
488         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9."
489         "MGQCMB6eGkGKFcsVJnohs3UFMYSnEAQ7gr3iz0ejIq9vTQYSyuHiPxRGjDInO3b4jxi0SwIwNI0liljb0PgRLZuLRL6RaXF3c5BXRS/"
490         "QtkW8O/"
491         "kcGXVR19N4gbyU9tUs9Pnj36tA."
492         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
493         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
494         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HVUNNSDJuaTdTZmtDZUIyNm1RMncyK0lFWk56OXd2V2"
495         "R3dTVjQksxZVp2Sjh1K0s3K3ZrNkV2Z0lURnlLcWlqZ2t6R3dJeEFJUHlyNnBIQkprU2hPM3dWUXNmdTgxNGVtNGVXbldUNENDa3h5ZExC"
496         "WDdoSGs3MEl4STlET1h2SEdmMU1IdFQxdz09In0sIHsidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQV"
497         "FFTEEySUFCRkRMR2M4YlhQT2RBYVpLN25OQUZrYkRoVHBwcTNaQW92T3FKZDJKMy9vdW14eG84QnQ4ZGhiQjBtR3FHQjE4V0hpTkUwNFRC"
498         "S1RvYU9lQ3NtZEZ0dUtXcEtwZEtIRDdGL3YvaXhxbHd6MnMzSk9scFQ3dUQzbjNieHFaVHJzMnFnPT0iLCAic2lnbmF0dXJlIjogIk1HUU"
499         "NNRXFtZytYY3plM1gzOCt0UW5Fa2p2TkNYNlJ6V2lpTE1uNzVaaTU5WCtyWGUveVlTcHNHcS8ybjFRUzVHd3hkOXdJd2NlOHJJY3dCUDd0"
500         "dXVBYXY5TTBiK1hKTDZhYUNkLzdyS1F5ekdFdmlIQnlEeHE1ck4wMkd1bXlaZ2o0UmZNdDIifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3"
501         "dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJEVTVaYkhESGl2TGgzRFN4UDEwbGluL2FIMXJabG1XMnBMZ3JwZ3BiL0lnWkkr"
502         "MzJyWC9QdFhURGZWYmVyRG93VkhURTJ0MFZMNzlnQ2wrbUVCL1dBeDVEZW1lamlMNTJ6S0l6M2RTNWJxVHdYVExvRHZTSml3Z3dxYmZPME"
503         "ZtK3c9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01FcW1nK1hjemUzWDM4K3RRbkVranZOQ1g2UnpXaWlMTW43NVppNTlYK3JYZS95WVNwc0dx"
504         "LzJuMVFTNUd3eGQ5d0l3Y2U4ckljd0JQN3R1dUFhdjlNMGIrWEpMNmFhQ2QvN3JLUXl6R0V2aUhCeUR4cTVyTjAyR3VteVpnajRSZk10Mi"
505         "J9XQ==";
506 
507     int32_t ret = VerifyDslmCredential(cred, &info, &list);
508     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
509 }
510 
511 /**
512  * @tc.name: VerifyDslmCredential_case12
513  * @tc.desc: function VerifyDslmCredential with malformed input
514  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
515  * @tc.type: FUNC
516  * @tc.require: issueNumber
517  */
518 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case12, TestSize.Level0)
519 {
520     DslmCredInfo info;
521     AttestationList list;
522     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
523     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
524 
525     // malformed attestation makes VerifyCredentialCb()
526     // failed when checking last key
527     const char *cred =
528         "eyJ0eXAiOiAiRFNMIn0=."
529         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
530         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxOTI5MTMi"
531         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMHRBxkv50DwejU9fnK1ZxCsLRWgbZS1+uHyJ1uTLZ9w1+"
532         "zOnG67IUSppeTUGrBHwdwIwLIdK1tK6JYCUyaXcbcvNhi8bQAjHLHF99TowvQPP/IoqFhMK1p+Yn/"
533         "lgUqzFtkro."
534         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
535         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
536         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNQ1FoN2dJMTN6ZHhLaTBBQU9WWEFVQnQ5UjVOWm"
537         "JyWklnampUc214bmF2ZW1JZzM0YzBwbjlSU2JTckNRZXV0NEFJd0k5VVlDZW14U05kRytHWE9hLzdxOSthVDk2aklNVVFVZjNQcUpMb2pw"
538         "TlRENGhFckxGVG93TkM0NEFIQUExeTAifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQT"
539         "JJQUJGRExHYzhiWFBPZEFhWks3bk5BRmtiRGhUcHBxM1pBb3ZPcUpkMkozL291bXh4bzhCdDhkaGJCMG1HcUdCMThXSGlORTA0VEJLVG9h"
540         "T2VDc21kRnR1S1dwS3BkS0hEN0Yvdi9peHFsd3oyczNKT2xwVDd1RDNuM2J4cVpUcnMycWc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01HUG"
541         "9GVERFYit4QTBLcm9RODQvN3czYXMrVU4yTFhJRDJaeHZBMWR4UVJ1b3FDTHY4cTZhc3p2VkEvRmxOY2dOd0l3TEZySDhuMXNlQWxMbkhN"
542         "b0xEWHQ1bS9JVHVYb3JJdWZTU3Q2enYzVGVnWHhMa3hwakJZVzFJempFM3JOZEF6aSJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWU"
543         "hLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkRVNVpiSERIaXZMaDNEU3hQMTBsaW4vYUgxclpsbVcycExncnBncGIvSWdaSSszMnJY"
544         "L1B0WFREZlZiZXJEb3dWSFRFMnQwVkw3OWdDbCttRUIvV0F4NURlbWVqaUw1MnpLSXozZFM1YnFUd1hUTG9EdlNKaXdnd3FiZk8wRm0rdz"
545         "09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUNRaDdnSTEzemR4S2kwQUFPVlhBVUJ0OVI1TlpiclpJZ2pqVHNteG5hdmVtSWczNGMwcG45UlNi"
546         "U3JDUWV1dDRBSXdJOVVZQ2VteFNOZEcrR1hPYS83cTkrYVQ5NmpJTVVRVWYzUHFKTG9qcE5URDRoRXJMRlRvd05DNDRBSEFBMXkwIn1d";
547 
548     int32_t ret = VerifyDslmCredential(cred, &info, &list);
549     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
550 }
551 
552 /**
553  * @tc.name: VerifyDslmCredential_case13
554  * @tc.desc: function VerifyDslmCredential with malformed input
555  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
556  * @tc.type: FUNC
557  * @tc.require: issueNumber
558  */
559 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case13, TestSize.Level0)
560 {
561     DslmCredInfo info;
562     AttestationList list;
563     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
564     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
565 
566     // malformed attestation makes VerifyCredentialCb()
567     // failed when checking payload signature
568     const char *cred =
569         "eyJ0eXAiOiAiRFNMIn0=."
570         "eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
571         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxOTMxMDgi"
572         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9."
573         "MGQCMGf97swhV6iTcrsLrPOwzwFr0QsX82yHBZo9BK68zSQEJv4LCMIchJnoCnSrW2EfaQIwP98PE/9OP08thSNBS89s5FT/"
574         "z+p+Kvf0hQ3SfZdN7UrvpaTKq9ZGZhP/"
575         "JHJYXfEj."
576         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
577         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
578         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HVUNNUUNHeFNtRWE5TXRSZjNLRHdrNlhDU2N1Smcwc1"
579         "FJNUIvMGJkbnJOUEFQZkJxNVFOT3pVelc1Y0VQRVdzOU5lK1BVQ01FU0JmS3FkNlRmUThZZThuTlFjK1pXNDZlYk96N3VUSDRoUVZQMFQ1"
580         "SjRHOWQ3ZVNEMXg0UzlKbHNTanljUk1Wdz09In0sIHsidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQV"
581         "FFTEEySUFCRkRMR2M4YlhQT2RBYVpLN25OQUZrYkRoVHBwcTNaQW92T3FKZDJKMy9vdW14eG84QnQ4ZGhiQjBtR3FHQjE4V0hpTkUwNFRC"
582         "S1RvYU9lQ3NtZEZ0dUtXcEtwZEtIRDdGL3YvaXhxbHd6MnMzSk9scFQ3dUQzbjNieHFaVHJzMnFnPT0iLCAic2lnbmF0dXJlIjogIk1HVU"
583         "NNUUNBMmZDWUVUS2dKcGJFSkU3Qmc2QlVYMzNSWnZZTU5GdFdwOUpsbnV4a0FOS0RHa29xUXJMelJveGt1cFFSb2ZrQ01FeFYzTmFXVHVP"
584         "U0M4OTBmRjFSVVVYQVdWRVBBRk5FWGlZQzJ4TXVuVWRKZTlUVWNXZHZEakc4TjdkSFRiM01GZz09In0sIHsidXNlclB1YmxpY0tleSI6IC"
585         "JNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCRFU1WmJIREhpdkxoM0RTeFAxMGxpbi9hSDFyWmxtVzJwTGdycGdwYi9J"
586         "Z1pJKzMyclgvUHRYVERmVmJlckRvd1ZIVEUydDBWTDc5Z0NsK21FQi9XQXg1RGVtZWppTDUyektJejNkUzVicVR3WFRMb0R2U0ppd2d3cW"
587         "JmTzBGbSt3PT0iLCAic2lnbmF0dXJlIjogIk1HUUNNSGpXMWpiVTRPdnFld1VWQyt6a1dVdm5NNkJQc2MrZlA2M3BpTTM1UktRYWI0T20w"
588         "cjNvNE1LQjFpZjJmNEd2NXdJd0lEaEdZTTdHcXpVRnloUW1Oc0kvdFdpTnFLcHNpazRZMmZsRDZSNlJWR0QxbjdrMDNoeEhEazh2em1RR3"
589         "RnOTAifV0=";
590 
591     int32_t ret = VerifyDslmCredential(cred, &info, &list);
592     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
593 }
594 
595 /**
596  * @tc.name: VerifyDslmCredential_case14
597  * @tc.desc: function VerifyDslmCredential with malformed input
598  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
599  * @tc.type: FUNC
600  * @tc.require: issueNumber
601  */
602 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case14, TestSize.Level0)
603 {
604     DslmCredInfo info;
605     AttestationList list;
606     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
607     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
608 
609     // malformed payload makes CredentialCbToDslmCredInfo()
610     // failed when DslmCreateJson()
611     const char *cred =
612         "eyJ0eXAiOiAiRFNMIn0=."
613         "eyJ0eXBlIjogImRlYnVnIxxxIm1hbnVmYWN0dXJlIxxxIk9IT1MiLCAiYnJhbmQiOiAixxxxNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsIC"
614         "Jzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjcxOTI3MDgi"
615         "LCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMBvYjmGGfMs3SLnyHgqLe5jq78Er8SqzpvEmj/"
616         "h90X6rapua6LFD2C7BCZwuNmTqdgIwWXQWQ82XtSp9xWuCOgl0ix2TTn03zQKN/"
617         "zqzpj436bDEgq+JrRRx3SSvKCNkwvGg."
618         "W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2VnOUFBT0twMD"
619         "JFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMmtjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVo"
620         "czhGRzAwQUxsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNRWhLUGt6bnVjc09HdFBERTRxWXhrWjVYeEJuY1"
621         "c2VDNsZk9PWVcweFlBVmh0dVFzcmZBb1ljL2pBaHVIaGdYbWdJd0RadFJ1UjJIbFFjekdzbHlOVjFlbU5sREVHQ1pnTldnYlZ4UGpwWWJJ"
622         "QmRYZkUwNnk0Qm1zQTFXUUN6TGFERUgifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQT"
623         "JJQUJGRExHYzhiWFBPZEFhWks3bk5BRmtiRGhUcHBxM1pBb3ZPcUpkMkozL291bXh4bzhCdDhkaGJCMG1HcUdCMThXSGlORTA0VEJLVG9h"
624         "T2VDc21kRnR1S1dwS3BkS0hEN0Yvdi9peHFsd3oyczNKT2xwVDd1RDNuM2J4cVpUcnMycWc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01DWF"
625         "gwUEFJbU5vejlSV2s1YnFjMWxGaUUwODZGaGFrN1dRVlBRNG1VVnNvNzhXRFVoOUNYbERIdVcyZUoydFM5d0l3YmF1NDg4bEZaYS8vbGVD"
626         "RW5PaC9RWXNtZnVKZWlTRU5hYkRjSGJVcnQ3OWFVK09rME9ZTCsrcTVhNEJ0VzFBTiJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWU"
627         "hLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZETEdjOGJYUE9kQWFaSzduTkFGa2JEaFRwcHEzWkFvdk9xSmQySjMvb3VteHhvOEJ0"
628         "OGRoYkIwbUdxR0IxOFdIaU5FMDRUQktUb2FPZUNzbWRGdHVLV3BLcGRLSEQ3Ri92L2l4cWx3ejJzM0pPbHBUN3VEM24zYnhxWlRyczJxZz"
629         "09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUFMam1MTnVJRDNLRDNEODJiRXhKMVExVWZWOHVvbkd1enVoZUIvZFBXNnRDeFZ6dExQdXo4dG54"
630         "K0d4UGdIZVNRSXdVNjhXVW1qazdsZzhWRDlQSU5pTm5NUWJ1RHR3MjlDZndvV0Nra1h0VzhKTjN4b3hXaWpOeXY3MGkrRlNqQUF4In1d";
631 
632     int32_t ret = VerifyDslmCredential(cred, &info, &list);
633     EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
634 }
635 
636 /**
637  * @tc.name: VerifyDslmCredential_case15
638  * @tc.desc: function VerifyDslmCredential with malformed input
639  *           credentials composed in <base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>
640  * @tc.type: FUNC
641  * @tc.require: issueNumber
642  */
643 HWTEST_F(DslmOemPropertyTest, VerifyDslmCredential_case15, TestSize.Level0)
644 {
645     DslmCredInfo info;
646     AttestationList list;
647     memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
648     memset_s(&list, sizeof(AttestationList), 0, sizeof(AttestationList));
649 
650     // success case, for covering MovePublicKeysToAttestationList()
651     const char *cred = "eyJ0eXAiOiAiRFNMIn0=.eyJ0eXBlIjogImRlYnVnIiwgIm1h"
652                        "bnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjog"
653                        "InJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlM"
654                        "ZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjExMjYxNzMzNDMiLCAidmVy"
655                        "c2lvbiI6ICIxLjAuMSJ9.MGUCMEPpiP8hOZlve/H81B7AvL4Fuwe8YYAdKckLEOc"
656                        "EQKKTiNRM6irjXSwboMppAFNMSgIxAILC1S6KMp6Zp2ACppXF3j3fV0PBdLZOSO1"
657                        "Lm9sqtdiJ5FidaAaMYlwdLMy3vfBeSg==.W3sidXNlclB1YmxpY0tleSI6ICJNSG"
658                        "93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQiszTHJWUU13cWlwc2"
659                        "VnOUFBT0twMDJFeDNKOTJlUzdrK0k5cFJPWnVvOFZFQmVvbzF6Ris2MWhtVU5TMm"
660                        "tjN0c3NTBVOExOT2pUamhUVGp2NW1CQjdBdnhnUDMwc3d3SDJ1dFVoczhGRzAwQU"
661                        "xsOUZuWFZsSmNpaGo5SGJ0WjNnPT0iLCAic2lnbmF0dXJlIjogIk1HVUNNUUNIUV"
662                        "dzYXNYc1NpL3dJUThmWW5PRlhsaWhTem5ETG1RSjBEOGp4U3RVM2Z2bk4xZkgzUV"
663                        "JJUnRzM1lIK293bE9zQ01EY2pJU0pOK2J6M2g0VUU2UTl1NW92K0RHcFRHL2Vqd0"
664                        "xTU2FyMHJzZ09ZSVovODdRb0p2QllaM2hFamlDcWQ1dz09In0sIHsidXNlclB1Ym"
665                        "xpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCRk"
666                        "RMR2M4YlhQT2RBYVpLN25OQUZrYkRoVHBwcTNaQW92T3FKZDJKMy9vdW14eG84Qn"
667                        "Q4ZGhiQjBtR3FHQjE4V0hpTkUwNFRCS1RvYU9lQ3NtZEZ0dUtXcEtwZEtIRDdGL3"
668                        "YvaXhxbHd6MnMzSk9scFQ3dUQzbjNieHFaVHJzMnFnPT0iLCAic2lnbmF0dXJlIj"
669                        "ogIk1HUUNNSGthczBkZDgwUVpiQVB6eElhMXhBYmd1WlhwNjU0T29rL2VGR2M0ek"
670                        "tLczlqYjVKK24waHJDcytoa0JrR0N0b3dJd1pYcGlYUjRiS1h3RUlTZmdpSDI4dk"
671                        "ZaZVQxcFJCcnFkSHd2d3ErOXcrdWQzMkhkeC90YWhHZ1kySHVZZFNHZDUifSwgey"
672                        "J1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUU"
673                        "VMQTJJQUJEVTVaYkhESGl2TGgzRFN4UDEwbGluL2FIMXJabG1XMnBMZ3JwZ3BiL0"
674                        "lnWkkrMzJyWC9QdFhURGZWYmVyRG93VkhURTJ0MFZMNzlnQ2wrbUVCL1dBeDVEZW"
675                        "1lamlMNTJ6S0l6M2RTNWJxVHdYVExvRHZTSml3Z3dxYmZPMEZtK3c9PSIsICJzaW"
676                        "duYXR1cmUiOiAiTUdRQ01HWlI0MUdsd1RnL0xUMGtFT3lTZnRHTDBlV04zb2dXdF"
677                        "o0NTZ2VkdqMm56WnhsamFlN2pveWw4cWZHNjZSTUdTQUl3S2M3V2VpQ1c1UlFGSj"
678                        "ROWitSRUErNVNpMHhRVFpOdzlhb1FTUG5LVTA0L2ZIWUhkVERNWitncUY3U3RJMD"
679                        "ZTbSJ9XQ==";
680 
681     int32_t ret = VerifyDslmCredential(cred, &info, &list);
682     EXPECT_EQ(0, ret);
683 }
684 
685 HWTEST_F(DslmOemPropertyTest, EcdsaVerify_case1, TestSize.Level0)
686 {
687     const char *data = "test";
688     uint32_t length = strlen(data) + 1;
689     const DataBuffer srcData = {.length = length, .data = (uint8_t *)data};
690     const DataBuffer sigData = {.length = length, .data = (uint8_t *)data};
691     DataBuffer *pbkData = nullptr;
692     uint32_t algorithm = TYPE_ECDSA_SHA_256;
693 
694     int32_t ret = EcdsaVerify(&srcData, &sigData, pbkData, algorithm);
695     EXPECT_EQ(ERR_INVALID_PARA, ret);
696 
697     ret = EcdsaVerify(nullptr, &sigData, pbkData, algorithm);
698     EXPECT_EQ(ERR_INVALID_PARA, ret);
699 
700     ret = EcdsaVerify(&srcData, nullptr, pbkData, algorithm);
701     EXPECT_EQ(ERR_INVALID_PARA, ret);
702 }
703 
704 HWTEST_F(DslmOemPropertyTest, EcdsaVerify_case2, TestSize.Level0)
705 {
706     const char *data = "test";
707     uint32_t length = strlen(data) + 1;
708     uint32_t algorithm = TYPE_ECDSA_SHA_256;
709 
710     {
711         // malformed srcData
712         const DataBuffer srcData = {.length = length, .data = nullptr};
713         const DataBuffer sigData = {.length = length, .data = (uint8_t *)data};
714         const DataBuffer pbkData = {.length = length, .data = (uint8_t *)data};
715 
716         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
717         EXPECT_EQ(ERR_INVALID_PARA, ret);
718     }
719 
720     {
721         const DataBuffer srcData = {.length = length, .data = (uint8_t *)data};
722         // malformed sigData
723         const DataBuffer sigData = {.length = length, .data = nullptr};
724         const DataBuffer pbkData = {.length = length, .data = (uint8_t *)data};
725 
726         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
727         EXPECT_EQ(ERR_INVALID_PARA, ret);
728     }
729 
730     {
731         const DataBuffer srcData = {.length = length, .data = (uint8_t *)data};
732         const DataBuffer sigData = {.length = length, .data = (uint8_t *)data};
733         // malformed pkgData
734         const DataBuffer pbkData = {.length = length, .data = nullptr};
735 
736         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
737         EXPECT_EQ(ERR_INVALID_PARA, ret);
738     }
739 }
740 
741 HWTEST_F(DslmOemPropertyTest, EcdsaVerify_case3, TestSize.Level0)
742 {
743     const char *data = "test";
744     uint32_t length = strlen(data) + 1;
745     uint32_t algorithm = TYPE_ECDSA_SHA_256;
746 
747     {
748         // malformed srcData
749         const DataBuffer srcData = {.length = 0, .data = (uint8_t *)data};
750         const DataBuffer sigData = {.length = length, .data = (uint8_t *)data};
751         const DataBuffer pbkData = {.length = length, .data = (uint8_t *)data};
752 
753         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
754         EXPECT_EQ(ERR_INVALID_PARA, ret);
755     }
756 
757     {
758         const DataBuffer srcData = {.length = length, .data = (uint8_t *)data};
759         // malformed sigData
760         const DataBuffer sigData = {.length = 0, .data = (uint8_t *)data};
761         const DataBuffer pbkData = {.length = length, .data = (uint8_t *)data};
762 
763         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
764         EXPECT_EQ(ERR_INVALID_PARA, ret);
765     }
766 
767     {
768         const DataBuffer srcData = {.length = length, .data = (uint8_t *)data};
769         const DataBuffer sigData = {.length = length, .data = (uint8_t *)data};
770         // malformed pkgData
771         const DataBuffer pbkData = {.length = 0, .data = (uint8_t *)data};
772 
773         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
774         EXPECT_EQ(ERR_INVALID_PARA, ret);
775     }
776 }
777 
778 HWTEST_F(DslmOemPropertyTest, EcdsaVerify_case4, TestSize.Level0)
779 {
780     const char *data = "test";
781     uint32_t length = strlen(data) + 1;
782     const DataBuffer srcData = {.length = length, .data = (uint8_t *)data};
783     const DataBuffer sigData = {.length = length, .data = (uint8_t *)data};
784     const DataBuffer pbkData = {.length = length, .data = (uint8_t *)data};
785 
786     {
787         uint32_t algorithm = TYPE_ECDSA_SHA_256 + 2;
788 
789         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
790         EXPECT_EQ(ERR_INVALID_PARA, ret);
791     }
792 
793     {
794         uint32_t algorithm = TYPE_ECDSA_SHA_384;
795 
796         int32_t ret = EcdsaVerify(&srcData, &sigData, &pbkData, algorithm);
797         EXPECT_EQ(ERR_ECC_VERIFY_ERR, ret);
798     }
799 }
800 
801 HWTEST_F(DslmOemPropertyTest, FreeAttestationList_case1, TestSize.Level0)
802 {
803     AttestationList list;
804     uint32_t len = 5;
805     uint8_t *dataRoot = (uint8_t *)MALLOC(len);
806     uint8_t *dataIntermediate = (uint8_t *)MALLOC(len);
807     uint8_t *dataLast = (uint8_t *)MALLOC(len);
808     ASSERT_NE(nullptr, dataRoot);
809     ASSERT_NE(nullptr, dataIntermediate);
810     ASSERT_NE(nullptr, dataLast);
811 
812     PublicKey root = {.length = len, .data = dataRoot};
813     PublicKey intermediate = {.length = len, .data = dataIntermediate};
814     PublicKey last = {.length = len, .data = dataLast};
815     list.root = root;
816     list.intermediate = intermediate;
817     list.last = last;
818 
819     {
820         FreeAttestationList(nullptr);
821     }
822 
823     {
824         FreeAttestationList(&list);
825         EXPECT_EQ(0U, list.root.length);
826         EXPECT_EQ(0U, list.intermediate.length);
827         EXPECT_EQ(0U, list.last.length);
828     }
829 }
830 
831 HWTEST_F(DslmOemPropertyTest, ValidateCertChainAdapter_case1, TestSize.Level0)
832 {
833     uint8_t *data = nullptr;
834     uint32_t dataLen = 0;
835     struct DslmInfoInCertChain result;
836     (void)memset_s(&result, sizeof(result), 0, sizeof(result));
837 
838     int32_t ret = ValidateCertChainAdapter(data, dataLen, &result);
839     EXPECT_EQ(ERR_CALL_EXTERNAL_FUNC, ret);
840 }
841 
842 /**
843  * @tc.name: FillHksParamSet_case1
844  * @tc.desc: huks adapter with null input
845  * @tc.type: FUNC
846  * @tc.require: issueNumber
847  */
848 HWTEST_F(DslmOemPropertyTest, FillHksParamSet_case1, TestSize.Level0)
849 {
850     int32_t ret = FillHksParamSet(nullptr, nullptr, 0);
851     EXPECT_EQ(ERR_INVALID_PARA, ret);
852 }
853 
854 /**
855  * @tc.name: HksGenerateKeyAdapter_case1
856  * @tc.desc: huks adapter with malformed input
857  * @tc.type: FUNC
858  * @tc.require: issueNumber
859  */
860 HWTEST_F(DslmOemPropertyTest, HksGenerateKeyAdapter_case1, TestSize.Level0)
861 {
862     int32_t ret = HksGenerateKeyAdapter(nullptr);
863     EXPECT_EQ(ERR_INVALID_PARA, ret);
864 }
865 
866 // just for coverage
867 /**
868  * @tc.name: DestroyDslmInfoInCertChain_case1
869  * @tc.desc: function DestroyDslmInfoInCertChain with null/non-null input
870  * @tc.type: FUNC
871  * @tc.require: issueNumber
872  */
873 HWTEST_F(DslmOemPropertyTest, DestroyDslmInfoInCertChain_case1, TestSize.Level0)
874 {
875     struct DslmInfoInCertChain *info = (struct DslmInfoInCertChain *)MALLOC(sizeof(struct DslmInfoInCertChain));
876     ASSERT_NE(nullptr, info);
877     memset_s(info, sizeof(struct DslmInfoInCertChain), 0, sizeof(struct DslmInfoInCertChain));
878 
879     DestroyDslmInfoInCertChain(nullptr);
880     DestroyDslmInfoInCertChain(info);
881     FREE(info);
882 }
883 
884 // just for coverage
885 /**
886  * @tc.name: InitDslmInfoInCertChain_case1
887  * @tc.desc: function InitDslmInfoInCertChain with null input
888  * @tc.type: FUNC
889  * @tc.require: issueNumber
890  */
891 HWTEST_F(DslmOemPropertyTest, InitDslmInfoInCertChain_case1, TestSize.Level0)
892 {
893     int32_t ret = InitDslmInfoInCertChain(nullptr);
894     EXPECT_EQ(ERR_INVALID_PARA, ret);
895 }
896 
897 /**
898  * @tc.name: BufferToHksCertChain_case1
899  * @tc.desc: function BufferToHksCertChain with malformed input
900  * @tc.type: FUNC
901  * @tc.require: issueNumber
902  */
903 HWTEST_F(DslmOemPropertyTest, BufferToHksCertChain_case1, TestSize.Level0)
904 {
905     {
906         int32_t ret = BufferToHksCertChain(nullptr, 1, nullptr);
907         EXPECT_EQ(ERR_INVALID_PARA, ret);
908     }
909 
910     {
911         const uint8_t data[] = {'0'};
912         int32_t ret = BufferToHksCertChain(data, 0, nullptr);
913         EXPECT_EQ(ERR_INVALID_PARA, ret);
914     }
915 
916     {
917         const uint8_t data[] = {'0'};
918         uint32_t len = 1;
919         struct HksCertChain chain;
920         memset_s(&chain, sizeof(struct HksCertChain), 0, sizeof(struct HksCertChain));
921 
922         int32_t ret = BufferToHksCertChain(data, len, &chain);
923         EXPECT_EQ(ERR_INVALID_PARA, ret);
924     }
925 
926     {
927         uint8_t buff[8];
928         uint32_t len = 8;
929         memset_s(buff, sizeof(buff), 'c', sizeof(buff));
930         TlvCommon *ptr = (TlvCommon *)buff;
931         ptr->tag = 0x99;
932         ptr->len = 4;
933         struct HksCertChain chain;
934         memset_s(&chain, sizeof(struct HksCertChain), 0, sizeof(struct HksCertChain));
935 
936         int32_t ret = BufferToHksCertChain(buff, len, &chain);
937         EXPECT_EQ(SUCCESS, ret);
938         EXPECT_EQ(0U, chain.certsCount);
939     }
940 
941     {
942         uint8_t buff[8];
943         uint32_t len = 8;
944         memset_s(buff, sizeof(buff), 'c', sizeof(buff));
945         TlvCommon *ptr = (TlvCommon *)buff;
946         ptr->tag = 0x110;
947         ptr->len = 4;
948         struct HksCertChain chain;
949         memset_s(&chain, sizeof(struct HksCertChain), 0, sizeof(struct HksCertChain));
950 
951         int32_t ret = BufferToHksCertChain(buff, len, &chain);
952         EXPECT_EQ(SUCCESS, ret);
953         EXPECT_EQ(0U, chain.certsCount);
954     }
955 }
956 
957 /**
958  * @tc.name: HksCertChainToBuffer_case1
959  * @tc.desc: function HksCertChainToBuffer with malformed input
960  * @tc.type: FUNC
961  * @tc.require: issueNumber
962  */
963 HWTEST_F(DslmOemPropertyTest, HksCertChainToBuffer_case1, TestSize.Level0)
964 {
965     uint32_t len = 5;
966     uint8_t *data = nullptr;
967 
968     int32_t ret = HksCertChainToBuffer(nullptr, &data, &len);
969     EXPECT_EQ(ERR_INVALID_PARA, ret);
970 }
971 
972 /**
973  * @tc.name: DestroyHksCertChain_case1
974  * @tc.desc: function DestroyHksCertChain with malformed inputs
975  * @tc.type: FUNC
976  * @tc.require: issueNumber
977  */
978 HWTEST_F(DslmOemPropertyTest, DestroyHksCertChain_case1, TestSize.Level0)
979 {
980     struct HksCertChain *chain = (struct HksCertChain *)MALLOC(sizeof(struct HksCertChain));
981     ASSERT_NE(nullptr, chain);
982     struct HksBlob *blob = (struct HksBlob *)MALLOC(sizeof(struct HksBlob));
983     ASSERT_NE(nullptr, blob);
984 
985     {
986         DestroyHksCertChain(nullptr);
987     }
988 
989     { // cert != NULL && cert.certs == NULL
990         chain->certs = nullptr;
991         DestroyHksCertChain(chain);
992     }
993 
994     { // cert != NULL && cert.certs != NULL && cert.certsCount <= 0
995         chain->certs = blob;
996         chain->certsCount = 0;
997 
998         DestroyHksCertChain(chain);
999     }
1000 
1001     { // cert != NULL && cert.certs != NULL && cert.certsCount == 1 && cert.certs[0].data == NULL
1002         blob->size = 5;
1003         blob->data = nullptr;
1004         chain->certs = blob;
1005         chain->certsCount = 1;
1006 
1007         DestroyHksCertChain(chain);
1008     }
1009 }
1010 
1011 /**
1012  * @tc.name: ConstructHksCertChain_case1
1013  * @tc.desc: function ConstructHksCertChain with malformed inputs
1014  * @tc.type: FUNC
1015  * @tc.require: issueNumber
1016  */
1017 HWTEST_F(DslmOemPropertyTest, ConstructHksCertChain_case1, TestSize.Level0)
1018 {
1019     struct HksCertChain *chain = nullptr;
1020 
1021     {
1022         int32_t ret = ConstructHksCertChain(&chain, nullptr);
1023         EXPECT_EQ(ERR_INVALID_PARA, ret);
1024     }
1025 
1026     {
1027         struct HksCertChainInitParams param;
1028         param.certChainExist = false;
1029         param.certCountValid = true;
1030         param.certDataExist = true;
1031 
1032         int32_t ret = ConstructHksCertChain(&chain, &param);
1033         EXPECT_EQ(ERR_INVALID_PARA, ret);
1034     }
1035 
1036     {
1037         struct HksCertChainInitParams param;
1038         param.certChainExist = true;
1039         param.certCountValid = false;
1040         param.certDataExist = true;
1041 
1042         int32_t ret = ConstructHksCertChain(&chain, &param);
1043         EXPECT_EQ(ERR_INVALID_PARA, ret);
1044     }
1045 
1046     {
1047         struct HksCertChainInitParams param;
1048         param.certChainExist = true;
1049         param.certCountValid = true;
1050         param.certDataExist = false;
1051 
1052         int32_t ret = ConstructHksCertChain(&chain, &param);
1053         EXPECT_EQ(ERR_INVALID_PARA, ret);
1054     }
1055 }
1056 } // namespace DslmUnitTest
1057 } // namespace Security
1058 } // namespace OHOS