00001 #ifndef SESSION_H 00002 #define SESSION_H 1 00003 00004 #include "common.h" 00005 #include "CryptoObject.h" 00006 #include "Pkcs11Exception.h" 00007 #include "Slot.h" 00008 #include "Token.h" 00009 00010 class Slot; 00011 class Token; 00012 00017 class Session 00018 { 00019 public: 00027 Session(Slot* slot,Token* token,CK_VOID_PTR data, CK_NOTIFY notifyFunc); 00034 Session(Session* other); 00038 ~Session(void); 00044 CK_RV getInfo(CK_SESSION_INFO* info); 00053 CK_RV login(CK_USER_TYPE userType, const char* pin); 00061 CK_RV login(); 00066 CK_RV logout(void); 00067 00078 CK_RV findObjects(CK_ATTRIBUTE_PTR attributes,CK_ULONG ulCount); 00079 00085 list<CryptoObject*> getSearchResults(CK_ULONG maxToFetch); 00090 UTILCardHandle getHandle(); 00095 CK_SESSION_HANDLE getId(); 00101 CryptoObject* getObjectFromToken(CK_OBJECT_HANDLE handle); 00105 bool isLoggedIn(); 00111 bool isNotLoggedIn(); 00112 00123 CK_RV sign(CK_BYTE* in,CK_ULONG inLen,CK_BYTE* out,CK_ULONG* outLen); 00134 CK_RV decrypt(CK_BYTE* in,CK_ULONG inLen,CK_BYTE* out,CK_ULONG* outLen); 00140 void activate(CK_MECHANISM_TYPE mechanism,CK_OBJECT_HANDLE privKeyId); 00144 Token* getToken(); 00148 void clearSearchResults(); 00152 CK_OBJECT_HANDLE getActiveObj(); 00156 CK_MECHANISM_TYPE getActiveMechanism(); 00157 private: 00164 void init(Slot* slot,CK_VOID_PTR data, CK_NOTIFY notifyFunc); 00168 CK_SESSION_INFO info; 00172 CK_FLAGS flags; 00176 CK_VOID_PTR data; 00181 CK_NOTIFY notifyFunc; 00185 CK_MECHANISM_TYPE activeMech; 00189 CK_OBJECT_HANDLE activeObj; 00190 00194 Token* token; 00198 Slot* slot; 00202 static char cachedPin[32]; 00207 PIV_Byte loginData[15]; 00211 list<CryptoObject*> searchResults; 00217 list<CryptoObject*>::iterator resultCursor; 00223 static CK_SESSION_HANDLE uniqueId; 00228 CK_SESSION_HANDLE myId; 00234 static UTILCardHandle hSession; 00238 UTILCardHandle connectToCard(); 00239 }; 00240 #endif