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, ¶m);
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, ¶m);
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, ¶m);
1036 EXPECT_EQ(ERR_INVALID_PARA, ret);
1037 }
1038 }
1039 } // namespace DslmUnitTest
1040 } // namespace Security
1041 } // namespace OHOS