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