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