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