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