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-2007
8  *
9  */
10 
11 #ifndef _OBJ_CONTEXT_H_
12 #define _OBJ_CONTEXT_H_
13 
14 #define TSS_CONTEXT_FLAGS_TRANSPORT_ENABLED                 0x01
15 #define TSS_CONTEXT_FLAGS_TRANSPORT_DEFAULT_ENCRYPT         0x02
16 #define TSS_CONTEXT_FLAGS_TRANSPORT_AUTHENTIC               0x04
17 #define TSS_CONTEXT_FLAGS_TRANSPORT_EXCLUSIVE               0x08
18 #define TSS_CONTEXT_FLAGS_TRANSPORT_STATIC_AUTH             0x10
19 #define TSS_CONTEXT_FLAGS_TRANSPORT_ESTABLISHED             0x20
20 #define TSS_CONTEXT_FLAGS_TRANSPORT_MASK                    0x3f
21 
22 #define TSS_CONTEXT_FLAGS_TPM_VERSION_1                     0x40
23 #define TSS_CONTEXT_FLAGS_TPM_VERSION_2                     0x80
24 #define TSS_CONTEXT_FLAGS_TPM_VERSION_MASK                  0xc0
25 
26 /* structures */
27 struct tr_context_obj {
28           TSS_FLAG silentMode, flags;
29           UINT32 hashMode;
30           TSS_HPOLICY policy;
31           BYTE *machineName;
32           UINT32 machineNameLength;
33           UINT32 connection_policy, current_connection;
34           struct tcs_api_table *tcs_api;
35 #ifdef TSS_BUILD_TRANSPORT
36           /* transport session support */
37           TSS_HKEY transKey;
38           TPM_TRANSPORT_PUBLIC transPub;
39           TPM_MODIFIER_INDICATOR transMod;
40           TPM_TRANSPORT_AUTH transSecret;
41           TPM_AUTH transAuth;
42           TPM_TRANSPORT_LOG_IN transLogIn;
43           TPM_TRANSPORT_LOG_OUT transLogOut;
44           TPM_DIGEST transLogDigest;
45 #endif
46 };
47 
48 /* obj_context.c */
49 void       __tspi_obj_context_free(void *data);
50 TSS_BOOL   obj_is_context(TSS_HOBJECT);
51 TSS_RESULT obj_context_get_policy(TSS_HCONTEXT, UINT32, TSS_HPOLICY *);
52 TSS_BOOL   obj_context_is_silent(TSS_HCONTEXT);
53 TSS_RESULT obj_context_get_machine_name(TSS_HCONTEXT, UINT32 *, BYTE **);
54 TSS_RESULT obj_context_get_machine_name_attrib(TSS_HCONTEXT, UINT32 *, BYTE **);
55 TSS_RESULT obj_context_set_machine_name(TSS_HCONTEXT, BYTE *, UINT32);
56 TSS_RESULT obj_context_add(TSS_HOBJECT *);
57 TSS_RESULT obj_context_set_mode(TSS_HCONTEXT, UINT32);
58 TSS_RESULT obj_context_get_mode(TSS_HCONTEXT, UINT32 *);
59 TSS_BOOL   obj_context_has_popups(TSS_HCONTEXT);
60 TSS_RESULT obj_context_get_hash_mode(TSS_HCONTEXT, UINT32 *);
61 TSS_RESULT obj_context_set_hash_mode(TSS_HCONTEXT, UINT32);
62 TSS_RESULT obj_context_get_connection_version(TSS_HCONTEXT, UINT32 *);
63 TSS_RESULT obj_context_set_connection_policy(TSS_HCONTEXT, UINT32);
64 #ifdef TSS_BUILD_TRANSPORT
65 TSS_RESULT obj_context_set_transport_key(TSS_HCONTEXT, TSS_HKEY);
66 TSS_RESULT obj_context_transport_get_control(TSS_HCONTEXT, UINT32, UINT32 *);
67 TSS_RESULT obj_context_transport_set_control(TSS_HCONTEXT, UINT32);
68 TSS_RESULT obj_context_transport_get_mode(TSS_HCONTEXT, UINT32, UINT32 *);
69 TSS_RESULT obj_context_transport_set_mode(TSS_HCONTEXT, UINT32);
70 TSS_RESULT obj_context_transport_init(TSS_HCONTEXT);
71 TSS_RESULT obj_context_transport_establish(TSS_HCONTEXT, struct tr_context_obj *);
72 TSS_RESULT obj_context_transport_execute(TSS_HCONTEXT, TPM_COMMAND_CODE, UINT32, BYTE*, TPM_DIGEST*,
73                                                    UINT32*, TCS_HANDLE**, TPM_AUTH*, TPM_AUTH*, UINT32*,
74                                                    BYTE**);
75 TSS_RESULT obj_context_transport_close(TSS_HCONTEXT, TSS_HKEY, TSS_HPOLICY, TSS_BOOL,
76                                                TPM_SIGN_INFO*, UINT32*, BYTE**);
77 #endif
78 TSS_RESULT obj_context_set_tpm_version(TSS_HCONTEXT, UINT32);
79 TSS_RESULT obj_context_get_tpm_version(TSS_HCONTEXT, UINT32 *);
80 TSS_RESULT obj_context_get_loadkey_ordinal(TSS_HCONTEXT, TPM_COMMAND_CODE *);
81 void       obj_context_close(TSS_HCONTEXT);
82 
83 struct tcs_api_table *obj_context_get_tcs_api(TSS_HCONTEXT);
84 #define TCS_API(c) obj_context_get_tcs_api(c)
85 
86 
87 #define CONTEXT_LIST_DECLARE            struct obj_list context_list
88 #define CONTEXT_LIST_DECLARE_EXTERN     extern struct obj_list context_list
89 #define CONTEXT_LIST_INIT()             tspi_list_init(&context_list)
90 #define CONTEXT_LIST_CONNECT(a,b)       obj_connectContext_list(&context_list, a, b)
91 #define CONTEXT_LIST_CLOSE(a)           obj_list_close(&context_list, &__tspi_obj_context_free, a)
92 
93 #endif
94