1/*
2 * The Initial Developer of the Original Code is International
3 * Business Machines Corporation. Portions created by IBM
4 * Corporation are Copyright (C) 2005 International Business
5 * Machines Corporation. All Rights Reserved.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the Common Public License as published by
9 * IBM Corporation; either version 1 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * Common Public License for more details.
16 *
17 * You should have received a copy of the Common Public License
18 * along with this program; if not, a copy can be viewed at
19 * http://www.opensource.org/licenses/cpl1.0.php.
20 */
21
22#ifndef __TPM_PKCS11_H
23#define __TPM_PKCS11_H
24
25#include <tpm_utils.h>
26
27#include <opencryptoki/pkcs11.h>
28
29#define TPM_OPENCRYPTOKI_SO	"libopencryptoki.so"
30#define TPM_TOKEN_LABEL		"IBM PKCS#11 TPM Token"
31#define TPM_FIND_MAX		10
32
33typedef int (*TokenCryptGet)( CK_BYTE  **a_pbData,
34                              CK_ULONG  *a_pulDataLen,
35                              CK_BBOOL  *a_pbMoreData,
36                              CK_BBOOL   a_bEncrypt );
37
38typedef int (*TokenCryptPut)( CK_BYTE  *a_pbData,
39                              CK_ULONG  a_ulDataLen,
40                              CK_BBOOL  a_bMoreData,
41                              CK_BBOOL  a_bEncrypt );
42
43void pkcsDebug(const char *a_pszName, CK_RV a_tResult);
44void pkcsError(const char *a_pszName, CK_RV a_tResult);
45void pkcsResult(const char *a_pszName, CK_RV a_tResult);
46void pkcsResultException(const char *a_pszName, CK_RV a_tResult, CK_RV a_tExcept);
47
48void pkcsSlotInfo(CK_SLOT_INFO *a_ptSlotInfo);
49void pkcsTokenInfo(CK_TOKEN_INFO *a_ptTokenInfo);
50
51CK_RV openToken( char *a_pszTokenLabel );
52CK_RV closeToken( );
53
54CK_RV initToken( char *a_pszPin );
55
56CK_RV openTokenSession( CK_FLAGS           a_tType,
57                        CK_SESSION_HANDLE *a_phSession );
58CK_RV closeTokenSession( CK_SESSION_HANDLE  a_hSession );
59CK_RV closeAllTokenSessions( );
60
61CK_RV loginToken( CK_SESSION_HANDLE  a_hSession,
62                  CK_USER_TYPE       a_tType,
63                  char              *a_pszPin );
64
65CK_RV initPin( CK_SESSION_HANDLE  a_hSession,
66               char              *a_pszPin );
67CK_RV setPin( CK_SESSION_HANDLE  a_hSession,
68              char              *a_pszOldPin,
69              char              *a_pszNewPin );
70
71CK_RV generateKey( CK_SESSION_HANDLE  a_hSession,
72                   CK_MECHANISM      *a_ptMechanism,
73                   CK_ATTRIBUTE      *a_ptAttrList,
74                   CK_ULONG           a_ulAttrCount,
75                   CK_OBJECT_HANDLE  *a_phObject );
76
77CK_RV createObject( CK_SESSION_HANDLE  a_hSession,
78                    CK_ATTRIBUTE      *a_ptAttrList,
79                    CK_ULONG           a_ulAttrCount,
80                    CK_OBJECT_HANDLE  *a_phObject );
81CK_RV destroyObject( CK_SESSION_HANDLE  a_hSession,
82                     CK_OBJECT_HANDLE   a_hObject );
83
84CK_RV getObjectAttributes( CK_SESSION_HANDLE  a_hSession,
85                           CK_OBJECT_HANDLE   a_hObject,
86                           CK_ATTRIBUTE      *a_ptAttrList,
87                           CK_ULONG           a_ulAttrCount );
88
89CK_RV findObjects( CK_SESSION_HANDLE  a_hSession,
90                   CK_ATTRIBUTE      *a_ptAttrList,
91                   CK_ULONG           a_ulAttrCount,
92                   CK_OBJECT_HANDLE **a_phObjList,
93                   CK_ULONG          *a_pulObjCount );
94
95CK_RV displayObject( CK_SESSION_HANDLE  a_hSession,
96                     CK_OBJECT_HANDLE   a_hObject,
97                     int                a_bExtended );
98
99CK_RV encryptData( CK_SESSION_HANDLE  a_hSession,
100                   CK_OBJECT_HANDLE   a_hObject,
101                   CK_MECHANISM      *a_ptMechanism,
102                   TokenCryptGet      a_fGet,
103                   TokenCryptPut      a_fPut );
104CK_RV decryptData( CK_SESSION_HANDLE  a_hSession,
105                   CK_OBJECT_HANDLE   a_hObject,
106                   CK_MECHANISM      *a_ptMechanism,
107                   TokenCryptGet      a_fGet,
108                   TokenCryptPut      a_fPut );
109
110BOOL isTokenInitialized( );
111int  getMinPinLen( );
112int  getMaxPinLen( );
113
114#endif
115