147e946e7SWyllys Ingersoll /*
247e946e7SWyllys Ingersoll  * The Initial Developer of the Original Code is International
347e946e7SWyllys Ingersoll  * Business Machines Corporation. Portions created by IBM
447e946e7SWyllys Ingersoll  * Corporation are Copyright(C) 2005 International Business
547e946e7SWyllys Ingersoll  * Machines Corporation. All Rights Reserved.
647e946e7SWyllys Ingersoll  *
747e946e7SWyllys Ingersoll  * This program is free software; you can redistribute it and/or modify
847e946e7SWyllys Ingersoll  * it under the terms of the Common Public License as published by
947e946e7SWyllys Ingersoll  * IBM Corporation; either version 1 of the License, or(at your option)
1047e946e7SWyllys Ingersoll  * any later version.
1147e946e7SWyllys Ingersoll  *
1247e946e7SWyllys Ingersoll  * This program is distributed in the hope that it will be useful,
1347e946e7SWyllys Ingersoll  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1447e946e7SWyllys Ingersoll  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1547e946e7SWyllys Ingersoll  * Common Public License for more details.
1647e946e7SWyllys Ingersoll  *
1747e946e7SWyllys Ingersoll  * You should have received a copy of the Common Public License
1847e946e7SWyllys Ingersoll  * along with this program; if not, a copy can be viewed at
1947e946e7SWyllys Ingersoll  * http://www.opensource.org/licenses/cpl1.0.php.
2047e946e7SWyllys Ingersoll  */
2147e946e7SWyllys Ingersoll 
2247e946e7SWyllys Ingersoll /* (C) COPYRIGHT International Business Machines Corp. 2001, 2002, 2005 */
2347e946e7SWyllys Ingersoll /*
2447e946e7SWyllys Ingersoll  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
2547e946e7SWyllys Ingersoll  * Use is subject to license terms.
26*91419a03SJason King  * Copyright 2018 Jason King
2747e946e7SWyllys Ingersoll  */
2847e946e7SWyllys Ingersoll 
2947e946e7SWyllys Ingersoll #ifndef _TPMTOK_INT_H
3047e946e7SWyllys Ingersoll #define	_TPMTOK_INT_H
3147e946e7SWyllys Ingersoll 
3247e946e7SWyllys Ingersoll #include <stdio.h>
3347e946e7SWyllys Ingersoll #include <pthread.h>
3447e946e7SWyllys Ingersoll #include <string.h>
3547e946e7SWyllys Ingersoll #include <strings.h>
36*91419a03SJason King #include <sys/md5.h>
37*91419a03SJason King #include <sys/sha1.h>
3847e946e7SWyllys Ingersoll #include <limits.h>
3947e946e7SWyllys Ingersoll #include <syslog.h>
4047e946e7SWyllys Ingersoll #include <errno.h>
4147e946e7SWyllys Ingersoll #include <sys/types.h>
4247e946e7SWyllys Ingersoll #include <sys/stat.h>
4347e946e7SWyllys Ingersoll #include <sys/param.h>
4447e946e7SWyllys Ingersoll #include <sys/byteorder.h>
4547e946e7SWyllys Ingersoll #include <security/cryptoki.h>
4647e946e7SWyllys Ingersoll 
4747e946e7SWyllys Ingersoll #include <tss/platform.h>
4847e946e7SWyllys Ingersoll #include <tss/tss_defines.h>
4947e946e7SWyllys Ingersoll #include <tss/tss_typedef.h>
5047e946e7SWyllys Ingersoll #include <tss/tss_structs.h>
5147e946e7SWyllys Ingersoll #include <tss/tspi.h>
5247e946e7SWyllys Ingersoll 
5347e946e7SWyllys Ingersoll #define	VERSION_MAJOR 2
5447e946e7SWyllys Ingersoll #define	VERSION_MINOR 1
5547e946e7SWyllys Ingersoll 
5647e946e7SWyllys Ingersoll #define	MAX_SESSION_COUNT	64
5747e946e7SWyllys Ingersoll #define	MAX_PIN_LEN	256
5847e946e7SWyllys Ingersoll #define	MIN_PIN_LEN	1
5947e946e7SWyllys Ingersoll 
6047e946e7SWyllys Ingersoll #define	MAX_SLOT_ID	10
6147e946e7SWyllys Ingersoll 
6247e946e7SWyllys Ingersoll #ifndef MIN
6347e946e7SWyllys Ingersoll #define	MIN(a, b)  ((a) < (b) ? (a) : (b))
6447e946e7SWyllys Ingersoll #endif
6547e946e7SWyllys Ingersoll 
6647e946e7SWyllys Ingersoll #define	MODE_COPY	(1 << 0)
6747e946e7SWyllys Ingersoll #define	MODE_CREATE	(1 << 1)
6847e946e7SWyllys Ingersoll #define	MODE_KEYGEN	(1 << 2)
6947e946e7SWyllys Ingersoll #define	MODE_MODIFY	(1 << 3)
7047e946e7SWyllys Ingersoll #define	MODE_DERIVE	(1 << 4)
7147e946e7SWyllys Ingersoll #define	MODE_UNWRAP	(1 << 5)
7247e946e7SWyllys Ingersoll 
7347e946e7SWyllys Ingersoll // RSA block formatting types
7447e946e7SWyllys Ingersoll //
7547e946e7SWyllys Ingersoll #define	PKCS_BT_1	1
7647e946e7SWyllys Ingersoll #define	PKCS_BT_2	2
7747e946e7SWyllys Ingersoll 
7847e946e7SWyllys Ingersoll #define	OP_ENCRYPT_INIT 1
7947e946e7SWyllys Ingersoll #define	OP_DECRYPT_INIT 2
8047e946e7SWyllys Ingersoll #define	OP_WRAP		3
8147e946e7SWyllys Ingersoll #define	OP_UNWRAP	4
8247e946e7SWyllys Ingersoll #define	OP_SIGN_INIT	5
8347e946e7SWyllys Ingersoll #define	OP_VERIFY_INIT	6
8447e946e7SWyllys Ingersoll 
8547e946e7SWyllys Ingersoll enum {
8647e946e7SWyllys Ingersoll 	STATE_INVALID = 0,
8747e946e7SWyllys Ingersoll 	STATE_ENCR,
8847e946e7SWyllys Ingersoll 	STATE_DECR,
8947e946e7SWyllys Ingersoll 	STATE_DIGEST,
9047e946e7SWyllys Ingersoll 	STATE_SIGN,
9147e946e7SWyllys Ingersoll 	STATE_VERIFY
9247e946e7SWyllys Ingersoll };
9347e946e7SWyllys Ingersoll 
9447e946e7SWyllys Ingersoll #define	SHA1_BLOCK_SIZE 64
9547e946e7SWyllys Ingersoll #define	SHA1_BLOCK_SIZE_MASK (SHA1_BLOCK_SIZE - 1)
9647e946e7SWyllys Ingersoll 
9747e946e7SWyllys Ingersoll #define	RSA_BLOCK_SIZE 256
9847e946e7SWyllys Ingersoll 
9947e946e7SWyllys Ingersoll #ifndef PATH_MAX
10047e946e7SWyllys Ingersoll #define	PATH_MAX MAXPATHLEN
10147e946e7SWyllys Ingersoll #endif
10247e946e7SWyllys Ingersoll 
10347e946e7SWyllys Ingersoll #ifndef PACK_DATA
10447e946e7SWyllys Ingersoll #define	PACK_DATA
10547e946e7SWyllys Ingersoll #endif
10647e946e7SWyllys Ingersoll 
10747e946e7SWyllys Ingersoll #define	MD5_BLOCK_SIZE  64
10847e946e7SWyllys Ingersoll 
10947e946e7SWyllys Ingersoll #define	DSA_SIGNATURE_SIZE  40
11047e946e7SWyllys Ingersoll 
11147e946e7SWyllys Ingersoll #define	DEFAULT_SO_PIN  "87654321"
11247e946e7SWyllys Ingersoll 
11347e946e7SWyllys Ingersoll typedef enum {
11447e946e7SWyllys Ingersoll 	ALL = 1,
11547e946e7SWyllys Ingersoll 	PRIVATE,
11647e946e7SWyllys Ingersoll 	PUBLIC
11747e946e7SWyllys Ingersoll } SESS_OBJ_TYPE;
11847e946e7SWyllys Ingersoll 
11947e946e7SWyllys Ingersoll typedef struct _DL_NODE
12047e946e7SWyllys Ingersoll {
12147e946e7SWyllys Ingersoll 	struct _DL_NODE	*next;
12247e946e7SWyllys Ingersoll 	struct _DL_NODE	*prev;
12347e946e7SWyllys Ingersoll 	void  *data;
12447e946e7SWyllys Ingersoll } DL_NODE;
12547e946e7SWyllys Ingersoll 
12647e946e7SWyllys Ingersoll #define	TOKEN_DATA_FILE	"token.dat"
12747e946e7SWyllys Ingersoll #define	TOKEN_OBJ_DIR	"objects"
12847e946e7SWyllys Ingersoll #define	TOKEN_OBJ_INDEX_FILE "obj.idx"
12947e946e7SWyllys Ingersoll 
13047e946e7SWyllys Ingersoll #define	TPMTOK_UUID_INDEX_FILENAME "uuids.idx"
13147e946e7SWyllys Ingersoll 
13247e946e7SWyllys Ingersoll /*
13347e946e7SWyllys Ingersoll  * Filenames used to store migration data.
13447e946e7SWyllys Ingersoll  */
13547e946e7SWyllys Ingersoll #define	SO_MAKEY_FILENAME	"so_makey.dat"
13647e946e7SWyllys Ingersoll #define	USER_MAKEY_FILENAME	"user_makey.dat"
13747e946e7SWyllys Ingersoll #define	SO_KEYBLOB_FILENAME	"so_blob.dat"
13847e946e7SWyllys Ingersoll #define	USER_KEYBLOB_FILENAME	"user_blob.dat"
13947e946e7SWyllys Ingersoll 
14047e946e7SWyllys Ingersoll #define	__FUNCTION__ __func__
14147e946e7SWyllys Ingersoll 
14247e946e7SWyllys Ingersoll //
14347e946e7SWyllys Ingersoll // Both of the strings below have a length of 32 chars and must be
14447e946e7SWyllys Ingersoll // padded with spaces, and non - null terminated.
14547e946e7SWyllys Ingersoll //
14647e946e7SWyllys Ingersoll #define	PKW_CRYPTOKI_VERSION_MAJOR	2
14747e946e7SWyllys Ingersoll #define	PKW_CRYPTOKI_VERSION_MINOR	1
14847e946e7SWyllys Ingersoll #define	PKW_CRYPTOKI_MANUFACTURER	"Sun Microsystems, Inc.	  "
14947e946e7SWyllys Ingersoll #define	PKW_CRYPTOKI_LIBDESC	    "PKCS#11 Interface for TPM	"
15047e946e7SWyllys Ingersoll #define	PKW_CRYPTOKI_LIB_VERSION_MAJOR  1
15147e946e7SWyllys Ingersoll #define	PKW_CRYPTOKI_LIB_VERSION_MINOR  0
15247e946e7SWyllys Ingersoll #define	PKW_MAX_DEVICES		 10
15347e946e7SWyllys Ingersoll 
15447e946e7SWyllys Ingersoll #define	MAX_TOK_OBJS  2048
15547e946e7SWyllys Ingersoll #define	NUMBER_SLOTS_MANAGED 1
15647e946e7SWyllys Ingersoll #define	TPM_SLOTID 1
15747e946e7SWyllys Ingersoll 
15847e946e7SWyllys Ingersoll /*
15947e946e7SWyllys Ingersoll  * CKA_HIDDEN will be used to filter return results on
16047e946e7SWyllys Ingersoll  * a C_FindObjects call. Used for objects internal to the
16147e946e7SWyllys Ingersoll  * TPM token for management
16247e946e7SWyllys Ingersoll  */
16347e946e7SWyllys Ingersoll /* custom attributes for the TPM token */
16447e946e7SWyllys Ingersoll #define	CKA_HIDDEN	CKA_VENDOR_DEFINED + 0x01
16547e946e7SWyllys Ingersoll #define	CKA_IBM_OPAQUE	CKA_VENDOR_DEFINED + 0x02
16647e946e7SWyllys Ingersoll /*
16747e946e7SWyllys Ingersoll  * CKA_ENC_AUTHDATA will be used to store the encrypted SHA-1
16847e946e7SWyllys Ingersoll  * hashes of auth data passed in for TPM keys. The authdata
16947e946e7SWyllys Ingersoll  * will be encrypted using either the public
17047e946e7SWyllys Ingersoll  * leaf key or the private leaf key
17147e946e7SWyllys Ingersoll  */
17247e946e7SWyllys Ingersoll #define	CKA_ENC_AUTHDATA CKA_VENDOR_DEFINED + 0x03
17347e946e7SWyllys Ingersoll 
17447e946e7SWyllys Ingersoll /* custom return codes for the TPM token */
17547e946e7SWyllys Ingersoll #define	CKR_KEY_NOT_FOUND	CKR_VENDOR_DEFINED + 0x01
17647e946e7SWyllys Ingersoll #define	CKR_FILE_NOT_FOUND	CKR_VENDOR_DEFINED + 0x02
17747e946e7SWyllys Ingersoll 
17847e946e7SWyllys Ingersoll typedef struct {
17947e946e7SWyllys Ingersoll 	CK_SLOT_ID  slotID;
18047e946e7SWyllys Ingersoll 	CK_SESSION_HANDLE  sessionh;
18147e946e7SWyllys Ingersoll } ST_SESSION_T;
18247e946e7SWyllys Ingersoll 
18347e946e7SWyllys Ingersoll typedef ST_SESSION_T ST_SESSION_HANDLE;
18447e946e7SWyllys Ingersoll 
18547e946e7SWyllys Ingersoll typedef struct {
18647e946e7SWyllys Ingersoll 	void *Previous;
18747e946e7SWyllys Ingersoll 	void *Next;
18847e946e7SWyllys Ingersoll 	CK_SLOT_ID   SltId;
18947e946e7SWyllys Ingersoll 	CK_SESSION_HANDLE  RealHandle;
19047e946e7SWyllys Ingersoll } Session_Struct_t;
19147e946e7SWyllys Ingersoll 
19247e946e7SWyllys Ingersoll typedef Session_Struct_t *SessStructP;
19347e946e7SWyllys Ingersoll 
19447e946e7SWyllys Ingersoll typedef struct {
19547e946e7SWyllys Ingersoll 	pid_t Pid;
19647e946e7SWyllys Ingersoll 	pthread_mutex_t  ProcMutex;
19747e946e7SWyllys Ingersoll 	Session_Struct_t *SessListBeg;
19847e946e7SWyllys Ingersoll 	Session_Struct_t *SessListEnd;
19947e946e7SWyllys Ingersoll 	pthread_mutex_t  SessListMutex;
20047e946e7SWyllys Ingersoll } API_Proc_Struct_t;
20147e946e7SWyllys Ingersoll 
20247e946e7SWyllys Ingersoll 
20347e946e7SWyllys Ingersoll 
20447e946e7SWyllys Ingersoll 
20547e946e7SWyllys Ingersoll enum {
20647e946e7SWyllys Ingersoll 	PRF_DUMMYFUNCTION = 1,
20747e946e7SWyllys Ingersoll 	PRF_FCVFUNCTION,
20847e946e7SWyllys Ingersoll 	PRF_INITIALIZE,
20947e946e7SWyllys Ingersoll 	PRF_FINALIZE,
21047e946e7SWyllys Ingersoll 	PRF_GETINFO,
21147e946e7SWyllys Ingersoll 	PRF_GETFUNCTIONLIST,
21247e946e7SWyllys Ingersoll 	PRF_GETSLOTLIST,
21347e946e7SWyllys Ingersoll 	PRF_GETSLOTINFO,
21447e946e7SWyllys Ingersoll 	PRF_GETTOKENINFO,
21547e946e7SWyllys Ingersoll 	PRF_GETMECHLIST,
21647e946e7SWyllys Ingersoll 	PRF_GETMECHINFO,
21747e946e7SWyllys Ingersoll 	PRF_INITTOKEN,
21847e946e7SWyllys Ingersoll 	PRF_INITPIN,
21947e946e7SWyllys Ingersoll 	PRF_SETPIN,
22047e946e7SWyllys Ingersoll 	PRF_OPENSESSION,
22147e946e7SWyllys Ingersoll 	PRF_CLOSESESSION,
22247e946e7SWyllys Ingersoll 	PRF_CLOSEALLSESSIONS,
22347e946e7SWyllys Ingersoll 	PRF_GETSESSIONINFO,
22447e946e7SWyllys Ingersoll 	PRF_GETOPERATIONSTATE,
22547e946e7SWyllys Ingersoll 	PRF_SETOPERATIONSTATE,
22647e946e7SWyllys Ingersoll 	PRF_LOGIN,
22747e946e7SWyllys Ingersoll 	PRF_LOGOUT,
22847e946e7SWyllys Ingersoll 	PRF_CREATEOBJECT,
22947e946e7SWyllys Ingersoll 	PRF_COPYOBJECT,
23047e946e7SWyllys Ingersoll 	PRF_DESTROYOBJECT,
23147e946e7SWyllys Ingersoll 	PRF_GETOBJECTSIZE,
23247e946e7SWyllys Ingersoll 	PRF_GETATTRIBUTEVALUE,
23347e946e7SWyllys Ingersoll 	PRF_SETATTRIBUTEVALUE,
23447e946e7SWyllys Ingersoll 	PRF_FINDOBJECTSINIT,
23547e946e7SWyllys Ingersoll 	PRF_FINDOBJECTS,
23647e946e7SWyllys Ingersoll 	PRF_FINDOBJECTSFINAL,
23747e946e7SWyllys Ingersoll 	PRF_ENCRYPTINIT,
23847e946e7SWyllys Ingersoll 	PRF_ENCRYPT,
23947e946e7SWyllys Ingersoll 	PRF_ENCRYPTUPDATE,
24047e946e7SWyllys Ingersoll 	PRF_ENCRYPTFINAL,
24147e946e7SWyllys Ingersoll 	PRF_DECRYPTINIT,
24247e946e7SWyllys Ingersoll 	PRF_DECRYPT,
24347e946e7SWyllys Ingersoll 	PRF_DECRYPTUPDATE,
24447e946e7SWyllys Ingersoll 	PRF_DECRYPTFINAL,
24547e946e7SWyllys Ingersoll 	PRF_DIGESTINIT,
24647e946e7SWyllys Ingersoll 	PRF_DIGEST,
24747e946e7SWyllys Ingersoll 	PRF_DIGESTUPDATE,
24847e946e7SWyllys Ingersoll 	PRF_DIGESTKEY,
24947e946e7SWyllys Ingersoll 	PRF_DIGESTFINAL,
25047e946e7SWyllys Ingersoll 	PRF_SIGNINIT,
25147e946e7SWyllys Ingersoll 	PRF_SIGN,
25247e946e7SWyllys Ingersoll 	PRF_SIGNUPDATE,
25347e946e7SWyllys Ingersoll 	PRF_SIGNFINAL,
25447e946e7SWyllys Ingersoll 	PRF_SIGNRECOVERINIT,
25547e946e7SWyllys Ingersoll 	PRF_SIGNRECOVER,
25647e946e7SWyllys Ingersoll 	PRF_VERIFYINIT,
25747e946e7SWyllys Ingersoll 	PRF_VERIFY,
25847e946e7SWyllys Ingersoll 	PRF_VERIFYUPDATE,
25947e946e7SWyllys Ingersoll 	PRF_VERIFYFINAL,
26047e946e7SWyllys Ingersoll 	PRF_VERIFYRECOVERINIT,
26147e946e7SWyllys Ingersoll 	PRF_VERIFYRECOVER,
26247e946e7SWyllys Ingersoll 	PRF_GENKEY,
26347e946e7SWyllys Ingersoll 	PRF_GENKEYPAIR,
26447e946e7SWyllys Ingersoll 	PRF_WRAPKEY,
26547e946e7SWyllys Ingersoll 	PRF_UNWRAPKEY,
26647e946e7SWyllys Ingersoll 	PRF_DERIVEKEY,
26747e946e7SWyllys Ingersoll 	PRF_GENRND,
26847e946e7SWyllys Ingersoll 	PRF_LASTENTRY
26947e946e7SWyllys Ingersoll };
27047e946e7SWyllys Ingersoll 
27147e946e7SWyllys Ingersoll typedef struct _ENCR_DECR_CONTEXT
27247e946e7SWyllys Ingersoll {
27347e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE  key;
27447e946e7SWyllys Ingersoll 	CK_MECHANISM mech;
27547e946e7SWyllys Ingersoll 	CK_BYTE	  *context;
27647e946e7SWyllys Ingersoll 	CK_ULONG  context_len;
27747e946e7SWyllys Ingersoll 	CK_BBOOL  multi;
27847e946e7SWyllys Ingersoll 	CK_BBOOL  active;
27947e946e7SWyllys Ingersoll } ENCR_DECR_CONTEXT;
28047e946e7SWyllys Ingersoll 
28147e946e7SWyllys Ingersoll typedef struct _DIGEST_CONTEXT
28247e946e7SWyllys Ingersoll {
28347e946e7SWyllys Ingersoll 	CK_MECHANISM   mech;
28447e946e7SWyllys Ingersoll 	union {
28547e946e7SWyllys Ingersoll 		MD5_CTX *md5ctx;
28647e946e7SWyllys Ingersoll 		SHA1_CTX *sha1ctx;
28747e946e7SWyllys Ingersoll 		void *ref; /* reference ptr for the union */
28847e946e7SWyllys Ingersoll 	} context;
28947e946e7SWyllys Ingersoll 	CK_ULONG context_len;
29047e946e7SWyllys Ingersoll 	CK_BBOOL multi;
29147e946e7SWyllys Ingersoll 	CK_BBOOL active;
29247e946e7SWyllys Ingersoll } DIGEST_CONTEXT;
29347e946e7SWyllys Ingersoll 
29447e946e7SWyllys Ingersoll typedef struct _SIGN_VERIFY_CONTEXT
29547e946e7SWyllys Ingersoll {
29647e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE key;
29747e946e7SWyllys Ingersoll 	CK_MECHANISM	mech;	// current sign mechanism
29847e946e7SWyllys Ingersoll 	void	 *context;  // temporary work area
29947e946e7SWyllys Ingersoll 	CK_ULONG context_len;
30047e946e7SWyllys Ingersoll 	CK_BBOOL multi;    // is this a multi - part operation?
30147e946e7SWyllys Ingersoll 	CK_BBOOL recover;  // are we in recover mode?
30247e946e7SWyllys Ingersoll 	CK_BBOOL active;
30347e946e7SWyllys Ingersoll } SIGN_VERIFY_CONTEXT;
30447e946e7SWyllys Ingersoll 
30547e946e7SWyllys Ingersoll typedef struct _SESSION
30647e946e7SWyllys Ingersoll {
30747e946e7SWyllys Ingersoll 	CK_SESSION_HANDLE    handle;
30847e946e7SWyllys Ingersoll 	CK_SESSION_INFO	session_info;
30947e946e7SWyllys Ingersoll 
31047e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE    *find_list;	// array of CK_OBJECT_HANDLE
31147e946e7SWyllys Ingersoll 	CK_ULONG	find_count;    // # handles in the list
31247e946e7SWyllys Ingersoll 	CK_ULONG	find_len;	// max # of handles in the list
31347e946e7SWyllys Ingersoll 	CK_ULONG	find_idx;	// current position
31447e946e7SWyllys Ingersoll 	CK_BBOOL	find_active;
31547e946e7SWyllys Ingersoll 
31647e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT    encr_ctx;
31747e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT    decr_ctx;
31847e946e7SWyllys Ingersoll 	DIGEST_CONTEXT	digest_ctx;
31947e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT  sign_ctx;
32047e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT  verify_ctx;
32147e946e7SWyllys Ingersoll 
32247e946e7SWyllys Ingersoll 	TSS_HCONTEXT	hContext;
32347e946e7SWyllys Ingersoll } SESSION;
32447e946e7SWyllys Ingersoll 
32547e946e7SWyllys Ingersoll typedef struct _TEMPLATE
32647e946e7SWyllys Ingersoll {
32747e946e7SWyllys Ingersoll 	DL_NODE  *attribute_list;
32847e946e7SWyllys Ingersoll } TEMPLATE;
32947e946e7SWyllys Ingersoll 
33047e946e7SWyllys Ingersoll typedef struct _OBJECT
33147e946e7SWyllys Ingersoll {
33247e946e7SWyllys Ingersoll 	CK_OBJECT_CLASS   class;
33347e946e7SWyllys Ingersoll 	CK_BYTE	 name[8];   // for token objects
33447e946e7SWyllys Ingersoll 
33547e946e7SWyllys Ingersoll 	SESSION	 *session;   // creator; only for session objects
33647e946e7SWyllys Ingersoll 	TEMPLATE *template;
33747e946e7SWyllys Ingersoll 	CK_ULONG count_hi;  // only significant for token objects
33847e946e7SWyllys Ingersoll 	CK_ULONG count_lo;  // only significant for token objects
33947e946e7SWyllys Ingersoll 	CK_ULONG index;
34047e946e7SWyllys Ingersoll } OBJECT;
34147e946e7SWyllys Ingersoll 
34247e946e7SWyllys Ingersoll typedef struct _OBJECT_MAP
34347e946e7SWyllys Ingersoll {
34447e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE	handle;
34547e946e7SWyllys Ingersoll 	CK_BBOOL is_private;
34647e946e7SWyllys Ingersoll 	CK_BBOOL is_session_obj;
34747e946e7SWyllys Ingersoll 	SESSION	 *session;
34847e946e7SWyllys Ingersoll 	OBJECT   *ptr;
34947e946e7SWyllys Ingersoll } OBJECT_MAP;
35047e946e7SWyllys Ingersoll 
35147e946e7SWyllys Ingersoll typedef struct _ATTRIBUTE_PARSE_LIST
35247e946e7SWyllys Ingersoll {
35347e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_TYPE type;
35447e946e7SWyllys Ingersoll 	void		*ptr;
35547e946e7SWyllys Ingersoll 	CK_ULONG	  len;
35647e946e7SWyllys Ingersoll 	CK_BBOOL	  found;
35747e946e7SWyllys Ingersoll } ATTRIBUTE_PARSE_LIST;
35847e946e7SWyllys Ingersoll 
35947e946e7SWyllys Ingersoll typedef struct _OP_STATE_DATA
36047e946e7SWyllys Ingersoll {
36147e946e7SWyllys Ingersoll 	CK_STATE    session_state;
36247e946e7SWyllys Ingersoll 	CK_ULONG    active_operation;
36347e946e7SWyllys Ingersoll 	CK_ULONG    data_len;
36447e946e7SWyllys Ingersoll } OP_STATE_DATA;
36547e946e7SWyllys Ingersoll 
36647e946e7SWyllys Ingersoll typedef struct _TWEAK_VEC
36747e946e7SWyllys Ingersoll {
36847e946e7SWyllys Ingersoll 	int   allow_key_mods;
36947e946e7SWyllys Ingersoll } TWEAK_VEC;
37047e946e7SWyllys Ingersoll 
37147e946e7SWyllys Ingersoll typedef struct _TOKEN_DATA
37247e946e7SWyllys Ingersoll {
37347e946e7SWyllys Ingersoll 	CK_TOKEN_INFO token_info;
37447e946e7SWyllys Ingersoll 	CK_BYTE   user_pin_sha[SHA1_DIGEST_LENGTH];
37547e946e7SWyllys Ingersoll 	CK_BYTE   so_pin_sha[SHA1_DIGEST_LENGTH];
37647e946e7SWyllys Ingersoll 	CK_BYTE   next_token_object_name[8];
37747e946e7SWyllys Ingersoll 	TWEAK_VEC tweak_vector;
37847e946e7SWyllys Ingersoll } TOKEN_DATA;
37947e946e7SWyllys Ingersoll 
38047e946e7SWyllys Ingersoll typedef struct _RSA_DIGEST_CONTEXT {
38147e946e7SWyllys Ingersoll 	DIGEST_CONTEXT hash_context;
38247e946e7SWyllys Ingersoll 	CK_BBOOL	flag;
38347e946e7SWyllys Ingersoll } RSA_DIGEST_CONTEXT;
38447e946e7SWyllys Ingersoll 
38547e946e7SWyllys Ingersoll typedef struct _MECH_LIST_ELEMENT
38647e946e7SWyllys Ingersoll {
38747e946e7SWyllys Ingersoll 	CK_MECHANISM_TYPE    mech_type;
38847e946e7SWyllys Ingersoll 	CK_MECHANISM_INFO    mech_info;
38947e946e7SWyllys Ingersoll } MECH_LIST_ELEMENT;
39047e946e7SWyllys Ingersoll 
39147e946e7SWyllys Ingersoll struct mech_list_item;
39247e946e7SWyllys Ingersoll 
39347e946e7SWyllys Ingersoll struct mech_list_item {
39447e946e7SWyllys Ingersoll 	struct mech_list_item *next;
39547e946e7SWyllys Ingersoll 	MECH_LIST_ELEMENT element;
39647e946e7SWyllys Ingersoll };
39747e946e7SWyllys Ingersoll 
39847e946e7SWyllys Ingersoll struct mech_list_item *
39947e946e7SWyllys Ingersoll find_mech_list_item_for_type(CK_MECHANISM_TYPE type,
40047e946e7SWyllys Ingersoll 	struct mech_list_item *head);
40147e946e7SWyllys Ingersoll 
40247e946e7SWyllys Ingersoll typedef struct _TOK_OBJ_ENTRY
40347e946e7SWyllys Ingersoll {
40447e946e7SWyllys Ingersoll 	CK_BBOOL  deleted;
40547e946e7SWyllys Ingersoll 	char	name[8];
40647e946e7SWyllys Ingersoll 	CK_ULONG  count_lo;
40747e946e7SWyllys Ingersoll 	CK_ULONG  count_hi;
40847e946e7SWyllys Ingersoll } TOK_OBJ_ENTRY;
40947e946e7SWyllys Ingersoll 
41047e946e7SWyllys Ingersoll typedef struct _LW_SHM_TYPE
41147e946e7SWyllys Ingersoll {
41247e946e7SWyllys Ingersoll 	pthread_mutex_t	mutex;
41347e946e7SWyllys Ingersoll 	TOKEN_DATA	nv_token_data;
41447e946e7SWyllys Ingersoll 	CK_ULONG	num_priv_tok_obj;
41547e946e7SWyllys Ingersoll 	CK_ULONG	num_publ_tok_obj;
41647e946e7SWyllys Ingersoll 	CK_BBOOL	priv_loaded;
41747e946e7SWyllys Ingersoll 	CK_BBOOL	publ_loaded;
4188d26100cSWyllys Ingersoll 	CK_BBOOL	token_available;
41947e946e7SWyllys Ingersoll 	TOK_OBJ_ENTRY  publ_tok_objs[ MAX_TOK_OBJS ];
42047e946e7SWyllys Ingersoll 	TOK_OBJ_ENTRY  priv_tok_objs[ MAX_TOK_OBJS ];
42147e946e7SWyllys Ingersoll } LW_SHM_TYPE;
42247e946e7SWyllys Ingersoll 
42347e946e7SWyllys Ingersoll typedef unsigned int CK_ULONG_32;
42447e946e7SWyllys Ingersoll typedef CK_ULONG_32 CK_OBJECT_CLASS_32;
42547e946e7SWyllys Ingersoll typedef CK_ULONG_32 CK_ATTRIBUTE_TYPE_32;
42647e946e7SWyllys Ingersoll 
42747e946e7SWyllys Ingersoll typedef struct CK_ATTRIBUTE_32 {
42847e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_TYPE_32 type;
42947e946e7SWyllys Ingersoll 	CK_ULONG_32 pValue;
43047e946e7SWyllys Ingersoll 	CK_ULONG_32 ulValueLen;
43147e946e7SWyllys Ingersoll } CK_ATTRIBUTE_32;
43247e946e7SWyllys Ingersoll 
43347e946e7SWyllys Ingersoll char *get_tpm_keystore_path();
43447e946e7SWyllys Ingersoll 
43547e946e7SWyllys Ingersoll struct messages {
43647e946e7SWyllys Ingersoll 	char *msg;
43747e946e7SWyllys Ingersoll };
43847e946e7SWyllys Ingersoll 
43947e946e7SWyllys Ingersoll struct token_specific_struct {
44047e946e7SWyllys Ingersoll 	CK_BYTE  token_debug_tag[MAXPATHLEN];
44147e946e7SWyllys Ingersoll 
44247e946e7SWyllys Ingersoll 	CK_RV  (*t_init)(char *, CK_SLOT_ID, TSS_HCONTEXT *);
44347e946e7SWyllys Ingersoll 	int  (*t_slot2local)();
44447e946e7SWyllys Ingersoll 
44547e946e7SWyllys Ingersoll 	CK_RV  (*t_rng)(TSS_HCONTEXT, CK_BYTE *, CK_ULONG);
44647e946e7SWyllys Ingersoll 	CK_RV  (*t_session)(CK_SLOT_ID);
447ab8176c2SWyllys Ingersoll 	CK_RV  (*t_final)(TSS_HCONTEXT);
44847e946e7SWyllys Ingersoll 	CK_RV (*t_rsa_decrypt)(TSS_HCONTEXT, CK_BYTE *,
44947e946e7SWyllys Ingersoll 		CK_ULONG, CK_BYTE *, CK_ULONG *, OBJECT *);
45047e946e7SWyllys Ingersoll 
45147e946e7SWyllys Ingersoll 	CK_RV (*t_rsa_encrypt)(
45247e946e7SWyllys Ingersoll 		TSS_HCONTEXT,
45347e946e7SWyllys Ingersoll 		CK_BYTE *, CK_ULONG, CK_BYTE *,
45447e946e7SWyllys Ingersoll 		CK_ULONG *, OBJECT *);
45547e946e7SWyllys Ingersoll 
45647e946e7SWyllys Ingersoll 	CK_RV (*t_rsa_sign)(TSS_HCONTEXT,
45747e946e7SWyllys Ingersoll 		CK_BYTE *,
45847e946e7SWyllys Ingersoll 		CK_ULONG,
45947e946e7SWyllys Ingersoll 		CK_BYTE *,
46047e946e7SWyllys Ingersoll 		CK_ULONG *,
46147e946e7SWyllys Ingersoll 		OBJECT *);
46247e946e7SWyllys Ingersoll 
46347e946e7SWyllys Ingersoll 	CK_RV (*t_rsa_verify)(TSS_HCONTEXT,
46447e946e7SWyllys Ingersoll 		CK_BYTE *,
46547e946e7SWyllys Ingersoll 		CK_ULONG,
46647e946e7SWyllys Ingersoll 		CK_BYTE *,
46747e946e7SWyllys Ingersoll 		CK_ULONG,
46847e946e7SWyllys Ingersoll 		OBJECT *);
46947e946e7SWyllys Ingersoll 
47047e946e7SWyllys Ingersoll 	CK_RV (*t_rsa_generate_keypair)(TSS_HCONTEXT, TEMPLATE *, TEMPLATE *);
47147e946e7SWyllys Ingersoll 
47247e946e7SWyllys Ingersoll 	CK_RV (*t_sha_init)(DIGEST_CONTEXT *);
47347e946e7SWyllys Ingersoll 
47447e946e7SWyllys Ingersoll 	CK_RV (*t_sha_update)(
47547e946e7SWyllys Ingersoll 		DIGEST_CONTEXT *,
47647e946e7SWyllys Ingersoll 		CK_BYTE	*,
47747e946e7SWyllys Ingersoll 		CK_ULONG);
47847e946e7SWyllys Ingersoll 
47947e946e7SWyllys Ingersoll 	CK_RV (*t_sha_final)(
48047e946e7SWyllys Ingersoll 		DIGEST_CONTEXT *,
48147e946e7SWyllys Ingersoll 		CK_BYTE *,
48247e946e7SWyllys Ingersoll 		CK_ULONG *);
48347e946e7SWyllys Ingersoll 	CK_RV (*t_login)(TSS_HCONTEXT, CK_USER_TYPE, CK_BYTE *, CK_ULONG);
48447e946e7SWyllys Ingersoll 	CK_RV (*t_logout)(TSS_HCONTEXT);
48547e946e7SWyllys Ingersoll 	CK_RV (*t_init_pin)(TSS_HCONTEXT, CK_BYTE *, CK_ULONG);
48647e946e7SWyllys Ingersoll 	CK_RV (*t_set_pin)(ST_SESSION_HANDLE, CK_BYTE *,
48747e946e7SWyllys Ingersoll 		CK_ULONG, CK_BYTE *, CK_ULONG);
48847e946e7SWyllys Ingersoll 	CK_RV (*t_verify_so_pin)(TSS_HCONTEXT, CK_BYTE *, CK_ULONG);
48947e946e7SWyllys Ingersoll };
49047e946e7SWyllys Ingersoll 
49147e946e7SWyllys Ingersoll typedef  struct token_specific_struct token_spec_t;
49247e946e7SWyllys Ingersoll 
49347e946e7SWyllys Ingersoll /*
49447e946e7SWyllys Ingersoll  * Global Variables
49547e946e7SWyllys Ingersoll  */
49647e946e7SWyllys Ingersoll extern void copy_slot_info(CK_SLOT_ID, CK_SLOT_INFO_PTR);
49747e946e7SWyllys Ingersoll 
49847e946e7SWyllys Ingersoll extern struct messages err_msg[];
49947e946e7SWyllys Ingersoll 
50047e946e7SWyllys Ingersoll extern token_spec_t token_specific;
50147e946e7SWyllys Ingersoll extern CK_BBOOL initialized;
50247e946e7SWyllys Ingersoll extern char *card_function_names[];
50347e946e7SWyllys Ingersoll extern char *total_function_names[];
50447e946e7SWyllys Ingersoll 
50547e946e7SWyllys Ingersoll extern MECH_LIST_ELEMENT mech_list[];
50647e946e7SWyllys Ingersoll extern CK_ULONG mech_list_len;
50747e946e7SWyllys Ingersoll 
50847e946e7SWyllys Ingersoll extern pthread_mutex_t native_mutex;
50947e946e7SWyllys Ingersoll 
51047e946e7SWyllys Ingersoll extern void *xproclock;
51147e946e7SWyllys Ingersoll 
51247e946e7SWyllys Ingersoll extern pthread_mutex_t pkcs_mutex, obj_list_mutex,
51347e946e7SWyllys Ingersoll 	sess_list_mutex, login_mutex;
51447e946e7SWyllys Ingersoll 
51547e946e7SWyllys Ingersoll extern DL_NODE *sess_list;
51647e946e7SWyllys Ingersoll extern DL_NODE *sess_obj_list;
51747e946e7SWyllys Ingersoll extern DL_NODE *publ_token_obj_list;
51847e946e7SWyllys Ingersoll extern DL_NODE *priv_token_obj_list;
51947e946e7SWyllys Ingersoll extern DL_NODE *object_map;
52047e946e7SWyllys Ingersoll 
52147e946e7SWyllys Ingersoll extern CK_BYTE so_pin_md5[MD5_DIGEST_LENGTH];
52247e946e7SWyllys Ingersoll extern CK_BYTE user_pin_md5[MD5_DIGEST_LENGTH];
52347e946e7SWyllys Ingersoll 
52447e946e7SWyllys Ingersoll extern CK_BYTE default_user_pin_sha[SHA1_DIGEST_LENGTH];
52547e946e7SWyllys Ingersoll extern CK_BYTE default_so_pin_sha[SHA1_DIGEST_LENGTH];
52647e946e7SWyllys Ingersoll extern CK_BYTE default_so_pin_md5[MD5_DIGEST_LENGTH];
52747e946e7SWyllys Ingersoll 
52847e946e7SWyllys Ingersoll extern LW_SHM_TYPE *global_shm;
52947e946e7SWyllys Ingersoll 
53047e946e7SWyllys Ingersoll extern TOKEN_DATA *nv_token_data;
53147e946e7SWyllys Ingersoll 
53247e946e7SWyllys Ingersoll extern CK_ULONG next_object_handle;
53347e946e7SWyllys Ingersoll extern CK_ULONG next_session_handle;
53447e946e7SWyllys Ingersoll 
53547e946e7SWyllys Ingersoll extern CK_STATE global_login_state;
53647e946e7SWyllys Ingersoll 
53747e946e7SWyllys Ingersoll extern CK_BYTE	ber_AlgIdRSAEncryption[];
53847e946e7SWyllys Ingersoll extern CK_ULONG	ber_AlgIdRSAEncryptionLen;
53947e946e7SWyllys Ingersoll extern CK_BYTE	ber_rsaEncryption[];
54047e946e7SWyllys Ingersoll extern CK_ULONG	ber_rsaEncryptionLen;
54147e946e7SWyllys Ingersoll extern CK_BYTE	ber_idDSA[];
54247e946e7SWyllys Ingersoll extern CK_ULONG	ber_idDSALen;
54347e946e7SWyllys Ingersoll 
54447e946e7SWyllys Ingersoll extern CK_BYTE ber_md5WithRSAEncryption[];
54547e946e7SWyllys Ingersoll extern CK_ULONG ber_md5WithRSAEncryptionLen;
54647e946e7SWyllys Ingersoll extern CK_BYTE ber_sha1WithRSAEncryption[];
54747e946e7SWyllys Ingersoll extern CK_ULONG ber_sha1WithRSAEncryptionLen;
54847e946e7SWyllys Ingersoll extern CK_BYTE ber_AlgMd5[];
54947e946e7SWyllys Ingersoll extern CK_ULONG ber_AlgMd5Len;
55047e946e7SWyllys Ingersoll extern CK_BYTE ber_AlgSha1[];
55147e946e7SWyllys Ingersoll extern CK_ULONG ber_AlgSha1Len;
55247e946e7SWyllys Ingersoll 
55347e946e7SWyllys Ingersoll extern CK_C_INITIALIZE_ARGS cinit_args;
55447e946e7SWyllys Ingersoll 
55547e946e7SWyllys Ingersoll /*
55647e946e7SWyllys Ingersoll  * Function Prototypes
55747e946e7SWyllys Ingersoll  */
55847e946e7SWyllys Ingersoll void *attach_shared_memory();
55947e946e7SWyllys Ingersoll void  detach_shared_memory(char *);
56047e946e7SWyllys Ingersoll 
56147e946e7SWyllys Ingersoll int API_Initialized();
56247e946e7SWyllys Ingersoll void Terminate_All_Process_Sessions();
56347e946e7SWyllys Ingersoll int API_Register();
56447e946e7SWyllys Ingersoll void API_UnRegister();
56547e946e7SWyllys Ingersoll 
56647e946e7SWyllys Ingersoll void CreateXProcLock(void *);
56747e946e7SWyllys Ingersoll int XProcLock(void *);
56847e946e7SWyllys Ingersoll int XProcUnLock(void *);
56947e946e7SWyllys Ingersoll 
57047e946e7SWyllys Ingersoll void loginit();
57147e946e7SWyllys Ingersoll void logterm();
57247e946e7SWyllys Ingersoll void logit(int, char *, ...);
57347e946e7SWyllys Ingersoll void AddToSessionList(Session_Struct_t *);
57447e946e7SWyllys Ingersoll void RemoveFromSessionList(Session_Struct_t *);
57547e946e7SWyllys Ingersoll 
57647e946e7SWyllys Ingersoll int Valid_Session(Session_Struct_t *, ST_SESSION_T *);
57747e946e7SWyllys Ingersoll 
57847e946e7SWyllys Ingersoll CK_BBOOL pin_expired(CK_SESSION_INFO *, CK_FLAGS);
57947e946e7SWyllys Ingersoll CK_BBOOL pin_locked(CK_SESSION_INFO *, CK_FLAGS);
58047e946e7SWyllys Ingersoll void set_login_flags(CK_USER_TYPE, CK_FLAGS *);
58147e946e7SWyllys Ingersoll 
58247e946e7SWyllys Ingersoll extern void init_slot_info(TOKEN_DATA *);
58347e946e7SWyllys Ingersoll 
58447e946e7SWyllys Ingersoll CK_RV update_migration_data(TSS_HCONTEXT,
58547e946e7SWyllys Ingersoll 	TSS_HKEY, TSS_HKEY, char *, char *, BYTE *, BYTE *);
58647e946e7SWyllys Ingersoll CK_RV token_rng(TSS_HCONTEXT, CK_BYTE *, CK_ULONG);
58747e946e7SWyllys Ingersoll 
58847e946e7SWyllys Ingersoll TSS_RESULT set_public_modulus(TSS_HCONTEXT, TSS_HKEY,
58947e946e7SWyllys Ingersoll     unsigned long, unsigned char *);
59047e946e7SWyllys Ingersoll TSS_RESULT open_tss_context(TSS_HCONTEXT *);
59147e946e7SWyllys Ingersoll CK_RV token_get_tpm_info(TSS_HCONTEXT, TOKEN_DATA *);
59247e946e7SWyllys Ingersoll 
59347e946e7SWyllys Ingersoll CK_RV clock_set_default_attributes(TEMPLATE *);
59447e946e7SWyllys Ingersoll CK_RV clock_check_required_attributes(TEMPLATE *, CK_ULONG);
59547e946e7SWyllys Ingersoll CK_RV clock_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
59647e946e7SWyllys Ingersoll 
59747e946e7SWyllys Ingersoll CK_RV counter_set_default_attributes(TEMPLATE *);
59847e946e7SWyllys Ingersoll CK_RV counter_check_required_attributes(TEMPLATE *, CK_ULONG);
59947e946e7SWyllys Ingersoll CK_RV counter_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
60047e946e7SWyllys Ingersoll 
60147e946e7SWyllys Ingersoll CK_RV compute_next_token_obj_name(CK_BYTE *, CK_BYTE *);
60247e946e7SWyllys Ingersoll 
60347e946e7SWyllys Ingersoll CK_RV save_token_object(TSS_HCONTEXT, OBJECT *);
60447e946e7SWyllys Ingersoll CK_RV save_public_token_object(OBJECT *);
60547e946e7SWyllys Ingersoll CK_RV save_private_token_object(TSS_HCONTEXT, OBJECT *);
60647e946e7SWyllys Ingersoll 
60747e946e7SWyllys Ingersoll CK_RV load_public_token_objects(void);
60847e946e7SWyllys Ingersoll CK_RV load_private_token_objects(TSS_HCONTEXT);
60947e946e7SWyllys Ingersoll 
61047e946e7SWyllys Ingersoll CK_RV reload_token_object(TSS_HCONTEXT, OBJECT *);
61147e946e7SWyllys Ingersoll 
61247e946e7SWyllys Ingersoll CK_RV delete_token_object(OBJECT *);
61347e946e7SWyllys Ingersoll 
61447e946e7SWyllys Ingersoll CK_RV init_token_data(TSS_HCONTEXT, TOKEN_DATA *);
61547e946e7SWyllys Ingersoll CK_RV load_token_data(TSS_HCONTEXT, TOKEN_DATA *);
61647e946e7SWyllys Ingersoll CK_RV save_token_data(TOKEN_DATA *);
61747e946e7SWyllys Ingersoll void copy_slot_info(CK_SLOT_ID, CK_SLOT_INFO_PTR);
61847e946e7SWyllys Ingersoll 
61933c15889SWyllys Ingersoll CK_RV compute_sha(CK_BYTE *, CK_ULONG_32, CK_BYTE *);
62047e946e7SWyllys Ingersoll 
62147e946e7SWyllys Ingersoll CK_RV parity_is_odd(CK_BYTE);
62247e946e7SWyllys Ingersoll 
62347e946e7SWyllys Ingersoll CK_RV build_attribute(CK_ATTRIBUTE_TYPE,
62447e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG, CK_ATTRIBUTE **);
62547e946e7SWyllys Ingersoll 
62633c15889SWyllys Ingersoll CK_RV add_pkcs_padding(CK_BYTE *, UINT32, UINT32, UINT32);
62747e946e7SWyllys Ingersoll 
62833c15889SWyllys Ingersoll CK_RV strip_pkcs_padding(CK_BYTE *, UINT32, UINT32 *);
62947e946e7SWyllys Ingersoll 
63047e946e7SWyllys Ingersoll CK_RV remove_leading_zeros(CK_ATTRIBUTE *);
63147e946e7SWyllys Ingersoll 
63247e946e7SWyllys Ingersoll CK_RV rsa_pkcs_encrypt(
63347e946e7SWyllys Ingersoll 	SESSION *,
63447e946e7SWyllys Ingersoll 	CK_BBOOL,
63547e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT *,
63647e946e7SWyllys Ingersoll 	CK_BYTE *,
63747e946e7SWyllys Ingersoll 	CK_ULONG,
63847e946e7SWyllys Ingersoll 	CK_BYTE *,
63947e946e7SWyllys Ingersoll 	CK_ULONG *);
64047e946e7SWyllys Ingersoll 
64147e946e7SWyllys Ingersoll CK_RV rsa_pkcs_decrypt(SESSION *,
64247e946e7SWyllys Ingersoll 	CK_BBOOL,
64347e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT *,
64447e946e7SWyllys Ingersoll 	CK_BYTE *,
64547e946e7SWyllys Ingersoll 	CK_ULONG,
64647e946e7SWyllys Ingersoll 	CK_BYTE *,
64747e946e7SWyllys Ingersoll 	CK_ULONG *);
64847e946e7SWyllys Ingersoll 
64947e946e7SWyllys Ingersoll CK_RV rsa_pkcs_sign(SESSION *,
65047e946e7SWyllys Ingersoll 	CK_BBOOL,
65147e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
65247e946e7SWyllys Ingersoll 	CK_BYTE *,
65347e946e7SWyllys Ingersoll 	CK_ULONG,
65447e946e7SWyllys Ingersoll 	CK_BYTE *,
65547e946e7SWyllys Ingersoll 	CK_ULONG *);
65647e946e7SWyllys Ingersoll 
65747e946e7SWyllys Ingersoll CK_RV rsa_pkcs_verify(SESSION *,
65847e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
65947e946e7SWyllys Ingersoll 	CK_BYTE *,
66047e946e7SWyllys Ingersoll 	CK_ULONG,
66147e946e7SWyllys Ingersoll 	CK_BYTE *,
66247e946e7SWyllys Ingersoll 	CK_ULONG);
66347e946e7SWyllys Ingersoll 
66447e946e7SWyllys Ingersoll CK_RV rsa_pkcs_verify_recover(SESSION *,
66547e946e7SWyllys Ingersoll 	CK_BBOOL,
66647e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
66747e946e7SWyllys Ingersoll 	CK_BYTE *,
66847e946e7SWyllys Ingersoll 	CK_ULONG,
66947e946e7SWyllys Ingersoll 	CK_BYTE *,
67047e946e7SWyllys Ingersoll 	CK_ULONG *);
67147e946e7SWyllys Ingersoll 
67247e946e7SWyllys Ingersoll CK_RV rsa_hash_pkcs_sign(SESSION *,
67347e946e7SWyllys Ingersoll 	CK_BBOOL,
67447e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
67547e946e7SWyllys Ingersoll 	CK_BYTE *,
67647e946e7SWyllys Ingersoll 	CK_ULONG,
67747e946e7SWyllys Ingersoll 	CK_BYTE *,
67847e946e7SWyllys Ingersoll 	CK_ULONG *);
67947e946e7SWyllys Ingersoll 
68047e946e7SWyllys Ingersoll CK_RV rsa_hash_pkcs_verify(SESSION *,
68147e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
68247e946e7SWyllys Ingersoll 	CK_BYTE *,
68347e946e7SWyllys Ingersoll 	CK_ULONG,
68447e946e7SWyllys Ingersoll 	CK_BYTE *,
68547e946e7SWyllys Ingersoll 	CK_ULONG);
68647e946e7SWyllys Ingersoll 
68747e946e7SWyllys Ingersoll CK_RV rsa_hash_pkcs_sign_update(SESSION *,
68847e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
68947e946e7SWyllys Ingersoll 	CK_BYTE *,
69047e946e7SWyllys Ingersoll 	CK_ULONG);
69147e946e7SWyllys Ingersoll 
69247e946e7SWyllys Ingersoll CK_RV rsa_hash_pkcs_verify_update(SESSION *,
69347e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
69447e946e7SWyllys Ingersoll 	CK_BYTE *,
69547e946e7SWyllys Ingersoll 	CK_ULONG);
69647e946e7SWyllys Ingersoll 
69747e946e7SWyllys Ingersoll CK_RV rsa_hash_pkcs_sign_final(SESSION *,
69847e946e7SWyllys Ingersoll 	CK_BBOOL,
69947e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
70047e946e7SWyllys Ingersoll 	CK_BYTE *,
70147e946e7SWyllys Ingersoll 	CK_ULONG *);
70247e946e7SWyllys Ingersoll 
70347e946e7SWyllys Ingersoll CK_RV rsa_hash_pkcs_verify_final(SESSION *,
70447e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
70547e946e7SWyllys Ingersoll 	CK_BYTE *,
70647e946e7SWyllys Ingersoll 	CK_ULONG);
70747e946e7SWyllys Ingersoll 
70847e946e7SWyllys Ingersoll 
70947e946e7SWyllys Ingersoll CK_RV ckm_rsa_key_pair_gen(TSS_HCONTEXT, TEMPLATE *, TEMPLATE *);
71047e946e7SWyllys Ingersoll 
71147e946e7SWyllys Ingersoll CK_RV sha1_hash(SESSION *, CK_BBOOL,
71247e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
71347e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG,
71447e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
71547e946e7SWyllys Ingersoll 
71647e946e7SWyllys Ingersoll CK_RV sha1_hmac_sign(SESSION *, CK_BBOOL,
71747e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
71847e946e7SWyllys Ingersoll 	CK_BYTE *,
71947e946e7SWyllys Ingersoll 	CK_ULONG,
72047e946e7SWyllys Ingersoll 	CK_BYTE *,
72147e946e7SWyllys Ingersoll 	CK_ULONG *);
72247e946e7SWyllys Ingersoll 
72347e946e7SWyllys Ingersoll CK_RV sha1_hmac_verify(SESSION *,
72447e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
72547e946e7SWyllys Ingersoll 	CK_BYTE *,
72647e946e7SWyllys Ingersoll 	CK_ULONG,
72747e946e7SWyllys Ingersoll 	CK_BYTE *,
72847e946e7SWyllys Ingersoll 	CK_ULONG);
72947e946e7SWyllys Ingersoll 
73047e946e7SWyllys Ingersoll CK_RV md5_hash(SESSION *, CK_BBOOL,
73147e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
73247e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG,
73347e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
73447e946e7SWyllys Ingersoll 
73547e946e7SWyllys Ingersoll CK_RV md5_hmac_sign(SESSION *, CK_BBOOL,
73647e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
73747e946e7SWyllys Ingersoll 	CK_BYTE *,
73847e946e7SWyllys Ingersoll 	CK_ULONG,
73947e946e7SWyllys Ingersoll 	CK_BYTE *,
74047e946e7SWyllys Ingersoll 	CK_ULONG *);
74147e946e7SWyllys Ingersoll 
74247e946e7SWyllys Ingersoll CK_RV md5_hmac_verify(SESSION *,
74347e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
74447e946e7SWyllys Ingersoll 	CK_BYTE *,
74547e946e7SWyllys Ingersoll 	CK_ULONG,
74647e946e7SWyllys Ingersoll 	CK_BYTE *,
74747e946e7SWyllys Ingersoll 	CK_ULONG);
74847e946e7SWyllys Ingersoll 
74947e946e7SWyllys Ingersoll DL_NODE *dlist_add_as_first(DL_NODE *, void *);
75047e946e7SWyllys Ingersoll DL_NODE *dlist_add_as_last(DL_NODE *, void *);
75147e946e7SWyllys Ingersoll DL_NODE *dlist_find(DL_NODE *, void *);
75247e946e7SWyllys Ingersoll DL_NODE *dlist_get_first(DL_NODE *);
75347e946e7SWyllys Ingersoll DL_NODE *dlist_get_last(DL_NODE *);
75447e946e7SWyllys Ingersoll 	CK_ULONG dlist_length(DL_NODE *);
75547e946e7SWyllys Ingersoll DL_NODE *dlist_next(DL_NODE *);
75647e946e7SWyllys Ingersoll DL_NODE *dlist_prev(DL_NODE *);
75747e946e7SWyllys Ingersoll void dlist_purge(DL_NODE *);
75847e946e7SWyllys Ingersoll DL_NODE *dlist_remove_node(DL_NODE *, DL_NODE *);
75947e946e7SWyllys Ingersoll 
76047e946e7SWyllys Ingersoll CK_RV attach_shm(void);
76147e946e7SWyllys Ingersoll CK_RV detach_shm(void);
76247e946e7SWyllys Ingersoll 
76347e946e7SWyllys Ingersoll // encryption manager routines
76447e946e7SWyllys Ingersoll //
76547e946e7SWyllys Ingersoll CK_RV encr_mgr_init(SESSION *,
76647e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT *,
76747e946e7SWyllys Ingersoll 	CK_ULONG,
76847e946e7SWyllys Ingersoll 	CK_MECHANISM *,
76947e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE);
77047e946e7SWyllys Ingersoll 
77147e946e7SWyllys Ingersoll CK_RV encr_mgr_cleanup(ENCR_DECR_CONTEXT *);
77247e946e7SWyllys Ingersoll 
77347e946e7SWyllys Ingersoll CK_RV encr_mgr_encrypt(SESSION *, CK_BBOOL,
77447e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT *,
77547e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG,
77647e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
77747e946e7SWyllys Ingersoll 
77847e946e7SWyllys Ingersoll CK_RV decr_mgr_init(SESSION *,
77947e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT *,
78047e946e7SWyllys Ingersoll 	CK_ULONG,
78147e946e7SWyllys Ingersoll 	CK_MECHANISM *,
78247e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE);
78347e946e7SWyllys Ingersoll 
78447e946e7SWyllys Ingersoll CK_RV decr_mgr_cleanup(ENCR_DECR_CONTEXT *);
78547e946e7SWyllys Ingersoll 
78647e946e7SWyllys Ingersoll CK_RV decr_mgr_decrypt(SESSION *, CK_BBOOL,
78747e946e7SWyllys Ingersoll 	ENCR_DECR_CONTEXT *,
78847e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG,
78947e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
79047e946e7SWyllys Ingersoll 
79147e946e7SWyllys Ingersoll CK_RV digest_mgr_cleanup(DIGEST_CONTEXT *);
79247e946e7SWyllys Ingersoll 
79347e946e7SWyllys Ingersoll CK_RV digest_mgr_init(SESSION *,
79447e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
79547e946e7SWyllys Ingersoll 	CK_MECHANISM *);
79647e946e7SWyllys Ingersoll 
79747e946e7SWyllys Ingersoll CK_RV digest_mgr_digest(SESSION *, CK_BBOOL,
79847e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
79947e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG,
80047e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
80147e946e7SWyllys Ingersoll 
80247e946e7SWyllys Ingersoll CK_RV digest_mgr_digest_update(SESSION *,
80347e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
80447e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG);
80547e946e7SWyllys Ingersoll 
80647e946e7SWyllys Ingersoll CK_RV digest_mgr_digest_key(SESSION *,
80747e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
80847e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE);
80947e946e7SWyllys Ingersoll 
81047e946e7SWyllys Ingersoll CK_RV digest_mgr_digest_final(SESSION *,
81147e946e7SWyllys Ingersoll 	DIGEST_CONTEXT *,
81247e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
81347e946e7SWyllys Ingersoll 
81447e946e7SWyllys Ingersoll CK_RV key_mgr_generate_key_pair(SESSION *,
81547e946e7SWyllys Ingersoll 	CK_MECHANISM *,
81647e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG,
81747e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG,
81847e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE *,
81947e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE *);
82047e946e7SWyllys Ingersoll 
82147e946e7SWyllys Ingersoll CK_RV key_mgr_wrap_key(SESSION *,
82247e946e7SWyllys Ingersoll 	CK_BBOOL,
82347e946e7SWyllys Ingersoll 	CK_MECHANISM *,
82447e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE,
82547e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE,
82647e946e7SWyllys Ingersoll 	CK_BYTE *,
82747e946e7SWyllys Ingersoll 	CK_ULONG *);
82847e946e7SWyllys Ingersoll 
82947e946e7SWyllys Ingersoll CK_RV key_mgr_unwrap_key(SESSION *,
83047e946e7SWyllys Ingersoll 	CK_MECHANISM *,
83147e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *,
83247e946e7SWyllys Ingersoll 	CK_ULONG,
83347e946e7SWyllys Ingersoll 	CK_BYTE *,
83447e946e7SWyllys Ingersoll 	CK_ULONG,
83547e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE,
83647e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE *);
83747e946e7SWyllys Ingersoll 
83847e946e7SWyllys Ingersoll CK_RV sign_mgr_init(SESSION *,
83947e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
84047e946e7SWyllys Ingersoll 	CK_MECHANISM *,
84147e946e7SWyllys Ingersoll 	CK_BBOOL,
84247e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE);
84347e946e7SWyllys Ingersoll 
84447e946e7SWyllys Ingersoll CK_RV sign_mgr_cleanup(SIGN_VERIFY_CONTEXT *);
84547e946e7SWyllys Ingersoll 
84647e946e7SWyllys Ingersoll CK_RV sign_mgr_sign(SESSION *,
84747e946e7SWyllys Ingersoll 	CK_BBOOL,
84847e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
84947e946e7SWyllys Ingersoll 	CK_BYTE *,
85047e946e7SWyllys Ingersoll 	CK_ULONG,
85147e946e7SWyllys Ingersoll 	CK_BYTE *,
85247e946e7SWyllys Ingersoll 	CK_ULONG *);
85347e946e7SWyllys Ingersoll 
85447e946e7SWyllys Ingersoll CK_RV sign_mgr_sign_recover(SESSION *,
85547e946e7SWyllys Ingersoll 	CK_BBOOL,
85647e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
85747e946e7SWyllys Ingersoll 	CK_BYTE *,
85847e946e7SWyllys Ingersoll 	CK_ULONG,
85947e946e7SWyllys Ingersoll 	CK_BYTE *,
86047e946e7SWyllys Ingersoll 	CK_ULONG *);
86147e946e7SWyllys Ingersoll 
86247e946e7SWyllys Ingersoll CK_RV sign_mgr_sign_final(SESSION *,
86347e946e7SWyllys Ingersoll 	CK_BBOOL,
86447e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
86547e946e7SWyllys Ingersoll 	CK_BYTE *,
86647e946e7SWyllys Ingersoll 	CK_ULONG *);
86747e946e7SWyllys Ingersoll 
86847e946e7SWyllys Ingersoll CK_RV sign_mgr_sign_update(SESSION *,
86947e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
87047e946e7SWyllys Ingersoll 	CK_BYTE *,
87147e946e7SWyllys Ingersoll 	CK_ULONG);
87247e946e7SWyllys Ingersoll 
87347e946e7SWyllys Ingersoll CK_RV verify_mgr_init(SESSION *,
87447e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
87547e946e7SWyllys Ingersoll 	CK_MECHANISM *,
87647e946e7SWyllys Ingersoll 	CK_BBOOL,
87747e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE);
87847e946e7SWyllys Ingersoll 
87947e946e7SWyllys Ingersoll CK_RV verify_mgr_cleanup(SIGN_VERIFY_CONTEXT *);
88047e946e7SWyllys Ingersoll 
88147e946e7SWyllys Ingersoll CK_RV verify_mgr_verify(SESSION *,
88247e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
88347e946e7SWyllys Ingersoll 	CK_BYTE *,
88447e946e7SWyllys Ingersoll 	CK_ULONG,
88547e946e7SWyllys Ingersoll 	CK_BYTE *,
88647e946e7SWyllys Ingersoll 	CK_ULONG);
88747e946e7SWyllys Ingersoll 
88847e946e7SWyllys Ingersoll CK_RV verify_mgr_verify_recover(SESSION *,
88947e946e7SWyllys Ingersoll 	CK_BBOOL,
89047e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
89147e946e7SWyllys Ingersoll 	CK_BYTE *,
89247e946e7SWyllys Ingersoll 	CK_ULONG,
89347e946e7SWyllys Ingersoll 	CK_BYTE *,
89447e946e7SWyllys Ingersoll 	CK_ULONG *);
89547e946e7SWyllys Ingersoll 
89647e946e7SWyllys Ingersoll CK_RV verify_mgr_verify_update(SESSION *,
89747e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
89847e946e7SWyllys Ingersoll 	CK_BYTE *,
89947e946e7SWyllys Ingersoll 	CK_ULONG);
90047e946e7SWyllys Ingersoll 
90147e946e7SWyllys Ingersoll CK_RV verify_mgr_verify_final(SESSION *,
90247e946e7SWyllys Ingersoll 	SIGN_VERIFY_CONTEXT *,
90347e946e7SWyllys Ingersoll 	CK_BYTE *,
90447e946e7SWyllys Ingersoll 	CK_ULONG);
90547e946e7SWyllys Ingersoll 
90647e946e7SWyllys Ingersoll 
90747e946e7SWyllys Ingersoll // session manager routines
90847e946e7SWyllys Ingersoll //
90947e946e7SWyllys Ingersoll CK_RV session_mgr_close_all_sessions(void);
91047e946e7SWyllys Ingersoll CK_RV session_mgr_close_session(SESSION *);
91147e946e7SWyllys Ingersoll SESSION *session_mgr_find(CK_SESSION_HANDLE);
91247e946e7SWyllys Ingersoll CK_RV session_mgr_login_all(CK_USER_TYPE);
91347e946e7SWyllys Ingersoll CK_RV session_mgr_logout_all(void);
91447e946e7SWyllys Ingersoll CK_RV session_mgr_new(CK_ULONG, SESSION **);
91547e946e7SWyllys Ingersoll 
91647e946e7SWyllys Ingersoll CK_BBOOL session_mgr_readonly_exists(void);
91747e946e7SWyllys Ingersoll CK_BBOOL session_mgr_so_session_exists(void);
91847e946e7SWyllys Ingersoll CK_BBOOL session_mgr_user_session_exists(void);
91947e946e7SWyllys Ingersoll CK_BBOOL session_mgr_public_session_exists(void);
92047e946e7SWyllys Ingersoll 
92147e946e7SWyllys Ingersoll CK_RV session_mgr_get_op_state(SESSION *, CK_BBOOL,
92247e946e7SWyllys Ingersoll 	CK_BYTE *, CK_ULONG *);
92347e946e7SWyllys Ingersoll 
92447e946e7SWyllys Ingersoll CK_RV session_mgr_set_op_state(SESSION *,
92547e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE, CK_OBJECT_HANDLE, CK_BYTE *);
92647e946e7SWyllys Ingersoll 
92747e946e7SWyllys Ingersoll CK_RV object_mgr_add(SESSION *,
92847e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG, CK_OBJECT_HANDLE *);
92947e946e7SWyllys Ingersoll 
93047e946e7SWyllys Ingersoll CK_RV object_mgr_add_to_map(SESSION *, OBJECT *, CK_OBJECT_HANDLE *);
93147e946e7SWyllys Ingersoll 
93247e946e7SWyllys Ingersoll CK_RV object_mgr_add_to_shm(OBJECT *);
93347e946e7SWyllys Ingersoll CK_RV object_mgr_del_from_shm(OBJECT *);
93447e946e7SWyllys Ingersoll 
93547e946e7SWyllys Ingersoll CK_RV object_mgr_copy(SESSION *,
93647e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG, CK_OBJECT_HANDLE,
93747e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE *);
93847e946e7SWyllys Ingersoll 
93947e946e7SWyllys Ingersoll CK_RV object_mgr_create_final(SESSION *,
94047e946e7SWyllys Ingersoll 	OBJECT *, CK_OBJECT_HANDLE *);
94147e946e7SWyllys Ingersoll 
94247e946e7SWyllys Ingersoll CK_RV object_mgr_create_skel(SESSION *,
94347e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG, CK_ULONG,
94447e946e7SWyllys Ingersoll 	CK_ULONG, CK_ULONG, OBJECT **);
94547e946e7SWyllys Ingersoll 
94647e946e7SWyllys Ingersoll CK_RV object_mgr_destroy_object(SESSION *, CK_OBJECT_HANDLE);
94747e946e7SWyllys Ingersoll 
94847e946e7SWyllys Ingersoll CK_RV object_mgr_destroy_token_objects(TSS_HCONTEXT);
94947e946e7SWyllys Ingersoll 
95047e946e7SWyllys Ingersoll CK_RV object_mgr_find_in_map1(TSS_HCONTEXT, CK_OBJECT_HANDLE, OBJECT **);
95147e946e7SWyllys Ingersoll 
95247e946e7SWyllys Ingersoll CK_RV object_mgr_find_in_map2(TSS_HCONTEXT, OBJECT *, CK_OBJECT_HANDLE *);
95347e946e7SWyllys Ingersoll 
95447e946e7SWyllys Ingersoll CK_RV object_mgr_find_init(SESSION *, CK_ATTRIBUTE *, CK_ULONG);
95547e946e7SWyllys Ingersoll 
95647e946e7SWyllys Ingersoll CK_RV object_mgr_find_build_list(SESSION *,
95747e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *,
95847e946e7SWyllys Ingersoll 	CK_ULONG,
95947e946e7SWyllys Ingersoll 	DL_NODE *,
96047e946e7SWyllys Ingersoll 	CK_BBOOL public_only);
96147e946e7SWyllys Ingersoll 
96247e946e7SWyllys Ingersoll CK_RV object_mgr_find_final(SESSION *);
96347e946e7SWyllys Ingersoll 
96447e946e7SWyllys Ingersoll CK_RV object_mgr_get_attribute_values(SESSION *,
96547e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE,
96647e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *,
96747e946e7SWyllys Ingersoll 	CK_ULONG);
96847e946e7SWyllys Ingersoll 
96947e946e7SWyllys Ingersoll CK_RV object_mgr_get_object_size(TSS_HCONTEXT, CK_OBJECT_HANDLE,
97047e946e7SWyllys Ingersoll 	CK_ULONG *);
97147e946e7SWyllys Ingersoll 
97247e946e7SWyllys Ingersoll CK_BBOOL object_mgr_invalidate_handle1(CK_OBJECT_HANDLE handle);
97347e946e7SWyllys Ingersoll 
97447e946e7SWyllys Ingersoll CK_BBOOL object_mgr_invalidate_handle2(OBJECT *);
97547e946e7SWyllys Ingersoll 
97647e946e7SWyllys Ingersoll CK_BBOOL object_mgr_purge_session_objects(SESSION *, SESS_OBJ_TYPE);
97747e946e7SWyllys Ingersoll 
97847e946e7SWyllys Ingersoll CK_BBOOL object_mgr_purge_token_objects(TSS_HCONTEXT);
97947e946e7SWyllys Ingersoll 
98047e946e7SWyllys Ingersoll CK_BBOOL object_mgr_purge_private_token_objects(TSS_HCONTEXT);
98147e946e7SWyllys Ingersoll 
98247e946e7SWyllys Ingersoll CK_RV object_mgr_remove_from_map(CK_OBJECT_HANDLE);
98347e946e7SWyllys Ingersoll 
98447e946e7SWyllys Ingersoll CK_RV object_mgr_restore_obj(CK_BYTE *, OBJECT *);
98547e946e7SWyllys Ingersoll 
98647e946e7SWyllys Ingersoll CK_RV object_mgr_set_attribute_values(SESSION *,
98747e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE,
98847e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *,
98947e946e7SWyllys Ingersoll 	CK_ULONG);
99047e946e7SWyllys Ingersoll 
99147e946e7SWyllys Ingersoll CK_BBOOL object_mgr_purge_map(SESSION *, SESS_OBJ_TYPE);
99247e946e7SWyllys Ingersoll 
99347e946e7SWyllys Ingersoll CK_RV object_create(CK_ATTRIBUTE *, CK_ULONG, OBJECT **);
99447e946e7SWyllys Ingersoll 
99547e946e7SWyllys Ingersoll CK_RV object_create_skel(CK_ATTRIBUTE *,
99647e946e7SWyllys Ingersoll 	CK_ULONG,
99747e946e7SWyllys Ingersoll 	CK_ULONG,
99847e946e7SWyllys Ingersoll 	CK_ULONG,
99947e946e7SWyllys Ingersoll 	CK_ULONG,
100047e946e7SWyllys Ingersoll 	OBJECT **);
100147e946e7SWyllys Ingersoll 
100247e946e7SWyllys Ingersoll CK_RV object_copy(CK_ATTRIBUTE *,
100347e946e7SWyllys Ingersoll 	CK_ULONG,
100447e946e7SWyllys Ingersoll 	OBJECT *,
100547e946e7SWyllys Ingersoll 	OBJECT **);
100647e946e7SWyllys Ingersoll 
100747e946e7SWyllys Ingersoll CK_RV object_flatten(OBJECT *,
100847e946e7SWyllys Ingersoll 	CK_BYTE **,
100933c15889SWyllys Ingersoll 	CK_ULONG_32 *);
101047e946e7SWyllys Ingersoll 
101147e946e7SWyllys Ingersoll CK_BBOOL object_free(OBJECT *);
101247e946e7SWyllys Ingersoll 
101347e946e7SWyllys Ingersoll CK_RV object_get_attribute_values(OBJECT *,
101447e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *,
101547e946e7SWyllys Ingersoll 	CK_ULONG);
101647e946e7SWyllys Ingersoll 
101747e946e7SWyllys Ingersoll CK_ULONG object_get_size(OBJECT *);
101847e946e7SWyllys Ingersoll 
101947e946e7SWyllys Ingersoll CK_RV object_restore(CK_BYTE *,
102047e946e7SWyllys Ingersoll 	OBJECT **,
102147e946e7SWyllys Ingersoll 	CK_BBOOL replace);
102247e946e7SWyllys Ingersoll 
102347e946e7SWyllys Ingersoll CK_RV object_set_attribute_values(OBJECT *,
102447e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *,
102547e946e7SWyllys Ingersoll 	CK_ULONG);
102647e946e7SWyllys Ingersoll 
102747e946e7SWyllys Ingersoll CK_BBOOL object_is_modifiable(OBJECT *);
102847e946e7SWyllys Ingersoll CK_BBOOL object_is_private(OBJECT *);
102947e946e7SWyllys Ingersoll CK_BBOOL object_is_public(OBJECT *);
103047e946e7SWyllys Ingersoll CK_BBOOL object_is_token_object(OBJECT *);
103147e946e7SWyllys Ingersoll CK_BBOOL object_is_session_object(OBJECT *);
103247e946e7SWyllys Ingersoll 
103347e946e7SWyllys Ingersoll CK_BBOOL is_attribute_defined(CK_ATTRIBUTE_TYPE);
103447e946e7SWyllys Ingersoll 
103547e946e7SWyllys Ingersoll CK_RV template_add_attributes(TEMPLATE *,
103647e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG);
103747e946e7SWyllys Ingersoll 
103847e946e7SWyllys Ingersoll CK_RV template_add_default_attributes(TEMPLATE *,
103947e946e7SWyllys Ingersoll 	CK_ULONG,
104047e946e7SWyllys Ingersoll 	CK_ULONG,
104147e946e7SWyllys Ingersoll 	CK_ULONG);
104247e946e7SWyllys Ingersoll 
104347e946e7SWyllys Ingersoll CK_BBOOL template_attribute_find(TEMPLATE *,
104447e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_TYPE, CK_ATTRIBUTE **);
104547e946e7SWyllys Ingersoll 
104647e946e7SWyllys Ingersoll void template_attribute_find_multiple(TEMPLATE *,
104747e946e7SWyllys Ingersoll 	ATTRIBUTE_PARSE_LIST *,
104847e946e7SWyllys Ingersoll 	CK_ULONG);
104947e946e7SWyllys Ingersoll 
105047e946e7SWyllys Ingersoll CK_BBOOL template_check_exportability(TEMPLATE *, CK_ATTRIBUTE_TYPE type);
105147e946e7SWyllys Ingersoll 
105247e946e7SWyllys Ingersoll CK_RV template_check_required_attributes(TEMPLATE *,
105347e946e7SWyllys Ingersoll 	CK_ULONG, CK_ULONG, CK_ULONG);
105447e946e7SWyllys Ingersoll 
105547e946e7SWyllys Ingersoll CK_RV template_check_required_base_attributes(TEMPLATE *,
105647e946e7SWyllys Ingersoll 	CK_ULONG);
105747e946e7SWyllys Ingersoll 
105847e946e7SWyllys Ingersoll CK_BBOOL template_compare(CK_ATTRIBUTE *,
105947e946e7SWyllys Ingersoll 	CK_ULONG, TEMPLATE *);
106047e946e7SWyllys Ingersoll 
106147e946e7SWyllys Ingersoll CK_RV template_copy(TEMPLATE *, TEMPLATE *);
106247e946e7SWyllys Ingersoll 
106347e946e7SWyllys Ingersoll CK_RV template_flatten(TEMPLATE *, CK_BYTE *);
106447e946e7SWyllys Ingersoll 
106547e946e7SWyllys Ingersoll CK_RV template_free(TEMPLATE *);
106647e946e7SWyllys Ingersoll 
106747e946e7SWyllys Ingersoll CK_BBOOL template_get_class(TEMPLATE *, CK_ULONG *, CK_ULONG *);
106847e946e7SWyllys Ingersoll 
106947e946e7SWyllys Ingersoll CK_ULONG template_get_count(TEMPLATE *);
107047e946e7SWyllys Ingersoll 
107147e946e7SWyllys Ingersoll CK_ULONG template_get_size(TEMPLATE *);
107247e946e7SWyllys Ingersoll CK_ULONG template_get_compressed_size(TEMPLATE *);
107347e946e7SWyllys Ingersoll 
107447e946e7SWyllys Ingersoll CK_RV template_set_default_common_attributes(TEMPLATE *);
107547e946e7SWyllys Ingersoll 
107647e946e7SWyllys Ingersoll CK_RV template_merge(TEMPLATE *, TEMPLATE **);
107747e946e7SWyllys Ingersoll 
107847e946e7SWyllys Ingersoll CK_RV template_update_attribute(TEMPLATE *, CK_ATTRIBUTE *);
107947e946e7SWyllys Ingersoll 
108047e946e7SWyllys Ingersoll CK_RV template_unflatten(TEMPLATE **, CK_BYTE *, CK_ULONG);
108147e946e7SWyllys Ingersoll 
108247e946e7SWyllys Ingersoll CK_RV template_validate_attribute(TEMPLATE *,
108347e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG, CK_ULONG, CK_ULONG);
108447e946e7SWyllys Ingersoll 
108547e946e7SWyllys Ingersoll CK_RV template_validate_attributes(TEMPLATE *,
108647e946e7SWyllys Ingersoll 	CK_ULONG, CK_ULONG, CK_ULONG);
108747e946e7SWyllys Ingersoll 
108847e946e7SWyllys Ingersoll CK_RV template_validate_base_attribute(TEMPLATE *,
108947e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ULONG);
109047e946e7SWyllys Ingersoll 
109147e946e7SWyllys Ingersoll 
109247e946e7SWyllys Ingersoll // DATA OBJECT ROUTINES
109347e946e7SWyllys Ingersoll //
109447e946e7SWyllys Ingersoll CK_RV data_object_check_required_attributes(TEMPLATE *, CK_ULONG);
109547e946e7SWyllys Ingersoll CK_RV data_object_set_default_attributes(TEMPLATE *, CK_ULONG);
109647e946e7SWyllys Ingersoll CK_RV data_object_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
109747e946e7SWyllys Ingersoll 
109847e946e7SWyllys Ingersoll // CERTIFICATE ROUTINES
109947e946e7SWyllys Ingersoll CK_RV cert_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
110047e946e7SWyllys Ingersoll 
110147e946e7SWyllys Ingersoll CK_RV cert_x509_check_required_attributes(TEMPLATE *, CK_ULONG);
110247e946e7SWyllys Ingersoll CK_RV cert_x509_set_default_attributes(TEMPLATE *, CK_ULONG);
110347e946e7SWyllys Ingersoll CK_RV cert_x509_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
110447e946e7SWyllys Ingersoll CK_RV cert_vendor_check_required_attributes(TEMPLATE *, CK_ULONG);
110547e946e7SWyllys Ingersoll CK_RV cert_vendor_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
110647e946e7SWyllys Ingersoll 
110747e946e7SWyllys Ingersoll //
110847e946e7SWyllys Ingersoll // KEY ROUTINES
110947e946e7SWyllys Ingersoll //
111047e946e7SWyllys Ingersoll CK_RV key_object_check_required_attributes(TEMPLATE *, CK_ULONG);
111147e946e7SWyllys Ingersoll CK_RV key_object_set_default_attributes(TEMPLATE *, CK_ULONG);
111247e946e7SWyllys Ingersoll CK_RV key_object_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
111347e946e7SWyllys Ingersoll 
111447e946e7SWyllys Ingersoll CK_RV publ_key_check_required_attributes(TEMPLATE *, CK_ULONG);
111547e946e7SWyllys Ingersoll CK_RV publ_key_set_default_attributes(TEMPLATE *, CK_ULONG);
111647e946e7SWyllys Ingersoll CK_RV publ_key_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
111747e946e7SWyllys Ingersoll 
111847e946e7SWyllys Ingersoll CK_RV priv_key_check_required_attributes(TEMPLATE *, CK_ULONG);
111947e946e7SWyllys Ingersoll CK_RV priv_key_set_default_attributes(TEMPLATE *, CK_ULONG);
112047e946e7SWyllys Ingersoll CK_RV priv_key_unwrap(TEMPLATE *, CK_ULONG, CK_BYTE *, CK_ULONG);
112147e946e7SWyllys Ingersoll CK_RV priv_key_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
112247e946e7SWyllys Ingersoll 
112347e946e7SWyllys Ingersoll 	CK_BBOOL secret_key_check_exportability(CK_ATTRIBUTE_TYPE type);
112447e946e7SWyllys Ingersoll CK_RV secret_key_check_required_attributes(TEMPLATE *, CK_ULONG);
112547e946e7SWyllys Ingersoll CK_RV secret_key_set_default_attributes(TEMPLATE *, CK_ULONG);
112647e946e7SWyllys Ingersoll CK_RV secret_key_unwrap(TEMPLATE *, CK_ULONG, CK_BYTE *, CK_ULONG,
112747e946e7SWyllys Ingersoll 	CK_BBOOL fromend);
112847e946e7SWyllys Ingersoll CK_RV secret_key_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *,
112947e946e7SWyllys Ingersoll 	CK_ULONG);
113047e946e7SWyllys Ingersoll 
113147e946e7SWyllys Ingersoll // rsa routines
113247e946e7SWyllys Ingersoll //
113347e946e7SWyllys Ingersoll CK_RV rsa_publ_check_required_attributes(TEMPLATE *, CK_ULONG);
113447e946e7SWyllys Ingersoll CK_RV rsa_publ_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
113547e946e7SWyllys Ingersoll CK_RV rsa_publ_set_default_attributes(TEMPLATE *, CK_ULONG);
113647e946e7SWyllys Ingersoll 	CK_BBOOL rsa_priv_check_exportability(CK_ATTRIBUTE_TYPE type);
113747e946e7SWyllys Ingersoll CK_RV rsa_priv_check_required_attributes(TEMPLATE *, CK_ULONG);
113847e946e7SWyllys Ingersoll CK_RV rsa_priv_set_default_attributes(TEMPLATE *, CK_ULONG);
113947e946e7SWyllys Ingersoll CK_RV rsa_priv_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
114047e946e7SWyllys Ingersoll CK_RV rsa_priv_wrap_get_data(TEMPLATE *, CK_BBOOL, CK_BYTE **, CK_ULONG *);
114147e946e7SWyllys Ingersoll CK_RV rsa_priv_unwrap(TEMPLATE *, CK_BYTE *, CK_ULONG);
114247e946e7SWyllys Ingersoll 
114347e946e7SWyllys Ingersoll // Generic secret key routines
114447e946e7SWyllys Ingersoll CK_RV generic_secret_check_required_attributes(TEMPLATE *, CK_ULONG);
114547e946e7SWyllys Ingersoll CK_RV generic_secret_set_default_attributes(TEMPLATE *, CK_ULONG);
114647e946e7SWyllys Ingersoll CK_RV generic_secret_validate_attribute(TEMPLATE *, CK_ATTRIBUTE *, CK_ULONG);
114747e946e7SWyllys Ingersoll CK_RV generic_secret_wrap_get_data(TEMPLATE *, CK_BBOOL,
114847e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *);
114947e946e7SWyllys Ingersoll 
115047e946e7SWyllys Ingersoll CK_RV generic_secret_unwrap(TEMPLATE *, CK_BYTE *, CK_ULONG, CK_BBOOL fromend);
115147e946e7SWyllys Ingersoll 
115247e946e7SWyllys Ingersoll CK_RV tpm_encrypt_data(TSS_HCONTEXT,
115347e946e7SWyllys Ingersoll 	TSS_HKEY, CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *);
115447e946e7SWyllys Ingersoll 
115547e946e7SWyllys Ingersoll CK_RV tpm_decrypt_data(TSS_HCONTEXT,
115647e946e7SWyllys Ingersoll 	TSS_HKEY, CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *);
115747e946e7SWyllys Ingersoll 
115847e946e7SWyllys Ingersoll CK_ULONG ber_encode_INTEGER(CK_BBOOL,
115947e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_BYTE *, CK_ULONG);
116047e946e7SWyllys Ingersoll 
116147e946e7SWyllys Ingersoll CK_RV ber_decode_INTEGER(CK_BYTE *,
116247e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_ULONG *);
116347e946e7SWyllys Ingersoll 
116447e946e7SWyllys Ingersoll CK_RV ber_encode_OCTET_STRING(CK_BBOOL,
116547e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_BYTE *, CK_ULONG);
116647e946e7SWyllys Ingersoll 
116747e946e7SWyllys Ingersoll CK_RV ber_decode_OCTET_STRING(CK_BYTE *,
116847e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_ULONG *);
116947e946e7SWyllys Ingersoll 
117047e946e7SWyllys Ingersoll CK_RV ber_encode_SEQUENCE(CK_BBOOL,
117147e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_BYTE *, CK_ULONG);
117247e946e7SWyllys Ingersoll 
117347e946e7SWyllys Ingersoll CK_RV ber_decode_SEQUENCE(CK_BYTE *,
117447e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_ULONG *);
117547e946e7SWyllys Ingersoll 
117647e946e7SWyllys Ingersoll CK_RV ber_encode_PrivateKeyInfo(CK_BBOOL,
117747e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_BYTE *,
117847e946e7SWyllys Ingersoll 	CK_ULONG, CK_BYTE *, CK_ULONG);
117947e946e7SWyllys Ingersoll 
118047e946e7SWyllys Ingersoll CK_RV ber_decode_PrivateKeyInfo(CK_BYTE *,
118147e946e7SWyllys Ingersoll 	CK_ULONG, CK_BYTE **, CK_ULONG *, CK_BYTE **);
118247e946e7SWyllys Ingersoll 
118347e946e7SWyllys Ingersoll CK_RV ber_encode_RSAPrivateKey(CK_BBOOL,
118447e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_ATTRIBUTE *,
118547e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ATTRIBUTE *, CK_ATTRIBUTE *,
118647e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ATTRIBUTE *, CK_ATTRIBUTE *,
118747e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *);
118847e946e7SWyllys Ingersoll 
118947e946e7SWyllys Ingersoll CK_RV ber_decode_RSAPrivateKey(CK_BYTE *,
119047e946e7SWyllys Ingersoll 	CK_ULONG, CK_ATTRIBUTE **, CK_ATTRIBUTE **,
119147e946e7SWyllys Ingersoll 	CK_ATTRIBUTE **, CK_ATTRIBUTE **, CK_ATTRIBUTE **,
119247e946e7SWyllys Ingersoll 	CK_ATTRIBUTE **, CK_ATTRIBUTE **, CK_ATTRIBUTE **);
119347e946e7SWyllys Ingersoll 
119447e946e7SWyllys Ingersoll 
119547e946e7SWyllys Ingersoll CK_RV ber_encode_DSAPrivateKey(CK_BBOOL,
119647e946e7SWyllys Ingersoll 	CK_BYTE **, CK_ULONG *, CK_ATTRIBUTE *,
119747e946e7SWyllys Ingersoll 	CK_ATTRIBUTE *, CK_ATTRIBUTE *, CK_ATTRIBUTE *);
119847e946e7SWyllys Ingersoll 
119947e946e7SWyllys Ingersoll CK_RV ber_decode_DSAPrivateKey(CK_BYTE *,
120047e946e7SWyllys Ingersoll 	CK_ULONG, CK_ATTRIBUTE **, CK_ATTRIBUTE **,
120147e946e7SWyllys Ingersoll 	CK_ATTRIBUTE **, CK_ATTRIBUTE **);
120247e946e7SWyllys Ingersoll 
120347e946e7SWyllys Ingersoll #define	APPID	"TPM_STDLL"
120447e946e7SWyllys Ingersoll 
120547e946e7SWyllys Ingersoll /* log to stdout */
120647e946e7SWyllys Ingersoll #define	LogMessage(dest, priority, layer, fmt, ...) \
120747e946e7SWyllys Ingersoll 	(void) fprintf(dest, "%s %s %s:%d " fmt "\n", (char *)priority, \
120847e946e7SWyllys Ingersoll 		(char *)layer, (char *)__FILE__,\
120947e946e7SWyllys Ingersoll 		(int)__LINE__, __VA_ARGS__);
121047e946e7SWyllys Ingersoll 
121147e946e7SWyllys Ingersoll #define	LogMessage1(dest, priority, layer, data) \
121247e946e7SWyllys Ingersoll 	(void) fprintf(dest, "%s %s %s:%d %s\n", priority, layer, __FILE__, \
121347e946e7SWyllys Ingersoll 	__LINE__, data);
121447e946e7SWyllys Ingersoll 
121547e946e7SWyllys Ingersoll /* Debug logging */
121647e946e7SWyllys Ingersoll #ifdef DEBUG
121747e946e7SWyllys Ingersoll #define	LogDebug(fmt, ...) LogMessage(stdout, "LOG_DEBUG", APPID, \
121847e946e7SWyllys Ingersoll 	fmt, __VA_ARGS__)
121947e946e7SWyllys Ingersoll 
122047e946e7SWyllys Ingersoll #define	LogDebug1(data) LogMessage1(stdout, "LOG_DEBUG", APPID, data)
122147e946e7SWyllys Ingersoll 
122247e946e7SWyllys Ingersoll /* Error logging */
122347e946e7SWyllys Ingersoll #define	LogError(fmt, ...) LogMessage(stderr, "LOG_ERR", APPID,\
122447e946e7SWyllys Ingersoll 	"ERROR: " fmt, __VA_ARGS__)
122547e946e7SWyllys Ingersoll 
122647e946e7SWyllys Ingersoll #define	LogError1(data) LogMessage1(stderr, "LOG_ERR", APPID,\
122747e946e7SWyllys Ingersoll 	"ERROR: " data)
122847e946e7SWyllys Ingersoll 
122947e946e7SWyllys Ingersoll /* Warn logging */
123047e946e7SWyllys Ingersoll #define	LogWarn(fmt, ...) LogMessage(stdout, "LOG_WARNING", APPID,\
123147e946e7SWyllys Ingersoll 	"WARNING: " fmt, __VA_ARGS__)
123247e946e7SWyllys Ingersoll 
123347e946e7SWyllys Ingersoll #define	LogWarn1(data) LogMessage1(stdout, "LOG_WARNING", APPID,\
123447e946e7SWyllys Ingersoll 	"WARNING: " data)
123547e946e7SWyllys Ingersoll 
123647e946e7SWyllys Ingersoll /* Info Logging */
123747e946e7SWyllys Ingersoll #define	LogInfo(fmt, ...) LogMessage(stdout, "LOG_INFO", APPID,\
123847e946e7SWyllys Ingersoll 	fmt, __VA_ARGS__)
123947e946e7SWyllys Ingersoll 
124047e946e7SWyllys Ingersoll #define	LogInfo1(data) LogMessage1(stdout, "LOG_INFO", APPID, data)
124147e946e7SWyllys Ingersoll 
124247e946e7SWyllys Ingersoll #define	st_err_log(...) LogMessage(stderr, "ST MSG", APPID,\
124347e946e7SWyllys Ingersoll 	"", __VA_ARGS__)
124447e946e7SWyllys Ingersoll #else
124547e946e7SWyllys Ingersoll #define	LogDebug(...)
124647e946e7SWyllys Ingersoll #define	LogDebug1(...)
124747e946e7SWyllys Ingersoll #define	LogBlob(...)
124847e946e7SWyllys Ingersoll #define	LogError(...)
124947e946e7SWyllys Ingersoll #define	LogError1(...)
125047e946e7SWyllys Ingersoll #define	LogWarn(...)
125147e946e7SWyllys Ingersoll #define	LogWarn1(...)
125247e946e7SWyllys Ingersoll #define	LogInfo(...)
125347e946e7SWyllys Ingersoll #define	LogInfo1(...)
125447e946e7SWyllys Ingersoll #define	st_err_log(...)
125547e946e7SWyllys Ingersoll #endif
125647e946e7SWyllys Ingersoll 
125747e946e7SWyllys Ingersoll /*
125847e946e7SWyllys Ingersoll  * CK_FUNCTION_LIST is a structure holding a Cryptoki spec
125947e946e7SWyllys Ingersoll  * version and pointers of appropriate types to all the
126047e946e7SWyllys Ingersoll  * Cryptoki functions
126147e946e7SWyllys Ingersoll  */
126247e946e7SWyllys Ingersoll 
126347e946e7SWyllys Ingersoll /* CK_FUNCTION_LIST is new for v2.0 */
126447e946e7SWyllys Ingersoll 
126547e946e7SWyllys Ingersoll typedef CK_RV
126647e946e7SWyllys Ingersoll 	(CK_PTR ST_C_Initialize)
126747e946e7SWyllys Ingersoll 	(void *ppFunctionList, CK_SLOT_ID slotID, CK_CHAR_PTR pCorrelator);
126847e946e7SWyllys Ingersoll typedef CK_RV
126947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Finalize)
127047e946e7SWyllys Ingersoll 	(CK_VOID_PTR pReserved);
127147e946e7SWyllys Ingersoll typedef CK_RV
127247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Terminate)();
127347e946e7SWyllys Ingersoll typedef CK_RV
127447e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetInfo)
127547e946e7SWyllys Ingersoll 	(CK_INFO_PTR pInfo);
127647e946e7SWyllys Ingersoll typedef CK_RV
127747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetFunctionList)
127847e946e7SWyllys Ingersoll 	(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
127947e946e7SWyllys Ingersoll typedef CK_RV
128047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetSlotList)
128147e946e7SWyllys Ingersoll 	(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
128247e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusCount);
128347e946e7SWyllys Ingersoll typedef CK_RV
128447e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetSlotInfo)
128547e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo);
128647e946e7SWyllys Ingersoll typedef CK_RV
128747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetTokenInfo)
128847e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo);
128947e946e7SWyllys Ingersoll typedef CK_RV
129047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetMechanismList)
129147e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMechanismList,
129247e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusCount);
129347e946e7SWyllys Ingersoll typedef CK_RV
129447e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetMechanismInfo)
129547e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type,
129647e946e7SWyllys Ingersoll 	CK_MECHANISM_INFO_PTR pInfo);
129747e946e7SWyllys Ingersoll typedef CK_RV
129847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_InitToken)
129947e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID, CK_CHAR_PTR pPin, CK_ULONG usPinLen,
130047e946e7SWyllys Ingersoll 	CK_CHAR_PTR pLabel);
130147e946e7SWyllys Ingersoll typedef CK_RV
130247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_InitPIN)
130347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_CHAR_PTR pPin,
130447e946e7SWyllys Ingersoll 	CK_ULONG usPinLen);
130547e946e7SWyllys Ingersoll typedef CK_RV
130647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SetPIN)
130747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_CHAR_PTR pOldPin,
130847e946e7SWyllys Ingersoll 	CK_ULONG usOldLen, CK_CHAR_PTR pNewPin,
130947e946e7SWyllys Ingersoll 	CK_ULONG usNewLen);
131047e946e7SWyllys Ingersoll 
131147e946e7SWyllys Ingersoll typedef CK_RV
131247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_OpenSession)
131347e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID, CK_FLAGS flags,
131447e946e7SWyllys Ingersoll 	CK_SESSION_HANDLE_PTR phSession);
131547e946e7SWyllys Ingersoll 
131647e946e7SWyllys Ingersoll typedef CK_RV
131747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_CloseSession)
131847e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession);
131947e946e7SWyllys Ingersoll typedef CK_RV
132047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_CloseAllSessions)
132147e946e7SWyllys Ingersoll 	(CK_SLOT_ID slotID);
132247e946e7SWyllys Ingersoll typedef CK_RV
132347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetSessionInfo)
132447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_SESSION_INFO_PTR pInfo);
132547e946e7SWyllys Ingersoll typedef CK_RV
132647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetOperationState)
132747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pOperationState,
132847e946e7SWyllys Ingersoll 	CK_ULONG_PTR pulOperationStateLen);
132947e946e7SWyllys Ingersoll typedef CK_RV
133047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SetOperationState)
133147e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pOperationState,
133247e946e7SWyllys Ingersoll 	CK_ULONG ulOperationStateLen,
133347e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hEncryptionKey,
133447e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hAuthenticationKey);
133547e946e7SWyllys Ingersoll typedef CK_RV
133647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Login)(ST_SESSION_T hSession,
133747e946e7SWyllys Ingersoll 	CK_USER_TYPE userType, CK_CHAR_PTR pPin,
133847e946e7SWyllys Ingersoll 	CK_ULONG usPinLen);
133947e946e7SWyllys Ingersoll typedef CK_RV
134047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Logout)(ST_SESSION_T hSession);
134147e946e7SWyllys Ingersoll typedef CK_RV
134247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_CreateObject)
134347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_ATTRIBUTE_PTR pTemplate,
134447e946e7SWyllys Ingersoll 	CK_ULONG usCount, CK_OBJECT_HANDLE_PTR phObject);
134547e946e7SWyllys Ingersoll 
134647e946e7SWyllys Ingersoll typedef CK_RV
134747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_CopyObject)
134847e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_OBJECT_HANDLE hObject,
134947e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount,
135047e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE_PTR phNewObject);
135147e946e7SWyllys Ingersoll typedef CK_RV
135247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DestroyObject)
135347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_OBJECT_HANDLE hObject);
135447e946e7SWyllys Ingersoll typedef CK_RV
135547e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetObjectSize)
135647e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_OBJECT_HANDLE hObject,
135747e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusSize);
135847e946e7SWyllys Ingersoll typedef CK_RV
135947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetAttributeValue)
136047e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_OBJECT_HANDLE hObject,
136147e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount);
136247e946e7SWyllys Ingersoll typedef CK_RV
136347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SetAttributeValue)
136447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_OBJECT_HANDLE hObject,
136547e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount);
136647e946e7SWyllys Ingersoll typedef CK_RV
136747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_FindObjectsInit)
136847e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_ATTRIBUTE_PTR pTemplate,
136947e946e7SWyllys Ingersoll 	CK_ULONG usCount);
137047e946e7SWyllys Ingersoll typedef CK_RV
137147e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_FindObjects)
137247e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession,
137347e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE_PTR phObject, CK_ULONG usMaxObjectCount,
137447e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusObjectCount);
137547e946e7SWyllys Ingersoll typedef CK_RV
137647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_FindObjectsFinal)
137747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession);
137847e946e7SWyllys Ingersoll typedef CK_RV
137947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_EncryptInit)
138047e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
138147e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hKey);
138247e946e7SWyllys Ingersoll typedef CK_RV
138347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Encrypt)
138447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pData,
138547e946e7SWyllys Ingersoll 	CK_ULONG usDataLen, CK_BYTE_PTR pEncryptedData,
138647e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusEncryptedDataLen);
138747e946e7SWyllys Ingersoll typedef CK_RV
138847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_EncryptUpdate)
138947e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pPart,
139047e946e7SWyllys Ingersoll 	CK_ULONG usPartLen, CK_BYTE_PTR pEncryptedPart,
139147e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusEncryptedPartLen);
139247e946e7SWyllys Ingersoll typedef CK_RV
139347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_EncryptFinal)
139447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession,
139547e946e7SWyllys Ingersoll 	CK_BYTE_PTR pLastEncryptedPart,
139647e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusLastEncryptedPartLen);
139747e946e7SWyllys Ingersoll typedef CK_RV
139847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DecryptInit)
139947e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
140047e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hKey);
140147e946e7SWyllys Ingersoll typedef CK_RV
140247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Decrypt)
140347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pEncryptedData,
140447e946e7SWyllys Ingersoll 	CK_ULONG usEncryptedDataLen, CK_BYTE_PTR pData,
140547e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusDataLen);
140647e946e7SWyllys Ingersoll typedef CK_RV
140747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DecryptUpdate)
140847e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pEncryptedPart,
140947e946e7SWyllys Ingersoll 	CK_ULONG usEncryptedPartLen, CK_BYTE_PTR pPart,
141047e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusPartLen);
141147e946e7SWyllys Ingersoll typedef CK_RV
141247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DecryptFinal)
141347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pLastPart,
141447e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusLastPartLen);
141547e946e7SWyllys Ingersoll typedef CK_RV
141647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DigestInit)
141747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession,
141847e946e7SWyllys Ingersoll 	CK_MECHANISM_PTR pMechanism);
141947e946e7SWyllys Ingersoll typedef CK_RV
142047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Digest)
142147e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pData,
142247e946e7SWyllys Ingersoll 	CK_ULONG usDataLen, CK_BYTE_PTR pDigest,
142347e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusDigestLen);
142447e946e7SWyllys Ingersoll typedef CK_RV
142547e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DigestUpdate)
142647e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pPart,
142747e946e7SWyllys Ingersoll 	CK_ULONG usPartLen);
142847e946e7SWyllys Ingersoll typedef CK_RV
142947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DigestKey)
143047e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_OBJECT_HANDLE hKey);
143147e946e7SWyllys Ingersoll typedef CK_RV
143247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DigestFinal)
143347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pDigest,
143447e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusDigestLen);
143547e946e7SWyllys Ingersoll typedef CK_RV
143647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SignInit)
143747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
143847e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hKey);
143947e946e7SWyllys Ingersoll typedef CK_RV
144047e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Sign)
144147e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pData,
144247e946e7SWyllys Ingersoll 	CK_ULONG usDataLen, CK_BYTE_PTR pSignature,
144347e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusSignatureLen);
144447e946e7SWyllys Ingersoll typedef CK_RV
144547e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SignUpdate)
144647e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pPart,
144747e946e7SWyllys Ingersoll 	CK_ULONG usPartLen);
144847e946e7SWyllys Ingersoll typedef CK_RV
144947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SignFinal)
145047e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pSignature,
145147e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusSignatureLen);
145247e946e7SWyllys Ingersoll typedef CK_RV
145347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SignRecoverInit)
145447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
145547e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hKey);
145647e946e7SWyllys Ingersoll typedef CK_RV
145747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SignRecover)
145847e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pData,
145947e946e7SWyllys Ingersoll 	CK_ULONG usDataLen, CK_BYTE_PTR pSignature,
146047e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusSignatureLen);
146147e946e7SWyllys Ingersoll typedef CK_RV
146247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_VerifyInit)
146347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
146447e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hKey);
146547e946e7SWyllys Ingersoll typedef CK_RV
146647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_Verify)
146747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pData,
146847e946e7SWyllys Ingersoll 	CK_ULONG usDataLen, CK_BYTE_PTR pSignature,
146947e946e7SWyllys Ingersoll 	CK_ULONG usSignatureLen);
147047e946e7SWyllys Ingersoll typedef CK_RV
147147e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_VerifyUpdate)
147247e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pPart,
147347e946e7SWyllys Ingersoll 	CK_ULONG usPartLen);
147447e946e7SWyllys Ingersoll typedef CK_RV
147547e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_VerifyFinal)
147647e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pSignature,
147747e946e7SWyllys Ingersoll 	CK_ULONG usSignatureLen);
147847e946e7SWyllys Ingersoll typedef CK_RV
147947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_VerifyRecoverInit)
148047e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
148147e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hKey);
148247e946e7SWyllys Ingersoll typedef CK_RV
148347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_VerifyRecover)
148447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pSignature,
148547e946e7SWyllys Ingersoll 	CK_ULONG usSignatureLen, CK_BYTE_PTR pData,
148647e946e7SWyllys Ingersoll 	CK_ULONG_PTR pusDataLen);
148747e946e7SWyllys Ingersoll typedef CK_RV
148847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DigestEncryptUpdate)
148947e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pPart,
149047e946e7SWyllys Ingersoll 	CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
149147e946e7SWyllys Ingersoll 	CK_ULONG_PTR pulEncryptedPartLen);
149247e946e7SWyllys Ingersoll typedef CK_RV
149347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DecryptDigestUpdate)
149447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pEncryptedPart,
149547e946e7SWyllys Ingersoll 	CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart,
149647e946e7SWyllys Ingersoll 	CK_ULONG_PTR pulPartLen);
149747e946e7SWyllys Ingersoll typedef CK_RV
149847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SignEncryptUpdate)
149947e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pPart,
150047e946e7SWyllys Ingersoll 	CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
150147e946e7SWyllys Ingersoll 	CK_ULONG_PTR pulEncryptedPartLen);
150247e946e7SWyllys Ingersoll typedef CK_RV
150347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DecryptVerifyUpdate)
150447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pEncryptedPart,
150547e946e7SWyllys Ingersoll 	CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart,
150647e946e7SWyllys Ingersoll 	CK_ULONG_PTR pulPartLen);
150747e946e7SWyllys Ingersoll typedef CK_RV
150847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GenerateKey)
150947e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
151047e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount,
151147e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE_PTR phKey);
151247e946e7SWyllys Ingersoll typedef CK_RV
151347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GenerateKeyPair)
151447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
151547e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_PTR pPublicKeyTemplate,
151647e946e7SWyllys Ingersoll 	CK_ULONG usPublicKeyAttributeCount,
151747e946e7SWyllys Ingersoll 	CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
151847e946e7SWyllys Ingersoll 	CK_ULONG usPrivateKeyAttributeCount,
151947e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE_PTR phPrivateKey,
152047e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE_PTR phPublicKey);
152147e946e7SWyllys Ingersoll typedef CK_RV
152247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_WrapKey)
152347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
152447e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey,
152547e946e7SWyllys Ingersoll 	CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pusWrappedKeyLen);
152647e946e7SWyllys Ingersoll typedef CK_RV
152747e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_UnwrapKey)
152847e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
152947e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hUnwrappingKey, CK_BYTE_PTR pWrappedKey,
153047e946e7SWyllys Ingersoll 	CK_ULONG usWrappedKeyLen, CK_ATTRIBUTE_PTR pTemplate,
153147e946e7SWyllys Ingersoll 	CK_ULONG usAttributeCount, CK_OBJECT_HANDLE_PTR phKey);
153247e946e7SWyllys Ingersoll typedef CK_RV
153347e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_DeriveKey)
153447e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_MECHANISM_PTR pMechanism,
153547e946e7SWyllys Ingersoll 	CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate,
153647e946e7SWyllys Ingersoll 	CK_ULONG usAttributeCount, CK_OBJECT_HANDLE_PTR phKey);
153747e946e7SWyllys Ingersoll typedef CK_RV
153847e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_SeedRandom)
153947e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pSeed,
154047e946e7SWyllys Ingersoll 	CK_ULONG usSeedLen);
154147e946e7SWyllys Ingersoll typedef CK_RV
154247e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GenerateRandom)
154347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_BYTE_PTR pRandomData,
154447e946e7SWyllys Ingersoll 	CK_ULONG usRandomLen);
154547e946e7SWyllys Ingersoll typedef CK_RV
154647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_GetFunctionStatus)
154747e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession);
154847e946e7SWyllys Ingersoll typedef CK_RV
154947e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_CancelFunction)
155047e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession);
155147e946e7SWyllys Ingersoll typedef CK_RV
155247e946e7SWyllys Ingersoll 	(CK_PTR  ST_Notify)
155347e946e7SWyllys Ingersoll 	(ST_SESSION_T hSession, CK_NOTIFICATION event,
155447e946e7SWyllys Ingersoll 	CK_VOID_PTR pApplication);
155547e946e7SWyllys Ingersoll typedef CK_RV
155647e946e7SWyllys Ingersoll 	(CK_PTR  ST_C_WaitForSlotEvent)
155747e946e7SWyllys Ingersoll 	(CK_FLAGS flags, CK_SLOT_ID_PTR pSlot,
155847e946e7SWyllys Ingersoll 	CK_VOID_PTR pReserved);
155947e946e7SWyllys Ingersoll 
156047e946e7SWyllys Ingersoll 
156147e946e7SWyllys Ingersoll 
156247e946e7SWyllys Ingersoll struct ST_FCN_LIST {
156347e946e7SWyllys Ingersoll 
156447e946e7SWyllys Ingersoll 	ST_C_Initialize ST_Initialize;
156547e946e7SWyllys Ingersoll 	ST_C_Finalize ST_Finalize;
156647e946e7SWyllys Ingersoll 
156747e946e7SWyllys Ingersoll 	ST_C_GetTokenInfo ST_GetTokenInfo;
156847e946e7SWyllys Ingersoll 	ST_C_GetMechanismList ST_GetMechanismList;
156947e946e7SWyllys Ingersoll 	ST_C_GetMechanismInfo ST_GetMechanismInfo;
157047e946e7SWyllys Ingersoll 	ST_C_InitToken ST_InitToken;
157147e946e7SWyllys Ingersoll 	ST_C_InitPIN ST_InitPIN;
157247e946e7SWyllys Ingersoll 	ST_C_SetPIN ST_SetPIN;
157347e946e7SWyllys Ingersoll 
157447e946e7SWyllys Ingersoll 	ST_C_OpenSession ST_OpenSession;
157547e946e7SWyllys Ingersoll 	ST_C_CloseSession ST_CloseSession;
157647e946e7SWyllys Ingersoll 	ST_C_GetSessionInfo ST_GetSessionInfo;
157747e946e7SWyllys Ingersoll 	ST_C_GetOperationState ST_GetOperationState;
157847e946e7SWyllys Ingersoll 	ST_C_SetOperationState ST_SetOperationState;
157947e946e7SWyllys Ingersoll 	ST_C_Login ST_Login;
158047e946e7SWyllys Ingersoll 	ST_C_Logout ST_Logout;
158147e946e7SWyllys Ingersoll 
158247e946e7SWyllys Ingersoll 	ST_C_CreateObject ST_CreateObject;
158347e946e7SWyllys Ingersoll 	ST_C_CopyObject ST_CopyObject;
158447e946e7SWyllys Ingersoll 	ST_C_DestroyObject ST_DestroyObject;
158547e946e7SWyllys Ingersoll 	ST_C_GetObjectSize ST_GetObjectSize;
158647e946e7SWyllys Ingersoll 	ST_C_GetAttributeValue ST_GetAttributeValue;
158747e946e7SWyllys Ingersoll 	ST_C_SetAttributeValue ST_SetAttributeValue;
158847e946e7SWyllys Ingersoll 	ST_C_FindObjectsInit ST_FindObjectsInit;
158947e946e7SWyllys Ingersoll 	ST_C_FindObjects ST_FindObjects;
159047e946e7SWyllys Ingersoll 	ST_C_FindObjectsFinal ST_FindObjectsFinal;
159147e946e7SWyllys Ingersoll 
159247e946e7SWyllys Ingersoll 
159347e946e7SWyllys Ingersoll 	ST_C_EncryptInit ST_EncryptInit;
159447e946e7SWyllys Ingersoll 	ST_C_Encrypt ST_Encrypt;
159547e946e7SWyllys Ingersoll 	ST_C_EncryptUpdate ST_EncryptUpdate;
159647e946e7SWyllys Ingersoll 	ST_C_EncryptFinal ST_EncryptFinal;
159747e946e7SWyllys Ingersoll 	ST_C_DecryptInit ST_DecryptInit;
159847e946e7SWyllys Ingersoll 	ST_C_Decrypt ST_Decrypt;
159947e946e7SWyllys Ingersoll 	ST_C_DecryptUpdate ST_DecryptUpdate;
160047e946e7SWyllys Ingersoll 	ST_C_DecryptFinal ST_DecryptFinal;
160147e946e7SWyllys Ingersoll 	ST_C_DigestInit ST_DigestInit;
160247e946e7SWyllys Ingersoll 	ST_C_Digest ST_Digest;
160347e946e7SWyllys Ingersoll 	ST_C_DigestUpdate ST_DigestUpdate;
160447e946e7SWyllys Ingersoll 	ST_C_DigestKey ST_DigestKey;
160547e946e7SWyllys Ingersoll 	ST_C_DigestFinal ST_DigestFinal;
160647e946e7SWyllys Ingersoll 	ST_C_SignInit ST_SignInit;
160747e946e7SWyllys Ingersoll 	ST_C_Sign ST_Sign;
160847e946e7SWyllys Ingersoll 	ST_C_SignUpdate ST_SignUpdate;
160947e946e7SWyllys Ingersoll 	ST_C_SignFinal ST_SignFinal;
161047e946e7SWyllys Ingersoll 	ST_C_SignRecoverInit ST_SignRecoverInit;
161147e946e7SWyllys Ingersoll 	ST_C_SignRecover ST_SignRecover;
161247e946e7SWyllys Ingersoll 	ST_C_VerifyInit ST_VerifyInit;
161347e946e7SWyllys Ingersoll 	ST_C_Verify ST_Verify;
161447e946e7SWyllys Ingersoll 	ST_C_VerifyUpdate ST_VerifyUpdate;
161547e946e7SWyllys Ingersoll 	ST_C_VerifyFinal ST_VerifyFinal;
161647e946e7SWyllys Ingersoll 	ST_C_VerifyRecoverInit ST_VerifyRecoverInit;
161747e946e7SWyllys Ingersoll 	ST_C_VerifyRecover ST_VerifyRecover;
161847e946e7SWyllys Ingersoll 	ST_C_DigestEncryptUpdate ST_DigestEncryptUpdate;
161947e946e7SWyllys Ingersoll 	ST_C_DecryptDigestUpdate ST_DecryptDigestUpdate;
162047e946e7SWyllys Ingersoll 	ST_C_SignEncryptUpdate ST_SignEncryptUpdate;
162147e946e7SWyllys Ingersoll 	ST_C_DecryptVerifyUpdate ST_DecryptVerifyUpdate;
162247e946e7SWyllys Ingersoll 	ST_C_GenerateKey ST_GenerateKey;
162347e946e7SWyllys Ingersoll 	ST_C_GenerateKeyPair ST_GenerateKeyPair;
162447e946e7SWyllys Ingersoll 	ST_C_WrapKey ST_WrapKey;
162547e946e7SWyllys Ingersoll 	ST_C_UnwrapKey ST_UnwrapKey;
162647e946e7SWyllys Ingersoll 	ST_C_DeriveKey ST_DeriveKey;
162747e946e7SWyllys Ingersoll 	ST_C_SeedRandom ST_SeedRandom;
162847e946e7SWyllys Ingersoll 	ST_C_GenerateRandom ST_GenerateRandom;
162947e946e7SWyllys Ingersoll 	ST_C_GetFunctionStatus ST_GetFunctionStatus;
163047e946e7SWyllys Ingersoll 	ST_C_CancelFunction ST_CancelFunction;
163147e946e7SWyllys Ingersoll };
163247e946e7SWyllys Ingersoll 
163347e946e7SWyllys Ingersoll typedef struct ST_FCN_LIST  STDLL_FcnList_t;
163447e946e7SWyllys Ingersoll 
163547e946e7SWyllys Ingersoll #endif /* _TPMTOK_INT_H */
1636