Home | History | Annotate | Line # | Download | only in include
      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