xref: /netbsd-src/crypto/external/cpl/tpm-tools/dist/include/tpm_pkcs11.h (revision 431955c163a358f3111f7be0c1fa1643cab0b701)
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 
33 typedef int (*TokenCryptGet)( CK_BYTE  **a_pbData,
34                               CK_ULONG  *a_pulDataLen,
35                               CK_BBOOL  *a_pbMoreData,
36                               CK_BBOOL   a_bEncrypt );
37 
38 typedef int (*TokenCryptPut)( CK_BYTE  *a_pbData,
39                               CK_ULONG  a_ulDataLen,
40                               CK_BBOOL  a_bMoreData,
41                               CK_BBOOL  a_bEncrypt );
42 
43 void pkcsDebug(const char *a_pszName, CK_RV a_tResult);
44 void pkcsError(const char *a_pszName, CK_RV a_tResult);
45 void pkcsResult(const char *a_pszName, CK_RV a_tResult);
46 void pkcsResultException(const char *a_pszName, CK_RV a_tResult, CK_RV a_tExcept);
47 
48 void pkcsSlotInfo(CK_SLOT_INFO *a_ptSlotInfo);
49 void pkcsTokenInfo(CK_TOKEN_INFO *a_ptTokenInfo);
50 
51 CK_RV openToken( char *a_pszTokenLabel );
52 CK_RV closeToken( );
53 
54 CK_RV initToken( char *a_pszPin );
55 
56 CK_RV openTokenSession( CK_FLAGS           a_tType,
57                         CK_SESSION_HANDLE *a_phSession );
58 CK_RV closeTokenSession( CK_SESSION_HANDLE  a_hSession );
59 CK_RV closeAllTokenSessions( );
60 
61 CK_RV loginToken( CK_SESSION_HANDLE  a_hSession,
62                   CK_USER_TYPE       a_tType,
63                   char              *a_pszPin );
64 
65 CK_RV initPin( CK_SESSION_HANDLE  a_hSession,
66                char              *a_pszPin );
67 CK_RV setPin( CK_SESSION_HANDLE  a_hSession,
68               char              *a_pszOldPin,
69               char              *a_pszNewPin );
70 
71 CK_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 
77 CK_RV createObject( CK_SESSION_HANDLE  a_hSession,
78                     CK_ATTRIBUTE      *a_ptAttrList,
79                     CK_ULONG           a_ulAttrCount,
80                     CK_OBJECT_HANDLE  *a_phObject );
81 CK_RV destroyObject( CK_SESSION_HANDLE  a_hSession,
82                      CK_OBJECT_HANDLE   a_hObject );
83 
84 CK_RV getObjectAttributes( CK_SESSION_HANDLE  a_hSession,
85                            CK_OBJECT_HANDLE   a_hObject,
86                            CK_ATTRIBUTE      *a_ptAttrList,
87                            CK_ULONG           a_ulAttrCount );
88 
89 CK_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 
95 CK_RV displayObject( CK_SESSION_HANDLE  a_hSession,
96                      CK_OBJECT_HANDLE   a_hObject,
97                      int                a_bExtended );
98 
99 CK_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 );
104 CK_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 
110 BOOL isTokenInitialized( );
111 int  getMinPinLen( );
112 int  getMaxPinLen( );
113 
114 #endif
115