• 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 "tee_obj_attr.h"
13 #include "tee_log.h"
14 #include "tee_obj.h"
15 #include "tee_object_api.h"
16 
17 static const struct obj_attr_conf_s g_obj_attr_conf[] = {
18     { TEE_TYPE_AES,                1, 1, OBJ_MIN_SIZE_AES, {TEE_ATTR_SECRET_VALUE}},
19     { TEE_TYPE_DES,                1, 1, OBJ_SIZE_DES, {TEE_ATTR_SECRET_VALUE}},
20     { TEE_TYPE_DES3,               1, 1, OBJ_SIZE_DES3, {TEE_ATTR_SECRET_VALUE}},
21     { TEE_TYPE_SM4,                1, 1, OBJ_SIZE_SM4, {TEE_ATTR_SECRET_VALUE}},
22     { TEE_TYPE_HMAC_SM3,           1, 1, OBJ_MIN_SIZE_HMAC_SM3, {TEE_ATTR_SECRET_VALUE}},
23     { TEE_TYPE_HMAC_MD5,           1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
24     { TEE_TYPE_HMAC_SHA1,          1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
25     { TEE_TYPE_HMAC_SHA224,        1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
26     { TEE_TYPE_HMAC_SHA256,        1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
27     { TEE_TYPE_HMAC_SHA384,        1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
28     { TEE_TYPE_HMAC_SHA512,        1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
29     { TEE_TYPE_SIP_HASH,           1, 1, OBJ_MIN_SIZE_HMAC, {TEE_ATTR_SECRET_VALUE}},
30     { TEE_TYPE_GENERIC_SECRET,     1, 1, OBJ_MIN_SIZE_GENERIC_SECRET, {TEE_ATTR_SECRET_VALUE}},
31     { TEE_TYPE_PBKDF2_HMAC,        1, 1, OBJ_MIN_SIZE_PBKDF2, {TEE_ATTR_SECRET_VALUE}},
32     {
33         TEE_TYPE_RSA_PUBLIC_KEY,     2, 2, OBJ_MIN_SIZE_RSA_PUB_KEY, {
34             TEE_ATTR_RSA_MODULUS,
35             TEE_ATTR_RSA_PUBLIC_EXPONENT
36         }
37     },
38     {
39         TEE_TYPE_RSA_KEYPAIR,        3, 8, OBJ_MIN_SIZE_RSA_KEY_PAIR, {
40             TEE_ATTR_RSA_MODULUS,
41             TEE_ATTR_RSA_PUBLIC_EXPONENT,
42             TEE_ATTR_RSA_PRIVATE_EXPONENT
43         }
44     },
45     {
46         TEE_TYPE_DSA_PUBLIC_KEY,     4, 4, OBJ_MIN_SIZE_DSA_PUB_KEY, {
47             TEE_ATTR_DSA_PRIME,
48             TEE_ATTR_DSA_SUBPRIME,
49             TEE_ATTR_DSA_BASE,
50             TEE_ATTR_DSA_PUBLIC_VALUE
51         }
52     },
53     {
54         TEE_TYPE_DSA_KEYPAIR,        5, 5, OBJ_MIN_SIZE_DSA_KEY_PAIR, {
55             TEE_ATTR_DSA_PRIME,
56             TEE_ATTR_DSA_SUBPRIME,
57             TEE_ATTR_DSA_BASE,
58             TEE_ATTR_DSA_PUBLIC_VALUE,
59             TEE_ATTR_DSA_PRIVATE_VALUE
60         }
61     },
62     {
63         TEE_TYPE_DH_KEYPAIR,         4, 6, OBJ_MIN_SIZE_DH_KEY_PAIR, {
64             TEE_ATTR_DH_PRIME,
65             TEE_ATTR_DH_BASE,
66             TEE_ATTR_DH_PUBLIC_VALUE,
67             TEE_ATTR_DH_PRIVATE_VALUE
68         }
69     },
70     {
71         TEE_TYPE_ECDSA_PUBLIC_KEY,   3, 3, OBJ_MIN_SIZE_ECDSA_PUB_KEY, {
72             TEE_ATTR_ECC_PUBLIC_VALUE_X,
73             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
74             TEE_ATTR_ECC_CURVE
75         }
76     },
77     {
78         TEE_TYPE_ECDH_PUBLIC_KEY,    3, 3, OBJ_MIN_SIZE_ECDH_PUB_KEY, {
79             TEE_ATTR_ECC_PUBLIC_VALUE_X,
80             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
81             TEE_ATTR_ECC_CURVE
82         }
83     },
84     {
85         TEE_TYPE_ECDSA_KEYPAIR,      4, 4, OBJ_MIN_SIZE_ECDSA_KEY_PAIR, {
86             TEE_ATTR_ECC_PUBLIC_VALUE_X,
87             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
88             TEE_ATTR_ECC_CURVE,
89             TEE_ATTR_ECC_PRIVATE_VALUE
90         }
91     },
92     {
93         TEE_TYPE_ECDH_KEYPAIR,       4, 4, OBJ_MIN_SIZE_ECDH_KEY_PAIR, {
94             TEE_ATTR_ECC_PUBLIC_VALUE_X,
95             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
96             TEE_ATTR_ECC_CURVE,
97             TEE_ATTR_ECC_PRIVATE_VALUE
98         }
99     },
100     {
101         TEE_TYPE_SM2_DSA_PUBLIC_KEY, 2, 3, OBJ_SIZE_SM2, {
102             TEE_ATTR_ECC_PUBLIC_VALUE_X,
103             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
104         }
105     },
106     {
107         TEE_TYPE_SM2_KEP_PUBLIC_KEY, 2, 3, OBJ_SIZE_SM2, {
108             TEE_ATTR_ECC_PUBLIC_VALUE_X,
109             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
110         }
111     },
112     {
113         TEE_TYPE_SM2_PKE_PUBLIC_KEY, 2, 3, OBJ_SIZE_SM2, {
114             TEE_ATTR_ECC_PUBLIC_VALUE_X,
115             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
116         }
117     },
118     {
119         TEE_TYPE_SM2_DSA_KEYPAIR,    3, 4, OBJ_SIZE_SM2, {
120             TEE_ATTR_ECC_PUBLIC_VALUE_X,
121             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
122             TEE_ATTR_ECC_PRIVATE_VALUE
123         }
124     },
125     {
126         TEE_TYPE_SM2_KEP_KEYPAIR,    3, 4, OBJ_SIZE_SM2, {
127             TEE_ATTR_ECC_PUBLIC_VALUE_X,
128             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
129             TEE_ATTR_ECC_PRIVATE_VALUE
130         }
131     },
132     {
133         TEE_TYPE_SM2_PKE_KEYPAIR,    3, 4, OBJ_SIZE_SM2, {
134             TEE_ATTR_ECC_PUBLIC_VALUE_X,
135             TEE_ATTR_ECC_PUBLIC_VALUE_Y,
136             TEE_ATTR_ECC_PRIVATE_VALUE
137         }
138     },
139     {
140         TEE_TYPE_ED25519_PUBLIC_KEY, 1, 1, OBJ_SIZE_ED25519_PUB_KEY, {
141             TEE_ATTR_ED25519_PUBLIC_VALUE
142         }
143     },
144     {
145         TEE_TYPE_ED25519_KEYPAIR,    2, 2, OBJ_SIZE_ED25519_KEY_PAIR, {
146             TEE_ATTR_ED25519_PUBLIC_VALUE,
147             TEE_ATTR_ED25519_PRIVATE_VALUE
148         }
149     },
150     {
151         TEE_TYPE_X25519_PUBLIC_KEY,  1, 1, OBJ_SIZE_X25519_PUB_KEY, {
152             TEE_ATTR_X25519_PUBLIC_VALUE
153         }
154     },
155     {
156         TEE_TYPE_X25519_KEYPAIR,     2, 2, OBJ_SIZE_X25519_PUB_KEY, {
157             TEE_ATTR_X25519_PUBLIC_VALUE,
158             TEE_ATTR_X25519_PRIVATE_VALUE
159         }
160     },
161     { TEE_TYPE_DATA,               0, 0, 0, {0}},
162     { TEE_TYPE_DATA_GP1_1,         0, 0, 0, {0}},
163 };
164 
get_attr_count_for_object_type(uint32_t object_type)165 uint32_t get_attr_count_for_object_type(uint32_t object_type)
166 {
167     uint32_t index;
168 
169     for (index = 0; index < ELEM_NUM(g_obj_attr_conf); index++) {
170         if (object_type == g_obj_attr_conf[index].type)
171             return g_obj_attr_conf[index].max_attr_count;
172     }
173 
174     return 0;
175 }
176 
get_object_size(uint32_t object_type)177 uint32_t get_object_size(uint32_t object_type)
178 {
179     uint32_t index;
180 
181     for (index = 0; index < ELEM_NUM(g_obj_attr_conf); index++) {
182         if (object_type == g_obj_attr_conf[index].type)
183             return g_obj_attr_conf[index].min_obj_size;
184     }
185 
186     return 0;
187 }
188 
get_object_attr_conf(const TEE_ObjectHandle object)189 const struct obj_attr_conf_s *get_object_attr_conf(const TEE_ObjectHandle object)
190 {
191     const struct obj_attr_conf_s *config = NULL;
192     uint32_t index;
193 
194     if (object == NULL || object->ObjectInfo == NULL) {
195         tloge("invalid input");
196         return NULL;
197     }
198 
199     for (index = 0; index < ELEM_NUM(g_obj_attr_conf); index++) {
200         if (object->ObjectInfo->objectType == g_obj_attr_conf[index].type)
201             config = &g_obj_attr_conf[index];
202     }
203     return config;
204 }
205 
check_object_valid(TEE_ObjectHandle object)206 TEE_Result check_object_valid(TEE_ObjectHandle object)
207 {
208     if (object == TEE_HANDLE_NULL) {
209         tloge("Bad Parameter:ObjectHandle is NULL!\n");
210         return TEE_ERROR_BAD_PARAMETERS;
211     }
212 
213     if (check_object(object) != TEE_SUCCESS) {
214         tloge("Object is invalid\n");
215         return TEE_ERROR_BAD_PARAMETERS;
216     }
217 
218     if (object->ObjectInfo == NULL) {
219         tloge("Object is invalid\n");
220         return TEE_ERROR_BAD_PARAMETERS;
221     }
222 
223     return TEE_SUCCESS;
224 }
225