blob: abe981087caa1111ce27e569c8a6abb565a3796f [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <stdio.h>
15#include <string.h>
16#include <stdlib.h>
17#include <sys/types.h>
18#include <unistd.h>
19#include "xtest_test.h"
20#include "xtest_helpers.h"
Pascal Brandc639ac82015-07-02 08:53:34 +020021#include "tee_api_defines.h"
22#include "tee_client_api.h"
23#include "xml_client_api.h"
24
25static bool xtest_init = false;
26
27static bool xtest_tee_init(ADBG_Case_t *c)
28{
29 if (xtest_init)
30 return true;
31
32 SHARE_MEM01 = malloc(sizeof(TEEC_SharedMemory));
33 if (!ADBG_EXPECT_NOT_NULL(c, SHARE_MEM01))
34 goto exit;
35
36 SHARE_MEM02 = malloc(sizeof(TEEC_SharedMemory));
37 if (!ADBG_EXPECT_NOT_NULL(c, SHARE_MEM02))
38 goto exit;
39
40 SESSION01 = malloc(sizeof(TEEC_Session));
41 if (!ADBG_EXPECT_NOT_NULL(c, SESSION01))
42 goto exit;
43
44 CONTEXT01 = malloc(sizeof(TEEC_Context));
45 if (!ADBG_EXPECT_NOT_NULL(c, CONTEXT01))
46 goto exit;
47
48 OPERATION01 = malloc(sizeof(TEEC_Operation));
49 if (!ADBG_EXPECT_NOT_NULL(c, OPERATION01))
50 goto exit;
51
52 OPERATION02 = malloc(sizeof(TEEC_Operation));
53 if (!ADBG_EXPECT_NOT_NULL(c, OPERATION02))
54 goto exit;
55
56 xtest_init = true;
57
58 return xtest_init;
59
60exit:
61 if (SHARE_MEM01) {
62 free(SHARE_MEM01);
63 SHARE_MEM01 = NULL;
64 }
65 if (SHARE_MEM02) {
66 free(SHARE_MEM02);
67 SHARE_MEM02 = NULL;
68 }
69 if (SESSION01) {
70 free(SESSION01);
71 SESSION01 = NULL;
72 }
73 if (CONTEXT01) {
74 free(CONTEXT01);
75 CONTEXT01 = NULL;
76 }
77 if (OPERATION01) {
78 free(OPERATION01);
79 OPERATION01 = NULL;
80 }
81 if (OPERATION02) {
82 free(OPERATION02);
83 OPERATION02 = NULL;
84 }
85
86 xtest_init = false;
87 return xtest_init;
88}
89
90/*29-84-6d*/
91static void xtest_tee_7001(ADBG_Case_t *c)
92{
93 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
94 return;
95 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
96 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
97 ADBG_EXPECT(c, TEEC_SUCCESS,
98 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
99 TEEC_MEM_INPUT));
100 TEEC_ReleaseSharedMemory(SHARE_MEM01);
101 TEEC_FinalizeContext(CONTEXT01);
102}
103
104/*29-c2-4c*/
105static void xtest_tee_7002(ADBG_Case_t *c)
106{
107 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
108 return;
109 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
110 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
111 ADBG_EXPECT(c, TEEC_ERROR_OUT_OF_MEMORY,
112 AllocateSharedMemory(CONTEXT01, SHARE_MEM01,
113 SIZE_OVER_MEMORY, TEEC_MEM_INPUT));
114 TEEC_FinalizeContext(CONTEXT01);
115}
116
117/*29-b0-da*/
118static void xtest_tee_7003(ADBG_Case_t *c)
119{
120 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
121 return;
122 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
123 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
124 ADBG_EXPECT(c, TEEC_SUCCESS,
125 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, BIG_SIZE,
126 TEEC_MEM_OUTPUT));
127 TEEC_ReleaseSharedMemory(NULL);
128 TEEC_ReleaseSharedMemory(SHARE_MEM01);
129 TEEC_FinalizeContext(CONTEXT01);
130}
131
132/*29-1c-00*/
133static void xtest_tee_7004(ADBG_Case_t *c)
134{
135 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
136 return;
137 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
138 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
139 ADBG_EXPECT(c, TEEC_SUCCESS,
140 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
141 TEEC_MEM_INOUT));
142 TEEC_ReleaseSharedMemory(SHARE_MEM01);
143 TEEC_FinalizeContext(CONTEXT01);
144}
145
146/*29-9f-a2*/
147static void xtest_tee_7005(ADBG_Case_t *c)
148{
149 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
150 return;
151 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
152 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
153 ADBG_EXPECT(c, TEEC_SUCCESS,
154 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
155 TEEC_MEM_INPUT));
156 TEEC_ReleaseSharedMemory(SHARE_MEM01);
157 TEEC_FinalizeContext(CONTEXT01);
158}
159
160/*29-11-02*/
161static void xtest_tee_7006(ADBG_Case_t *c)
162{
163 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
164 return;
165 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
166 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
167 ADBG_EXPECT(c, TEEC_SUCCESS,
168 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
169 TEEC_MEM_OUTPUT));
170 TEEC_ReleaseSharedMemory(SHARE_MEM01);
171 TEEC_FinalizeContext(CONTEXT01);
172}
173
174/*29-1f-a2*/
175static void xtest_tee_7007(ADBG_Case_t *c)
176{
177 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
178 return;
179 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
180 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
181 ADBG_EXPECT(c, TEEC_SUCCESS,
182 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, BIG_SIZE,
183 TEEC_MEM_INOUT));
184 TEEC_ReleaseSharedMemory(SHARE_MEM01);
185 TEEC_FinalizeContext(CONTEXT01);
186}
187
188/*29-2e-8d*/
189static void xtest_tee_7008(ADBG_Case_t *c)
190{
191 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
192 return;
193 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
194 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
195 ADBG_EXPECT(c, TEEC_SUCCESS,
196 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, ZERO,
197 TEEC_MEM_OUTPUT));
198 TEEC_ReleaseSharedMemory(SHARE_MEM01);
199 TEEC_FinalizeContext(CONTEXT01);
200}
201
202/*29-2b-3f*/
203static void xtest_tee_7009(ADBG_Case_t *c)
204{
205 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
206 return;
207 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
208 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
209 XML_OpenSession(c, CONTEXT01, SESSION01, &UUID_Unknown,
210 TEEC_LOGIN_PUBLIC, NULL, NULL,
211 TEEC_ORIGIN_ANY_NOT_TRUSTED_APP, TEEC_UNDEFINED_ERROR);
212 TEEC_FinalizeContext(CONTEXT01);
213}
214
215/*29-cd-39*/
216static void xtest_tee_7010(ADBG_Case_t *c)
217{
218 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
219 return;
220 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
221 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
222 ADBG_EXPECT(c, TEEC_SUCCESS,
223 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, ZERO,
224 TEEC_MEM_OUTPUT));
225 TEEC_ReleaseSharedMemory(SHARE_MEM01);
226 TEEC_FinalizeContext(CONTEXT01);
227}
228
229/*29-f0-9c*/
230static void xtest_tee_7011(ADBG_Case_t *c)
231{
232 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
233 return;
234 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
235 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
236 XML_OpenSession(c, CONTEXT01, SESSION01,
237 &UUID_TTA_answerSuccessTo_OpenSession_Invoke,
238 TEEC_LOGIN_PUBLIC, NULL, NULL, 0, TEEC_SUCCESS);
239 TEEC_CloseSession(SESSION01);
240 TEEC_FinalizeContext(CONTEXT01);
241}
242
243/*29-4d-b0*/
244static void xtest_tee_7012(ADBG_Case_t *c)
245{
246 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
247 return;
248 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
249 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
250 XML_OpenSession(c, CONTEXT01, SESSION01,
251 &UUID_TTA_answerErrorTo_OpenSession, TEEC_LOGIN_PUBLIC,
252 NULL, NULL, TEEC_ORIGIN_TRUSTED_APP,
253 TEEC_ERROR_GENERIC);
254 TEEC_FinalizeContext(CONTEXT01);
255}
256
257/*29-a2-e3*/
258static void xtest_tee_7013(ADBG_Case_t *c)
259{
260 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
261 return;
262 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
263 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
264 XML_OpenSession(c, CONTEXT01, SESSION01,
265 &UUID_TTA_answerSuccessTo_OpenSession_Invoke,
266 INVALID_CONNECTION_METHODS, NULL, NULL,
267 TEEC_ORIGIN_ANY_NOT_TRUSTED_APP, TEEC_UNDEFINED_ERROR);
268 TEEC_FinalizeContext(CONTEXT01);
269}
270
271/*29-5d-d8*/
272static void xtest_tee_7014(ADBG_Case_t *c)
273{
274 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
275 return;
276 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
277 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
278 OPERATION_TEEC_PARAM_TYPES(OPERATION01, TEEC_VALUE_INPUT,
279 TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
280 TEEC_VALUE_INPUT);
281
282 TEEC_prepare_OperationEachParameter_value(OPERATION01, 0, VALUE01,
283 IGNORE);
284 TEEC_prepare_OperationEachParameter_value(OPERATION01, 1, IGNORE,
285 VALUE01);
286 TEEC_prepare_OperationEachParameter_value(OPERATION01, 2, VALUE01,
287 VALUE01);
288 TEEC_prepare_OperationEachParameter_value(OPERATION01, 3, VALUE01,
289 VALUE02);
290
291 XML_OpenSession(c, CONTEXT01, SESSION01,
292 &UUID_TTA_check_OpenSession_with_4_parameters,
293 TEEC_LOGIN_PUBLIC, NULL, OPERATION01, 0,
294 TEEC_SUCCESS);
295 TEEC_CloseSession(SESSION01);
296 TEEC_FinalizeContext(CONTEXT01);
297}
298
299/*29-82-81*/
300static void xtest_tee_7015(ADBG_Case_t *c)
301{
302 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
303 return;
304 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
305 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
306 XML_OpenSession(c, CONTEXT01, SESSION01,
307 &UUID_TTA_answerSuccessTo_OpenSession_Invoke,
308 TEEC_LOGIN_PUBLIC, NULL, NULL, TEEC_ORIGIN_TRUSTED_APP,
309 TEEC_SUCCESS);
310 TEEC_CloseSession(SESSION01);
311 TEEC_FinalizeContext(CONTEXT01);
312}
313
314/*29-db-48*/
315static void xtest_tee_7016(ADBG_Case_t *c)
316{
317 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
318 return;
319 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
320 TEEC_CloseSession(NULL);
321}
322
323/*29-a1-83*/
324static void xtest_tee_7017(ADBG_Case_t *c)
325{
326 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
327 return;
328 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
329 XML_InitializeContext(c, INVALID_NOT_EXISTING_TEE, CONTEXT01,
330 TEEC_UNDEFINED_ERROR);
331}
332
333/*29-c1-a5*/
334static void xtest_tee_7018(ADBG_Case_t *c)
335{
336 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
337 return;
338 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
339 TEEC_FinalizeContext(NULL);
340}
341
342/*29-91-aa*/
343static void xtest_tee_7019(ADBG_Case_t *c)
344{
345 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
346 return;
347 TEEC_createThread(CLIENT_APP01, THREAD02);
348 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
349 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
350 TEEC_SelectApp(CLIENT_APP01, THREAD02);
351 thr2_ctx.c = c;
352 thr2_ctx.ctx = CONTEXT01;
353 ctx_init_finalize(thr2_ctx);
354 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
355 TEEC_FinalizeContext(CONTEXT01);
356}
357
358ADBG_CASE_DEFINE(XTEST_TEE_7001, xtest_tee_7001,
359 /* Title */
360 "29-84-6d",
361 /* Short description */
362 "Allocate_In",
363 /* Requirement IDs */
364 "RELEASE_SHARED_MEMORY_WHEN_ALLOCATED",
365 /* How to implement */
366 "Description of how to implement ...");
367ADBG_CASE_DEFINE(XTEST_TEE_7002, xtest_tee_7002,
368 /* Title */
369 "29-c2-4c",
370 /* Short description */
371 "Allocate_out_of_memory",
372 /* Requirement IDs */
373 "INITIALIZE_CONTEXT_NAMES",
374 /* How to implement */
375 "Description of how to implement ...");
376ADBG_CASE_DEFINE(XTEST_TEE_7003, xtest_tee_7003,
377 /* Title */
378 "29-b0-da",
379 /* Short description */
380 "ReleaseSharedMemory_null",
381 /* Requirement IDs */
382 "RELEASE_SHARED_MEMORY_WHEN_ALLOCATED",
383 /* How to implement */
384 "Description of how to implement ...");
385ADBG_CASE_DEFINE(XTEST_TEE_7004, xtest_tee_7004,
386 /* Title */
387 "29-1c-00",
388 /* Short description */
389 "Allocate_InOut",
390 /* Requirement IDs */
391 "RELEASE_SHARED_MEMORY_WHEN_ALLOCATED",
392 /* How to implement */
393 "Description of how to implement ...");
394ADBG_CASE_DEFINE(XTEST_TEE_7005, xtest_tee_7005,
395 /* Title */
396 "29-9f-a2",
397 /* Short description */
398 "Register_In",
399 /* Requirement IDs */
400 "RELEASE_SHARED_MEMORY_WHEN_REGISTERED",
401 /* How to implement */
402 "Description of how to implement ...");
403ADBG_CASE_DEFINE(XTEST_TEE_7006, xtest_tee_7006,
404 /* Title */
405 "29-11-02",
406 /* Short description */
407 "Register_notZeroLength_Out",
408 /* Requirement IDs */
409 "RELEASE_SHARED_MEMORY_WHEN_REGISTERED",
410 /* How to implement */
411 "Description of how to implement ...");
412ADBG_CASE_DEFINE(XTEST_TEE_7007, xtest_tee_7007,
413 /* Title */
414 "29-1f-a2",
415 /* Short description */
416 "Register_InOut",
417 /* Requirement IDs */
418 "RELEASE_SHARED_MEMORY_WHEN_REGISTERED",
419 /* How to implement */
420 "Description of how to implement ...");
421ADBG_CASE_DEFINE(XTEST_TEE_7008, xtest_tee_7008,
422 /* Title */
423 "29-2e-8d",
424 /* Short description */
425 "Register_zeroLength_Out",
426 /* Requirement IDs */
427 "RELEASE_SHARED_MEMORY_WHEN_REGISTERED",
428 /* How to implement */
429 "Description of how to implement ...");
430ADBG_CASE_DEFINE(XTEST_TEE_7009, xtest_tee_7009,
431 /* Title */
432 "29-2b-3f",
433 /* Short description */
434 "OpenSession_error_notExistingTA",
435 /* Requirement IDs */
436 "OPEN_SESSION_TARGET_TRUSTED_APP",
437 /* How to implement */
438 "Description of how to implement ...");
439ADBG_CASE_DEFINE(XTEST_TEE_7010, xtest_tee_7010,
440 /* Title */
441 "29-cd-39",
442 /* Short description */
443 "Allocate_Out",
444 /* Requirement IDs */
445 "RELEASE_SHARED_MEMORY_WHEN_ALLOCATED",
446 /* How to implement */
447 "Description of how to implement ...");
448ADBG_CASE_DEFINE(XTEST_TEE_7011, xtest_tee_7011,
449 /* Title */
450 "29-f0-9c",
451 /* Short description */
452 "OpenSession_success_nullReturnOrigin",
453 /* Requirement IDs */
454 "OPEN_SESSION_TARGET_TRUSTED_APP",
455 /* How to implement */
456 "Description of how to implement ...");
457ADBG_CASE_DEFINE(XTEST_TEE_7012, xtest_tee_7012,
458 /* Title */
459 "29-4d-b0",
460 /* Short description */
461 "OpenSession_error_originTrustedApp",
462 /* Requirement IDs */
463 "OPEN_SESSION_TARGET_TRUSTED_APP",
464 /* How to implement */
465 "Description of how to implement ...");
466ADBG_CASE_DEFINE(XTEST_TEE_7013, xtest_tee_7013,
467 /* Title */
468 "29-a2-e3",
469 /* Short description */
470 "OpenSession_error_originTEE",
471 /* Requirement IDs */
472 "OPEN_SESSION_TARGET_TRUSTED_APP",
473 /* How to implement */
474 "Description of how to implement ...");
475ADBG_CASE_DEFINE(XTEST_TEE_7014, xtest_tee_7014,
476 /* Title */
477 "29-5d-d8",
478 /* Short description */
479 "OpenSession_with_operation_parameters",
480 /* Requirement IDs */
481 "OPEN_SESSION_TARGET_TRUSTED_APP",
482 /* How to implement */
483 "Description of how to implement ...");
484ADBG_CASE_DEFINE(XTEST_TEE_7015, xtest_tee_7015,
485 /* Title */
486 "29-82-81",
487 /* Short description */
488 "OpenSession_success_originTrustedApp",
489 /* Requirement IDs */
490 "OPEN_SESSION_TARGET_TRUSTED_APP",
491 /* How to implement */
492 "Description of how to implement ...");
493ADBG_CASE_DEFINE(XTEST_TEE_7016, xtest_tee_7016,
494 /* Title */
495 "29-db-48",
496 /* Short description */
497 "CloseSession_null",
498 /* Requirement IDs */
499 "CLOSE_SESSION_IGNORE_SESSION_NULL",
500 /* How to implement */
501 "Description of how to implement ...");
502ADBG_CASE_DEFINE(XTEST_TEE_7017, xtest_tee_7017,
503 /* Title */
504 "29-a1-83",
505 /* Short description */
506 "InitializeContext_NotExistingTEE",
507 /* Requirement IDs */
508 "INITIALIZE_CONTEXT_NAMES",
509 /* How to implement */
510 "Description of how to implement ...");
511ADBG_CASE_DEFINE(XTEST_TEE_7018, xtest_tee_7018,
512 /* Title */
513 "29-c1-a5",
514 /* Short description */
515 "FinalizeContext_null",
516 /* Requirement IDs */
517 "FINALIZE_CONTEXT_IGNORE_NULL",
518 /* How to implement */
519 "Description of how to implement ...");
520ADBG_CASE_DEFINE(XTEST_TEE_7019, xtest_tee_7019,
521 /* Title */
522 "29-91-aa",
523 /* Short description */
524 "InitializeContext_concurrentContext",
525 /* Requirement IDs */
526 "INITIALIZE_CONTEXT_NAMES",
527 /* How to implement */
528 "Description of how to implement ...");