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 #ifndef __TEE_OBJ_ATTR_H 13 #define __TEE_OBJ_ATTR_H 14 15 #include "tee_defines.h" 16 17 #define OBJ_MIN_SIZE_AES 16 18 #define OBJ_MAX_SIZE_AES 32 19 #define OBJ_SIZE_DES 8 20 #define OBJ_SIZE_DES3 24 21 #define OBJ_SIZE_SM4 16 22 #define OBJ_SIZE_SIP_HASH 16 23 #define OBJ_MAX_SIZE_SM4 64 24 #define OBJ_MIN_SIZE_HMAC_SM3 10 25 #define OBJ_MAX_SIZE_HMAC_SM3 128 26 #define OBJ_MIN_SIZE_HMAC 8 27 #define OBJ_MAX_SIZE_HMAC 1024 28 #define OBJ_MIN_SIZE_GENERIC_SECRET 1 29 #define OBJ_MAX_SIZE_GENERIC_SECRET 512 30 #define OBJ_MIN_SIZE_RSA_PUB_KEY (512 / 8) 31 #define OBJ_MIN_SIZE_RSA_KEY_PAIR OBJ_MIN_SIZE_RSA_PUB_KEY 32 #define OBJ_MAX_SIZE_RSA_PUB_KEY 512 33 #define OBJ_MAX_SIZE_RSA_KEY_PAIR OBJ_MAX_SIZE_RSA_PUB_KEY 34 #define OBJ_MAX_SIZE_RSA_CRT_ATTR (OBJ_MAX_SIZE_RSA_KEY_PAIR / 2) 35 #define OBJ_SIZE_RSA_PUB_EXPONENT 4 36 #define OBJ_MIN_SIZE_RSA_PUB_EXPONENT 3 37 #define OBJ_MIN_SIZE_DSA_PUB_KEY (512 / 8) 38 #define OBJ_MIN_SIZE_DSA_KEY_PAIR OBJ_MIN_SIZE_DSA_PUB_KEY 39 #define OBJ_MAX_SIZE_DSA_PUB_KEY 128 40 #define OBJ_MAX_SIZE_DSA_KEY_PAIR OBJ_MAX_SIZE_DSA_PUB_KEY 41 #define OBJ_MIN_SIZE_DH_KEY_PAIR (256 / 8) 42 #define OBJ_MAX_SIZE_DH_KEY_PAIR 256 43 #define OBJ_MIN_SIZE_ECDSA_PUB_KEY 28 44 #define OBJ_MIN_SIZE_ECDSA_KEY_PAIR OBJ_MIN_SIZE_ECDSA_PUB_KEY 45 #define OBJ_MAX_SIZE_ECDSA_PUB_KEY 66 46 #define OBJ_MAX_SIZE_ECDSA_KEY_PAIR OBJ_MAX_SIZE_ECDSA_PUB_KEY 47 #define OBJ_MIN_SIZE_ECDH_PUB_KEY 28 48 #define OBJ_MIN_SIZE_ECDH_KEY_PAIR OBJ_MIN_SIZE_ECDH_PUB_KEY 49 #define OBJ_MAX_SIZE_ECDH_PUB_KEY 66 50 #define OBJ_MAX_SIZE_ECDH_KEY_PAIR OBJ_MAX_SIZE_ECDH_PUB_KEY 51 #define OBJ_SIZE_SM2 32 52 #define OBJ_MAX_SIZE_SM2 66 53 #define OBJ_SIZE_ED25519_PUB_KEY 32 54 #define OBJ_SIZE_ED25519_KEY_PAIR OBJ_SIZE_ED25519_PUB_KEY 55 #define OBJ_MAX_SIZE_ED25519_PUB_KEY 64 56 #define OBJ_MAX_SIZE_ED25519_KEY_PAIR OBJ_MAX_SIZE_ED25519_PUB_KEY 57 #define OBJ_SIZE_X25519_PUB_KEY 32 58 #define OBJ_SIZE_X25519_KEY_PAIR OBJ_SIZE_X25519_PUB_KEY 59 #define OBJ_MIN_SIZE_PBKDF2 14 60 #define OBJ_MAX_SIZE_PBKDF2 1024 61 62 #ifndef SUPPORT_GP_PANIC 63 #define TEE_Panic(x) \ 64 do { \ 65 } while (0) 66 #endif 67 68 #define MAX_ATTR_COUNT_VALUE 8 /* rsa keypair's attr is 8 */ 69 70 #define MAX_ATTR_ARRAY_COUNT 5 71 struct obj_attr_conf_s { 72 uint32_t type; 73 uint32_t min_attr_count; 74 uint32_t max_attr_count; 75 uint32_t min_obj_size; 76 uint32_t min_attr_array[MAX_ATTR_ARRAY_COUNT]; 77 }; 78 79 #define ELEM_NUM(array) (sizeof(array) / sizeof((array)[0])) 80 81 uint32_t get_attr_count_for_object_type(uint32_t object_type); 82 uint32_t get_object_size(uint32_t object_type); 83 const struct obj_attr_conf_s *get_object_attr_conf(const TEE_ObjectHandle object); 84 TEE_Result check_object_valid(TEE_ObjectHandle object); 85 #endif 86