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 */ 50struct 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#define STRUCTURE_PACKING_ATTRIBUTE __attribute__((packed)) 83 84#ifdef TSS_DEBUG 85#define DBG_ASSERT(x) assert(x) 86#else 87#define DBG_ASSERT(x) 88#endif 89 90/* needed by execute transport in the TSP */ 91#define TSS_TPM_TXBLOB_HDR_LEN (sizeof(UINT16) + (2 * sizeof(UINT32))) 92 93#define TSS_TPM_TXBLOB_SIZE (4096) 94#define TSS_TXBLOB_WRAPPEDCMD_OFFSET (TSS_TPM_TXBLOB_HDR_LEN + sizeof(UINT32)) 95#define TSS_MAX_AUTHS_CAP (1024) 96#define TSS_REQ_MGR_MAX_RETRIES (5) 97 98#endif 99