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