1723e4046Schristos 
2723e4046Schristos /*
3723e4046Schristos  * Licensed Materials - Property of IBM
4723e4046Schristos  *
5723e4046Schristos  * trousers - An open source TCG Software Stack
6723e4046Schristos  *
7723e4046Schristos  * (C) Copyright International Business Machines Corp. 2004-2007
8723e4046Schristos  *
9723e4046Schristos  */
10723e4046Schristos 
11723e4046Schristos #ifndef _OBJ_CONTEXT_H_
12723e4046Schristos #define _OBJ_CONTEXT_H_
13723e4046Schristos 
14723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_ENABLED		0x01
15723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_DEFAULT_ENCRYPT	0x02
16723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_AUTHENTIC		0x04
17723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_EXCLUSIVE		0x08
18723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_STATIC_AUTH		0x10
19723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_ESTABLISHED		0x20
20723e4046Schristos #define TSS_CONTEXT_FLAGS_TRANSPORT_MASK		0x3f
21723e4046Schristos 
22723e4046Schristos #define TSS_CONTEXT_FLAGS_TPM_VERSION_1			0x40
23723e4046Schristos #define TSS_CONTEXT_FLAGS_TPM_VERSION_2			0x80
24723e4046Schristos #define TSS_CONTEXT_FLAGS_TPM_VERSION_MASK		0xc0
25723e4046Schristos 
26723e4046Schristos /* structures */
27723e4046Schristos struct tr_context_obj {
28723e4046Schristos 	TSS_FLAG silentMode, flags;
29723e4046Schristos 	UINT32 hashMode;
30723e4046Schristos 	TSS_HPOLICY policy;
31723e4046Schristos 	BYTE *machineName;
32723e4046Schristos 	UINT32 machineNameLength;
33723e4046Schristos 	UINT32 connection_policy, current_connection;
34723e4046Schristos 	struct tcs_api_table *tcs_api;
35723e4046Schristos #ifdef TSS_BUILD_TRANSPORT
36723e4046Schristos 	/* transport session support */
37723e4046Schristos 	TSS_HKEY transKey;
38723e4046Schristos 	TPM_TRANSPORT_PUBLIC transPub;
39723e4046Schristos 	TPM_MODIFIER_INDICATOR transMod;
40723e4046Schristos 	TPM_TRANSPORT_AUTH transSecret;
41723e4046Schristos 	TPM_AUTH transAuth;
42723e4046Schristos 	TPM_TRANSPORT_LOG_IN transLogIn;
43723e4046Schristos 	TPM_TRANSPORT_LOG_OUT transLogOut;
44723e4046Schristos 	TPM_DIGEST transLogDigest;
45723e4046Schristos #endif
46723e4046Schristos };
47723e4046Schristos 
48723e4046Schristos /* obj_context.c */
49723e4046Schristos void       __tspi_obj_context_free(void *data);
50723e4046Schristos TSS_BOOL   obj_is_context(TSS_HOBJECT);
51723e4046Schristos TSS_RESULT obj_context_get_policy(TSS_HCONTEXT, UINT32, TSS_HPOLICY *);
52723e4046Schristos TSS_BOOL   obj_context_is_silent(TSS_HCONTEXT);
53723e4046Schristos TSS_RESULT obj_context_get_machine_name(TSS_HCONTEXT, UINT32 *, BYTE **);
54723e4046Schristos TSS_RESULT obj_context_get_machine_name_attrib(TSS_HCONTEXT, UINT32 *, BYTE **);
55723e4046Schristos TSS_RESULT obj_context_set_machine_name(TSS_HCONTEXT, BYTE *, UINT32);
56723e4046Schristos TSS_RESULT obj_context_add(TSS_HOBJECT *);
57723e4046Schristos TSS_RESULT obj_context_set_mode(TSS_HCONTEXT, UINT32);
58723e4046Schristos TSS_RESULT obj_context_get_mode(TSS_HCONTEXT, UINT32 *);
59723e4046Schristos TSS_BOOL   obj_context_has_popups(TSS_HCONTEXT);
60723e4046Schristos TSS_RESULT obj_context_get_hash_mode(TSS_HCONTEXT, UINT32 *);
61723e4046Schristos TSS_RESULT obj_context_set_hash_mode(TSS_HCONTEXT, UINT32);
62723e4046Schristos TSS_RESULT obj_context_get_connection_version(TSS_HCONTEXT, UINT32 *);
63723e4046Schristos TSS_RESULT obj_context_set_connection_policy(TSS_HCONTEXT, UINT32);
64723e4046Schristos #ifdef TSS_BUILD_TRANSPORT
65723e4046Schristos TSS_RESULT obj_context_set_transport_key(TSS_HCONTEXT, TSS_HKEY);
66723e4046Schristos TSS_RESULT obj_context_transport_get_control(TSS_HCONTEXT, UINT32, UINT32 *);
67723e4046Schristos TSS_RESULT obj_context_transport_set_control(TSS_HCONTEXT, UINT32);
68723e4046Schristos TSS_RESULT obj_context_transport_get_mode(TSS_HCONTEXT, UINT32, UINT32 *);
69723e4046Schristos TSS_RESULT obj_context_transport_set_mode(TSS_HCONTEXT, UINT32);
70723e4046Schristos TSS_RESULT obj_context_transport_init(TSS_HCONTEXT);
71723e4046Schristos TSS_RESULT obj_context_transport_establish(TSS_HCONTEXT, struct tr_context_obj *);
72723e4046Schristos TSS_RESULT obj_context_transport_execute(TSS_HCONTEXT, TPM_COMMAND_CODE, UINT32, BYTE*, TPM_DIGEST*,
73723e4046Schristos 					 UINT32*, TCS_HANDLE**, TPM_AUTH*, TPM_AUTH*, UINT32*,
74723e4046Schristos 					 BYTE**);
75723e4046Schristos TSS_RESULT obj_context_transport_close(TSS_HCONTEXT, TSS_HKEY, TSS_HPOLICY, TSS_BOOL,
76723e4046Schristos 				       TPM_SIGN_INFO*, UINT32*, BYTE**);
77723e4046Schristos #endif
78723e4046Schristos TSS_RESULT obj_context_set_tpm_version(TSS_HCONTEXT, UINT32);
79723e4046Schristos TSS_RESULT obj_context_get_tpm_version(TSS_HCONTEXT, UINT32 *);
80723e4046Schristos TSS_RESULT obj_context_get_loadkey_ordinal(TSS_HCONTEXT, TPM_COMMAND_CODE *);
81723e4046Schristos void       obj_context_close(TSS_HCONTEXT);
82723e4046Schristos 
83723e4046Schristos struct tcs_api_table *obj_context_get_tcs_api(TSS_HCONTEXT);
84723e4046Schristos #define TCS_API(c) obj_context_get_tcs_api(c)
85723e4046Schristos 
86723e4046Schristos 
87723e4046Schristos #define CONTEXT_LIST_DECLARE		struct obj_list context_list
88723e4046Schristos #define CONTEXT_LIST_DECLARE_EXTERN	extern struct obj_list context_list
89*0861b331Schristos #define CONTEXT_LIST_INIT()		tspi_list_init(&context_list)
90723e4046Schristos #define CONTEXT_LIST_CONNECT(a,b)	obj_connectContext_list(&context_list, a, b)
91723e4046Schristos #define CONTEXT_LIST_CLOSE(a)		obj_list_close(&context_list, &__tspi_obj_context_free, a)
92723e4046Schristos 
93723e4046Schristos #endif
94