• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3  * Licensed under the Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  * http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8  * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9  * PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  */
12 
13 #include <gtest/gtest.h>
14 #include <test_defines.h>
15 #include <common_test.h>
16 #include <securec.h>
17 #include <tee_client_api.h>
18 #include <tee_client_type.h>
19 #include <test_log.h>
20 #include <test_tcf_cmdid.h>
21 
22 using namespace testing::ext;
23 
24 /**
25  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TA_SINGLEINSTANCE
26  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TA_SINGLEINSTANCE
27  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
28  */
29 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TA_SINGLEINSTANCE, Function | MediumTest | Level0)
30 {
31     TEEC_Result ret;
32 
33     int rc;
34     TestData value = { 0 };
35     value.cmd = CMD_TEE_GetPropertyAsBool;
36     value.propSet = TEE_PROPSET_CURRENT_TA;
37     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_SINGLEINSTANCE, sizeof(GPD_TA_SINGLEINSTANCE));
38     ASSERT_EQ(rc, 0);
39     value.inBufferLen = sizeof(GPD_TA_SINGLEINSTANCE);
40     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
41     ASSERT_EQ(ret, TEEC_SUCCESS);
42     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
43     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_BOOLEAN);
44     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_BOOLEAN));
45 }
46 
47 /**
48  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TA_MULTISESSION
49  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of  GPD_TA_MULTISESSION
50  * @testcase.expect    : return TEEC_SUCCESS
51  */
52 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TA_MULTISESSION, Function | MediumTest | Level0)
53 {
54     TEEC_Result ret;
55 
56     int rc;
57     TestData value = { 0 };
58     value.cmd = CMD_TEE_GetPropertyAsBool;
59     value.propSet = TEE_PROPSET_CURRENT_TA;
60     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_MULTISESSION, sizeof(GPD_TA_MULTISESSION));
61     ASSERT_EQ(rc, 0);
62     value.inBufferLen = sizeof(GPD_TA_MULTISESSION);
63 
64     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
65     ASSERT_EQ(ret, TEEC_SUCCESS);
66     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
67     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_BOOLEAN);
68     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_BOOLEAN));
69 }
70 
71 /**
72  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TA_INSTANCEKEEPALIVE
73  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TA_INSTANCEKEEPALIVE
74  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
75  */
76 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TA_INSTANCEKEEPALIVE, Function | MediumTest | Level0)
77 {
78     TEEC_Result ret;
79 
80     int rc;
81     TestData value = { 0 };
82     value.cmd = CMD_TEE_GetPropertyAsBool;
83     value.propSet = TEE_PROPSET_CURRENT_TA;
84     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_INSTANCEKEEPALIVE, sizeof(GPD_TA_INSTANCEKEEPALIVE));
85     ASSERT_EQ(rc, 0);
86     value.inBufferLen = sizeof(GPD_TA_INSTANCEKEEPALIVE);
87 
88     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
89     ASSERT_EQ(ret, TEEC_SUCCESS);
90     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
91     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
92     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
93 }
94 
95 /**
96  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_ECC
97  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TEE_CRYPTOGRAPHY_ECC
98  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
99  */
100 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_ECC, Function | MediumTest | Level0)
101 {
102     TEEC_Result ret;
103     int rc;
104 
105     TestData value = { 0 };
106     value.cmd = CMD_TEE_GetPropertyAsBool;
107     value.propSet = TEE_PROPSET_IMPLEMENTATION;
108     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_CRYPTOGRAPHY_ECC, sizeof(GPD_TEE_CRYPTOGRAPHY_ECC));
109     ASSERT_EQ(rc, 0);
110     value.inBufferLen = sizeof(GPD_TEE_CRYPTOGRAPHY_ECC);
111 
112     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
113     ASSERT_EQ(ret, TEEC_SUCCESS);
114     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
115     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
116     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
117 }
118 
119 /**
120  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_NIST
121  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TEE_CRYPTOGRAPHY_NIST
122  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
123  */
124 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_NIST, Function | MediumTest | Level0)
125 {
126     TEEC_Result ret;
127     int rc;
128 
129     TestData value = { 0 };
130     value.cmd = CMD_TEE_GetPropertyAsBool;
131     value.propSet = TEE_PROPSET_IMPLEMENTATION;
132     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_CRYPTOGRAPHY_NIST, sizeof(GPD_TEE_CRYPTOGRAPHY_NIST));
133     ASSERT_EQ(rc, 0);
134     value.inBufferLen = sizeof(GPD_TEE_CRYPTOGRAPHY_NIST);
135 
136     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
137     ASSERT_EQ(ret, TEEC_SUCCESS);
138     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
139     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
140     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
141 }
142 
143 /**
144  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_BSI_R
145  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TEE_CRYPTOGRAPHY_BSI_R
146  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
147  */
148 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_BSI_R, Function | MediumTest | Level0)
149 {
150     TEEC_Result ret;
151     int rc;
152 
153     TestData value = { 0 };
154     value.cmd = CMD_TEE_GetPropertyAsBool;
155     value.propSet = TEE_PROPSET_IMPLEMENTATION;
156     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_CRYPTOGRAPHY_BSI_R, sizeof(GPD_TEE_CRYPTOGRAPHY_BSI_R));
157     ASSERT_EQ(rc, 0);
158     value.inBufferLen = sizeof(GPD_TEE_CRYPTOGRAPHY_BSI_R);
159 
160     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
161     ASSERT_EQ(ret, TEEC_SUCCESS);
162     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
163     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
164     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
165 }
166 
167 /**
168  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_BSI_T
169  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TEE_CRYPTOGRAPHY_BSI_T
170  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
171  */
172 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_BSI_T, Function | MediumTest | Level0)
173 {
174     TEEC_Result ret;
175     int rc;
176 
177     TestData value = { 0 };
178     value.cmd = CMD_TEE_GetPropertyAsBool;
179     value.propSet = TEE_PROPSET_IMPLEMENTATION;
180     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_CRYPTOGRAPHY_BSI_T, sizeof(GPD_TEE_CRYPTOGRAPHY_BSI_T));
181     ASSERT_EQ(rc, 0);
182     value.inBufferLen = sizeof(GPD_TEE_CRYPTOGRAPHY_BSI_T);
183 
184     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
185     ASSERT_EQ(ret, TEEC_SUCCESS);
186     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
187     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
188     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
189 }
190 
191 /**
192  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_IETF
193  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TEE_CRYPTOGRAPHY_IETF
194  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
195  */
196 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_IETF, Function | MediumTest | Level0)
197 {
198     TEEC_Result ret;
199     int rc;
200 
201     TestData value = { 0 };
202     value.cmd = CMD_TEE_GetPropertyAsBool;
203     value.propSet = TEE_PROPSET_IMPLEMENTATION;
204     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_CRYPTOGRAPHY_IETF, sizeof(GPD_TEE_CRYPTOGRAPHY_IETF));
205     ASSERT_EQ(rc, 0);
206     value.inBufferLen = sizeof(GPD_TEE_CRYPTOGRAPHY_IETF);
207 
208     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
209     ASSERT_EQ(ret, TEEC_SUCCESS);
210     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
211     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
212     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
213 }
214 
215 /**
216  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_OCTA
217  * @testcase.desc      : test TA call TEE_GetPropertyAsBool to get value of GPD_TEE_CRYPTOGRAPHY_OCTA
218  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
219  */
220 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_GPD_TEE_CRYPTOGRAPHY_OCTA, Function | MediumTest | Level0)
221 {
222     TEEC_Result ret;
223     int rc;
224 
225     TestData value = { 0 };
226     value.cmd = CMD_TEE_GetPropertyAsBool;
227     value.propSet = TEE_PROPSET_IMPLEMENTATION;
228     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_CRYPTOGRAPHY_OCTA, sizeof(GPD_TEE_CRYPTOGRAPHY_OCTA));
229     ASSERT_EQ(rc, 0);
230     value.inBufferLen = sizeof(GPD_TEE_CRYPTOGRAPHY_OCTA);
231 
232     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
233     ASSERT_EQ(ret, TEEC_SUCCESS);
234     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
235     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_FALSE);
236     ASSERT_EQ(value.outBufferLen, sizeof(VALUE_PREDEFINED_FALSE));
237 }
238 
239 /**
240  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_NameIsNull
241  * @testcase.desc      : test TA call TEE_GetPropertyAsBool for name is null
242  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
243  */
244 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_NameIsNull, Function | MediumTest | Level0)
245 {
246     TEEC_Result ret;
247 
248     TestData value = { 0 };
249     value.cmd = CMD_TEE_GetPropertyAsBool;
250     value.caseId = INPUT_ISNULL;
251     value.propSet = TEE_PROPSET_CURRENT_TA;
252 
253     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
254     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
255     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
256 }
257 
258 /**
259  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_NameIsZero
260  * @testcase.desc      : test TA call TEE_GetPropertyAsBool for name value is zero
261  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
262  */
263 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_NameIsZero, Function | MediumTest | Level0)
264 {
265     TEEC_Result ret;
266 
267     TestData value = { 0 };
268     value.cmd = CMD_TEE_GetPropertyAsBool;
269     value.propSet = TEE_PROPSET_CURRENT_TA;
270 
271     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
272     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
273     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
274 }
275 
276 /**
277  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_ValueIsNull
278  * @testcase.desc      : test TA call TEE_GetPropertyAsBool for value is null
279  * @testcase.expect    : return TEEC_ERROR_BAD_PARAMETERS
280  */
281 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_ValueIsNull, Function | MediumTest | Level0)
282 {
283     TEEC_Result ret;
284 
285     int rc;
286     TestData value = { 0 };
287     value.cmd = CMD_TEE_GetPropertyAsBool;
288     value.caseId = OUTPUT_ISNULL;
289     value.propSet = TEE_PROPSET_CURRENT_TA;
290     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_MULTISESSION, sizeof(GPD_TA_MULTISESSION));
291     ASSERT_EQ(rc, 0);
292     value.inBufferLen = sizeof(GPD_TA_MULTISESSION);
293 
294     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
295     ASSERT_EQ(ret, TEEC_ERROR_BAD_PARAMETERS);
296     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
297 }
298 
299 /**
300  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_NameNotFound
301  * @testcase.desc      : test TA call TEE_GetPropertyAsBool while Name Not Found
302  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
303  */
304 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_NameNotFound, Function | MediumTest | Level0)
305 {
306     TEEC_Result ret;
307 
308     int rc;
309     TestData value = { 0 };
310     value.cmd = CMD_TEE_GetPropertyAsBool;
311     value.propSet = TEE_PROPSET_CURRENT_TA;
312     rc = memcpy_s(value.inBuffer, BIG_SIZE, PROPERTY_NAME_UNKNOWN, sizeof(PROPERTY_NAME_UNKNOWN));
313     ASSERT_EQ(rc, 0);
314     value.inBufferLen = sizeof(PROPERTY_NAME_UNKNOWN);
315 
316     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
317     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
318     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
319 }
320 
321 /**
322  * @testcase.name      : TEE_GetPropertyAsBool_WithoutEnum_NameNotBool
323  * @testcase.desc      : test TA call TEE_GetPropertyAsBool while Name type is not bool
324  * @testcase.expect    : return TEEC_ERROR_BAD_FORMAT
325  */
326 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsBool_WithoutEnum_NameNotBool, Function | MediumTest | Level0)
327 {
328     TEEC_Result ret;
329 
330     int rc;
331     TestData value = { 0 };
332     value.cmd = CMD_TEE_GetPropertyAsBool;
333     value.propSet = TEE_PROPSET_CURRENT_TA;
334     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_STACKSIZE, sizeof(GPD_TA_STACKSIZE));
335     ASSERT_EQ(rc, 0);
336     value.inBufferLen = sizeof(GPD_TA_STACKSIZE);
337 
338     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
339     ASSERT_EQ(ret, TEEC_ERROR_BAD_FORMAT);
340     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
341 }