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 #include "test_trusted_storage_api_defines.h"
13 #include "monad.h"
14 #include "tee_log.h"
15
16 char object_id[] = "sec_storage_data/testfile"; //save in temporary partition
17 char rename_object_id[] = "sec_storage_data/testfile_re"; //save in temporary partition
18
19 char object_init_data[] = "Randomly assign a string of ints";
20 char object_write_data[] = "Write a new paragraph for testing";
21
22 char attr_buffer1[] = "Attribute content processing ins";
23 char attr_buffer2[] = "Attribute content processing ins";
24
CaseCreatePersistentObjectAndDelete(void)25 int CaseCreatePersistentObjectAndDelete(void)
26 {
27 TestVector tv = {
28 .storageID = TEE_OBJECT_STORAGE_PRIVATE,
29 .createObjectID = object_id,
30 .createFlags = TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ,
31 .attributes = TEE_HANDLE_NULL,
32 .initialData = object_init_data,
33 .openObjectID = object_id,
34 .openFlags = TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_ACCESS_READ,
35 .writeBuffer = object_write_data,
36 .readBufferLen = sizeof(object_write_data),
37 .seekOffset = 0,
38 .whence = TEE_DATA_SEEK_SET,
39 .actions = {
40 IRSetUp,
41 CreatePersistentObject,
42 SeekObject,
43 SyncPersistentObject,
44 WriteObject,
45 CloseObject,
46 OpenPersistentObject,
47 SeekObject,
48 ReadObject, CheckReadBuffer,
49 DeletePersistentObject,
50 IRTearDown, },
51 .expRet = ER_OK,
52 };
53 int ret = MonadRun2(&tv);
54 if (ret != 0) {
55 tloge("[%s]:MonadRun2 failed\n", __func__);
56 return -1;
57 }
58 tlogi("[%s]:MonadRun2 success\n", __func__);
59 tlogi("[%s]:--------------CaseCreatePersistentObjectAndDelete success\n", __func__);
60 return 0;
61 }
62
CaseRenameObjectAndGetInfo(void)63 int CaseRenameObjectAndGetInfo(void)
64 {
65 TestVector tv = {
66 .storageID = TEE_OBJECT_STORAGE_PRIVATE,
67 .createObjectID = object_id,
68 .createFlags = TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META,
69 .attributes = TEE_HANDLE_NULL,
70 .initialData = object_init_data,
71 .resetSize = 0x100,
72 .newObjectID = rename_object_id,
73 .openObjectID = rename_object_id,
74 .openFlags = TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_ACCESS_READ,
75 .isTransientObject = false,
76 .actions = {
77 IRSetUp,
78 CreatePersistentObject,
79 TruncateObject,
80 RenameObject,
81 CloseObject,
82 OpenPersistentObject,
83 GetObjectInfo,
84 CheckObjectSize,
85 InfoObjectData,
86 CheckInfoObject,
87 DeletePersistentObject,
88 IRTearDown, },
89 .expRet = ER_OK,
90 };
91 int ret = MonadRun2(&tv);
92 if (ret != 0) {
93 tloge("[%s]:MonadRun2 failed\n", __func__);
94 return -1;
95 }
96 tlogi("[%s]:MonadRun2 success\n", __func__);
97 tlogi("[%s]:--------------CaseRenameObjectAndGetInfo success\n", __func__);
98 return 0;
99 }
100
CaseEnumerateDeleteAllObject(void)101 int CaseEnumerateDeleteAllObject(void)
102 {
103 TestVector tv = {
104 .storageID = TEE_OBJECT_STORAGE_PRIVATE,
105 .createObjectID = object_id,
106 .createFlags = TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META,
107 .openObjectID = object_id,
108 .attributes = TEE_HANDLE_NULL,
109 .initialData = object_init_data,
110 .createNum = 10,
111 .openFlags = TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_ACCESS_READ,
112 .actions = {
113 IRSetUp,
114 CreateMultiObject,
115 AllocateEnumerator,
116 ResetEnumerator,
117 StartEnumerator,
118 EnumerateAllObject,
119 FreeEnumerator,
120 IRTearDown, },
121 .expRet = ER_OK,
122 };
123 int ret = MonadRun2(&tv);
124 if (ret != 0) {
125 tloge("[%s]:MonadRun2 failed\n", __func__);
126 return -1;
127 }
128 tlogi("[%s]:MonadRun2 success\n", __func__);
129 tlogi("[%s]:--------------CaseEnumerateDeleteAllObject success\n", __func__);
130 return 0;
131 }
132
CaseRestrictObjectUsage(void)133 int CaseRestrictObjectUsage(void)
134 {
135 TestVector tv = {
136 .transientObjectNum = 1,
137 .objectType = {TEE_TYPE_AES},
138 .maxObjectSize = {256},
139 .objectUsage = {0xFFFF0000, 0x0000FFFF},
140 .isTransientObject = true,
141 .actions = {
142 IRSetUp,
143 AllocateTransientObject,
144 RestrictObjectUsage, GetObjectInfo, CheckObjectUsage,
145 ResetObject,
146 RestrictObjectUsage, GetObjectInfo, CheckObjectUsage,
147 FreeTransientObject,
148 IRTearDown, },
149 .expRet = ER_OK,
150 };
151 int ret = MonadRun2(&tv);
152 if (ret != 0) {
153 tloge("[%s]:MonadRun2 failed\n", __func__);
154 return -1;
155 }
156 tlogi("[%s]:MonadRun2 success\n", __func__);
157 tlogi("[%s]:--------------CaseRestrictObjectUsage success\n", __func__);
158 return 0;
159 }
160
CasePopulateAndCopyObject(void)161 int CasePopulateAndCopyObject(void)
162 {
163 TestVector tv = {
164 .transientObjectNum = 2,
165 .objectType = {TEE_TYPE_ECDSA_PUBLIC_KEY, TEE_TYPE_ECDSA_PUBLIC_KEY},
166 .maxObjectSize = {256, 256},
167 .attrCount = 3,
168 .attributeID = {TEE_ATTR_ECC_PUBLIC_VALUE_X, TEE_ATTR_ECC_PUBLIC_VALUE_Y, TEE_ATTR_ECC_CURVE},
169 .attrInitBuffer = {attr_buffer1, attr_buffer2},
170 .attrInitA = {0x1234},
171 .attrInitB = {0x5678},
172 .getAttributeID = {TEE_ATTR_ECC_PUBLIC_VALUE_X, TEE_ATTR_ECC_PUBLIC_VALUE_Y, TEE_ATTR_ECC_CURVE},
173 .actions = {
174 IRSetUp,
175 AllocateTransientObject,
176 InitRefAttr, InitRefAttr, InitValueAttr,
177 PopulateTransientObject,
178 CopyObjectAttr,
179 GetObjectBufferAttr, GetObjectBufferAttr, GetObjectValueAttr,
180 CheckAttr,
181 FreeTransientObject,
182 IRTearDown, },
183 .expRet = ER_OK,
184 };
185
186 int ret = MonadRun2(&tv);
187 if (ret != 0) {
188 tloge("[%s]:MonadRun2 failed\n", __func__);
189 return -1;
190 }
191 tlogi("[%s]:MonadRun2 success\n", __func__);
192 tlogi("[%s]:--------------CasePopulateAndCopyObject success\n", __func__);
193 return 0;
194 }
195
CaseGenerateKey(void)196 int CaseGenerateKey(void)
197 {
198 TestVector tv = {
199 .transientObjectNum = 1,
200 .objectType = {TEE_TYPE_AES},
201 .maxObjectSize = {256},
202 .generateKeySize = 256,
203 .actions = {
204 IRSetUp,
205 AllocateTransientObject,
206 GenerateKey,
207 FreeTransientObject,
208 IRTearDown, },
209 .expRet = ER_OK,
210 };
211 int ret = MonadRun2(&tv);
212 if (ret != 0) {
213 tloge("[%s]:MonadRun2 failed\n", __func__);
214 return -1;
215 }
216 tlogi("[%s]:MonadRun2 success\n", __func__);
217 tlogi("[%s]:--------------CaseGenerateKey success\n", __func__);
218 return 0;
219 }