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