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, 2005, 2007
8  *
9  */
10 
11 #ifndef _TROUSERS_TYPES_H_
12 #define _TROUSERS_TYPES_H_
13 
14 #define TCPA_NONCE_SIZE		sizeof(TCPA_NONCE)
15 #define TCPA_DIGEST_SIZE	sizeof(TCPA_DIGEST)
16 #define TCPA_ENCAUTH_SIZE	sizeof(TCPA_ENCAUTH)
17 #define TCPA_DIRVALUE_SIZE	sizeof(TCPA_DIRVALUE)
18 #define TCPA_AUTHDATA_SIZE	sizeof(TCPA_AUTHDATA)
19 #define TPM_NONCE_SIZE		TCPA_NONCE_SIZE
20 #define TPM_DIGEST_SIZE		TCPA_DIGEST_SIZE
21 #define TPM_ENCAUTH_SIZE	TCPA_ENCAUTH_SIZE
22 #define TPM_DIRVALUE_SIZE	TCPA_DIRVALUE_SIZE
23 #define TPM_AUTHDATA_SIZE	TCPA_AUTHDATA_SIZE
24 
25 #define TSS_FLAG_MIGRATABLE	(migratable)
26 #define TSS_FLAG_VOLATILE	(volatileKey)
27 #define TSS_FLAG_REDIRECTION	(redirection)
28 
29 /* return codes */
30 #define TCPA_E_INAPPROPRIATE_ENC	TCPA_E_NEED_SELFTEST
31 
32 #define TSS_ERROR_LAYER(x)	(x & 0x3000)
33 #define TSS_ERROR_CODE(x)	(x & TSS_MAX_ERROR)
34 
35 #ifdef TSS_DEBUG
36 #define TSPERR(x)		LogTSPERR(x, __FILE__, __LINE__)
37 #define TCSERR(x)		LogTCSERR(x, __FILE__, __LINE__)
38 #define TDDLERR(x)		LogTDDLERR(x, __FILE__, __LINE__)
39 #else
40 #define TSPERR(x)		(x | TSS_LAYER_TSP)
41 #define TCSERR(x)		(x | TSS_LAYER_TCS)
42 #define TDDLERR(x)		(x | TSS_LAYER_TDDL)
43 #endif
44 
45 extern TSS_UUID	NULL_UUID;
46 extern TSS_UUID	SRK_UUID;
47 
48 #define NULL_HOBJECT	0
49 #define NULL_HCONTEXT	NULL_HOBJECT
50 #define NULL_HPCRS	NULL_HOBJECT
51 #define NULL_HENCDATA	NULL_HOBJECT
52 #define NULL_HKEY	NULL_HOBJECT
53 #define NULL_HTPM	NULL_HOBJECT
54 #define NULL_HHASH	NULL_HOBJECT
55 #define NULL_HPOLICY	NULL_HOBJECT
56 #define NULL_HDELFAMILY	NULL_HOBJECT
57 #define NULL_HMIGDATA	NULL_HOBJECT
58 
59 #define TSS_OBJECT_TYPE_CONTEXT		(0x0e)
60 #define TSS_OBJECT_TYPE_TPM		(0x0f)
61 
62 #define TSS_PS_TYPE_NO			(0)
63 
64 /* Derived Types */
65 #define TSS_MIGRATION_SCHEME	TSS_MIGRATE_SCHEME
66 
67 // The TPM's non-volatile flags (TPM_PERMANENT_FLAGS)
68 #define TSS_TPM_PF_DISABLE_BIT			    (1 << (TPM_PF_DISABLE - 1))
69 #define TSS_TPM_PF_OWNERSHIP_BIT		    (1 << (TPM_PF_OWNERSHIP - 1))
70 #define TSS_TPM_PF_DEACTIVATED_BIT		    (1 << (TPM_PF_DEACTIVATED - 1))
71 #define TSS_TPM_PF_READPUBEK_BIT		    (1 << (TPM_PF_READPUBEK - 1))
72 #define TSS_TPM_PF_DISABLEOWNERCLEAR_BIT	    (1 << (TPM_PF_DISABLEOWNERCLEAR - 1))
73 #define TSS_TPM_PF_ALLOWMAINTENANCE_BIT		    (1 << (TPM_PF_ALLOWMAINTENANCE - 1))
74 #define TSS_TPM_PF_PHYSICALPRESENCELIFETIMELOCK_BIT (1 << (TPM_PF_PHYSICALPRESENCELIFETIMELOCK - 1))
75 #define TSS_TPM_PF_PHYSICALPRESENCEHWENABLE_BIT	    (1 << (TPM_PF_PHYSICALPRESENCEHWENABLE - 1))
76 #define TSS_TPM_PF_PHYSICALPRESENCECMDENABLE_BIT    (1 << (TPM_PF_PHYSICALPRESENCECMDENABLE - 1))
77 #define TSS_TPM_PF_CEKPUSED_BIT			    (1 << (TPM_PF_CEKPUSED - 1))
78 #define TSS_TPM_PF_TPMPOST_BIT			    (1 << (TPM_PF_TPMPOST - 1))
79 #define TSS_TPM_PF_TPMPOSTLOCK_BIT		    (1 << (TPM_PF_TPMPOSTLOCK - 1))
80 #define TSS_TPM_PF_FIPS_BIT			    (1 << (TPM_PF_FIPS - 1))
81 #define TSS_TPM_PF_OPERATOR_BIT			    (1 << (TPM_PF_OPERATOR - 1))
82 #define TSS_TPM_PF_ENABLEREVOKEEK_BIT		    (1 << (TPM_PF_ENABLEREVOKEEK - 1))
83 #define TSS_TPM_PF_NV_LOCKED_BIT		    (1 << (TPM_PF_NV_LOCKED - 1))
84 #define TSS_TPM_PF_READSRKPUB_BIT		    (1 << (TPM_PF_READSRKPUB - 1))
85 #define TSS_TPM_PF_RESETESTABLISHMENTBIT_BIT	    (1 << (TPM_PF_RESETESTABLISHMENTBIT - 1))
86 #define TSS_TPM_PF_MAINTENANCEDONE_BIT		    (1 << (TPM_PF_MAINTENANCEDONE - 1))
87 
88 // The TPM's volatile flags (TPM_STCLEAR_FLAGS)
89 #define TSS_TPM_SF_DEACTIVATED_BIT	    (1 << (TPM_SF_DEACTIVATED - 1))
90 #define TSS_TPM_SF_DISABLEFORCECLEAR_BIT    (1 << (TPM_SF_DISABLEFORCECLEAR - 1))
91 #define TSS_TPM_SF_PHYSICALPRESENCE_BIT     (1 << (TPM_SF_PHYSICALPRESENCE - 1))
92 #define TSS_TPM_SF_PHYSICALPRESENCELOCK_BIT (1 << (TPM_SF_PHYSICALPRESENCELOCK - 1))
93 #define TSS_TPM_SF_GLOBALLOCK_BIT	    (1 << (TPM_SF_GLOBALLOCK - 1))
94 
95 // Trousers key formats to ease use of the different TPM_KEY structs
96 typedef struct tdTSS_KEY11_HDR {
97 	TPM_STRUCT_VER ver;
98 } TSS_KEY11_HDR;
99 
100 typedef struct tdTSS_KEY12_HDR {
101 	TPM_STRUCTURE_TAG tag;
102 	UINT16 fill;
103 } __attribute__((packed)) TSS_KEY12_HDR;
104 
105 typedef struct tdTSS_KEY {
106 	union {
107 		TSS_KEY11_HDR key11;
108 		TSS_KEY12_HDR key12;
109 	} hdr;
110 	TPM_KEY_USAGE keyUsage;
111 	TPM_KEY_FLAGS keyFlags;
112 	TPM_AUTH_DATA_USAGE authDataUsage;
113 	TPM_KEY_PARMS algorithmParms;
114 	UINT32 PCRInfoSize;
115 	BYTE *PCRInfo;
116 	TPM_STORE_PUBKEY pubKey;
117 	UINT32 encSize;
118 	BYTE *encData;
119 } TSS_KEY;
120 
121 #if (defined (__linux) || defined (linux) || defined (SOLARIS) || defined (__GLIBC__))
122 #define BSD_CONST
123 #elif defined (__OpenBSD__) || defined (__FreeBSD__) || defined (__NetBSD__) || defined (__APPLE__)
124 #define BSD_CONST const
125 #endif
126 
127 
128 #endif
129