1 2 /* 3 * Licensed Materials - Property of IBM 4 * 5 * trousers - An open source TCG Software Stack 6 * 7 * (C) Copyright International Business Machines Corp. 2004 8 * 9 */ 10 11 12 #ifndef _TCS_TSP_H_ 13 #define _TCS_TSP_H_ 14 15 /* Structures and defines needed to be known by the 16 * TSP layer and the TCS layer. 17 */ 18 19 /* 20 * disk store format: 21 * 22 * [type name ] cached? 23 * -------------------------------------- 24 * [BYTE TrouSerS PS version] no 25 * [UINT32 num_keys_on_disk ] no 26 * [TSS_UUID uuid0 ] yes 27 * [TSS_UUID uuid_parent0 ] yes 28 * [UINT16 pub_data_size0 ] yes 29 * [UINT16 blob_size0 ] yes 30 * [UINT32 vendor_data_size0 ] yes 31 * [UINT16 cache_flags0 ] yes 32 * [BYTE[] pub_data0 ] no 33 * [BYTE[] blob0 ] no 34 * [BYTE[] vendor_data0 ] no 35 * [...] 36 * 37 */ 38 39 40 /* 41 * PS disk cache flags 42 */ 43 /* A key may be written to disk, in cache and yet be invalid if it has 44 * since been unregistered. */ 45 #define CACHE_FLAG_VALID 0x0001 46 /* set if the key's parent is stored in system PS */ 47 #define CACHE_FLAG_PARENT_PS_SYSTEM 0x0002 48 49 /* the structure that makes up the in-memory PS disk cache */ 50 struct key_disk_cache 51 { 52 unsigned int offset; 53 UINT16 pub_data_size; 54 UINT16 blob_size; 55 UINT16 flags; 56 UINT32 vendor_data_size; 57 TSS_UUID uuid; 58 TSS_UUID parent_uuid; 59 struct key_disk_cache *next; 60 }; 61 62 /* The current PS version */ 63 #define TSSPS_VERSION 1 64 65 /* offsets into each key on disk. These should be passed a (struct key_disk_cache *) */ 66 #define TSSPS_VERSION_OFFSET (0) 67 #define TSSPS_NUM_KEYS_OFFSET (TSSPS_VERSION_OFFSET + sizeof(BYTE)) 68 #define TSSPS_KEYS_OFFSET (TSSPS_NUM_KEYS_OFFSET + sizeof(UINT32)) 69 #define TSSPS_UUID_OFFSET(c) ((c)->offset) 70 #define TSSPS_PARENT_UUID_OFFSET(c) ((c)->offset + sizeof(TSS_UUID)) 71 #define TSSPS_PUB_DATA_SIZE_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID))) 72 #define TSSPS_BLOB_SIZE_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID)) + sizeof(UINT16)) 73 #define TSSPS_VENDOR_SIZE_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID)) + (2 * sizeof(UINT16))) 74 #define TSSPS_CACHE_FLAGS_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID)) + (2 * sizeof(UINT16)) + sizeof(UINT32)) 75 #define TSSPS_PUB_DATA_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID)) + (3 * sizeof(UINT16)) + sizeof(UINT32)) 76 #define TSSPS_BLOB_DATA_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID)) + (3 * sizeof(UINT16)) + sizeof(UINT32) + (c)->pub_data_size) 77 #define TSSPS_VENDOR_DATA_OFFSET(c) ((c)->offset + (2 * sizeof(TSS_UUID)) + (3 * sizeof(UINT16)) + sizeof(UINT32) + (c)->pub_data_size + (c)->blob_size) 78 79 /* XXX Get rid of this, there's no reason to set an arbitrary limit */ 80 #define MAX_KEY_CHILDREN 10 81 82 #ifndef STRUCTURE_PACKING_ATTRIBUTE 83 #ifdef __GCC 84 #define STRUCTURE_PACKING_ATTRIBUTE __attribute__((packed)) 85 #else 86 #define STRUCTURE_PACKING_ATTRIBUTE /* */ 87 #endif 88 #endif 89 90 #ifdef TSS_DEBUG 91 #define DBG_ASSERT(x) assert(x) 92 #else 93 #define DBG_ASSERT(x) 94 #endif 95 96 /* needed by execute transport in the TSP */ 97 #define TSS_TPM_TXBLOB_HDR_LEN (sizeof(UINT16) + (2 * sizeof(UINT32))) 98 99 #define TSS_TPM_TXBLOB_SIZE (4096) 100 #define TSS_TXBLOB_WRAPPEDCMD_OFFSET (TSS_TPM_TXBLOB_HDR_LEN + sizeof(UINT32)) 101 #define TSS_MAX_AUTHS_CAP (1024) 102 #define TSS_REQ_MGR_MAX_RETRIES (5) 103 104 #endif 105