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