xref: /illumos-gate/usr/src/lib/pkcs11/libpkcs11/common/pkcs11Session.h (revision a61ed2ce7a86a4d6428f2a83eb4739fae945447e)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef	_PKCS11_SESSION_H
27 #define	_PKCS11_SESSION_H
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 #define	PKCS11_SESSION_MAGIC	0xECF00001
36 
37 typedef struct pkcs11_session {
38 
39 	ulong_t			se_magic; /* ensure this is a valid session */
40 	CK_SESSION_HANDLE	se_handle; /* from slot's C_OpenSession() */
41 	CK_SLOT_ID		se_slotid; /* slotID in framework */
42 	struct pkcs11_session	*se_prev;	/* Chain of sessions  */
43 	struct pkcs11_session	*se_next; 	/* in this slot */
44 
45 } pkcs11_session_t;
46 
47 
48 /*
49  * This macro is used to typecast a session handle to a pointer
50  * to a session structure.  It also checks to see if the session
51  * is tagged with a session magic number.  This is to detect when an
52  * application passes a bogus session pointer.
53  */
54 #define	HANDLE2SESSION(hSession, sessionp, rv)\
55 		sessionp = (pkcs11_session_t *)(hSession);	\
56 		rv = CKR_OK;					\
57 		if ((sessionp == NULL) || 			\
58 		    (sessionp->se_magic != PKCS11_SESSION_MAGIC)) \
59 			rv = CKR_SESSION_HANDLE_INVALID;
60 
61 
62 struct pkcs11_slot;
63 
64 extern CK_RV pkcs11_session_add(struct pkcs11_slot *pslot, CK_SLOT_ID slot_id,
65 	CK_SESSION_HANDLE_PTR pfwhandle, CK_SESSION_HANDLE prov_sess);
66 
67 extern void pkcs11_session_delete(struct pkcs11_slot *pslot,
68 	pkcs11_session_t *psess);
69 
70 extern void pkcs11_sessionlist_delete(struct pkcs11_slot *pslot);
71 
72 #ifdef	__cplusplus
73 }
74 #endif
75 
76 #endif /* _PKCS11_SESSION_H */
77