• 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 #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 }