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