Annotation of truecrypt/common/securitytoken.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
                      3: 
                      4:  Governed by the TrueCrypt License 2.6 the full text of which is contained
                      5:  in the file License.txt included in TrueCrypt binary and source code
                      6:  distribution packages.
                      7: */
                      8: 
                      9: #ifndef TC_HEADER_Common_SecurityToken
                     10: #define TC_HEADER_Common_SecurityToken
                     11: 
                     12: #include "Platform/PlatformBase.h"
                     13: #if defined (TC_WINDOWS) && !defined (TC_PROTOTYPE)
                     14: #      include "Exception.h"
                     15: #else
                     16: #      include "Platform/Exception.h"
                     17: #endif
                     18: 
                     19: #ifndef NULL_PTR
                     20: #      define NULL_PTR 0
                     21: #endif
                     22: #define CK_PTR *
                     23: #define CK_CALLBACK_FUNCTION(RET_TYPE, NAME) RET_TYPE (* NAME)
                     24: 
                     25: #ifdef TC_WINDOWS
                     26: 
                     27: #      include <windows.h>
                     28: 
                     29: #      define CK_DEFINE_FUNCTION(RET_TYPE, NAME) RET_TYPE __declspec(dllexport) NAME
                     30: #      define CK_DECLARE_FUNCTION(RET_TYPE, NAME) RET_TYPE __declspec(dllimport) NAME
                     31: #      define CK_DECLARE_FUNCTION_POINTER(RET_TYPE, NAME) RET_TYPE __declspec(dllimport) (* NAME)
                     32: 
                     33: #      pragma pack(push, cryptoki, 1)
                     34: #      include <pkcs11.h>
                     35: #      pragma pack(pop, cryptoki)
                     36: 
                     37: #else // !TC_WINDOWS
                     38: 
                     39: #      define CK_DEFINE_FUNCTION(RET_TYPE, NAME) RET_TYPE NAME
                     40: #      define CK_DECLARE_FUNCTION(RET_TYPE, NAME) RET_TYPE NAME
                     41: #      define CK_DECLARE_FUNCTION_POINTER(RET_TYPE, NAME) RET_TYPE (* NAME)
                     42: 
                     43: #      include <pkcs11.h>
                     44: 
                     45: #endif // !TC_WINDOWS
                     46: 
                     47: 
                     48: #define TC_SECURITY_TOKEN_KEYFILE_URL_PREFIX L"token://"
                     49: #define TC_SECURITY_TOKEN_KEYFILE_URL_SLOT L"slot"
                     50: #define TC_SECURITY_TOKEN_KEYFILE_URL_FILE L"file"
                     51: 
                     52: namespace TrueCrypt
                     53: {
                     54:        struct SecurityTokenInfo
                     55:        {
                     56:                CK_SLOT_ID SlotId;
                     57:                CK_FLAGS Flags;
                     58:                wstring Label;
                     59:                string LabelUtf8;
                     60:        };
                     61: 
                     62:        struct SecurityTokenKeyfilePath
                     63:        {
                     64:                SecurityTokenKeyfilePath () { }
                     65:                SecurityTokenKeyfilePath (const wstring &path) : Path (path) { }
                     66:                operator wstring () const { return Path; }
                     67:                wstring Path;
                     68:        };
                     69: 
                     70:        struct SecurityTokenKeyfile
                     71:        {
                     72:                SecurityTokenKeyfile () { }
                     73:                SecurityTokenKeyfile (const SecurityTokenKeyfilePath &path);
                     74: 
                     75:                operator SecurityTokenKeyfilePath () const;
                     76: 
                     77:                CK_OBJECT_HANDLE Handle;
                     78:                wstring Id;
                     79:                string IdUtf8;
                     80:                CK_SLOT_ID SlotId;
                     81:                SecurityTokenInfo Token;
                     82:        };
                     83: 
                     84:        struct Pkcs11Exception : public Exception
                     85:        {
                     86:                Pkcs11Exception (CK_RV errorCode = -1)
                     87:                        : ErrorCode (errorCode),
                     88:                        SubjectErrorCodeValid (false)
                     89:                {
                     90:                }
                     91: 
                     92:                Pkcs11Exception (CK_RV errorCode, uint64 subjectErrorCode)
                     93:                        : ErrorCode (errorCode),
                     94:                        SubjectErrorCodeValid (true),
                     95:                        SubjectErrorCode (subjectErrorCode)
                     96:                {
                     97:                }
                     98: 
                     99: #ifdef TC_HEADER_Platform_Exception
                    100:                virtual ~Pkcs11Exception () throw () { }
                    101:                TC_SERIALIZABLE_EXCEPTION (Pkcs11Exception);
                    102: #else
                    103:                void Show (HWND parent) const;
                    104: #endif
                    105:                operator string () const;
                    106:                CK_RV GetErrorCode () const { return ErrorCode; }
                    107: 
                    108:        protected:
                    109:                CK_RV ErrorCode;
                    110:                bool SubjectErrorCodeValid;
                    111:                uint64 SubjectErrorCode;
                    112:        };
                    113: 
                    114: 
                    115: #ifdef TC_HEADER_Platform_Exception
                    116: 
                    117: #define TC_EXCEPTION(NAME) TC_EXCEPTION_DECL(NAME,Exception)
                    118: 
                    119: #undef TC_EXCEPTION_SET
                    120: #define TC_EXCEPTION_SET \
                    121:        TC_EXCEPTION_NODECL (Pkcs11Exception); \
                    122:        TC_EXCEPTION (InvalidSecurityTokenKeyfilePath); \
                    123:        TC_EXCEPTION (SecurityTokenLibraryNotInitialized); \
                    124:        TC_EXCEPTION (SecurityTokenKeyfileAlreadyExists); \
                    125:        TC_EXCEPTION (SecurityTokenKeyfileNotFound);
                    126: 
                    127:        TC_EXCEPTION_SET;
                    128: 
                    129: #undef TC_EXCEPTION
                    130: 
                    131: #else // !TC_HEADER_Platform_Exception
                    132: 
                    133:        struct SecurityTokenLibraryNotInitialized : public Exception
                    134:        {
                    135:                void Show (HWND parent) const { Error (SecurityTokenLibraryPath[0] == 0 ? "NO_PKCS11_MODULE_SPECIFIED" : "PKCS11_MODULE_INIT_FAILED"); }
                    136:        };
                    137:        
                    138:        struct InvalidSecurityTokenKeyfilePath : public Exception
                    139:        {
                    140:                void Show (HWND parent) const { Error ("INVALID_TOKEN_KEYFILE_PATH"); }
                    141:        };
                    142: 
                    143:        struct SecurityTokenKeyfileAlreadyExists : public Exception
                    144:        {
                    145:                void Show (HWND parent) const { Error ("TOKEN_KEYFILE_ALREADY_EXISTS"); }
                    146:        };
                    147: 
                    148:        struct SecurityTokenKeyfileNotFound : public Exception
                    149:        {
                    150:                void Show (HWND parent) const { Error ("TOKEN_KEYFILE_NOT_FOUND"); }
                    151:        };
                    152: 
                    153: #endif // !TC_HEADER_Platform_Exception
                    154: 
                    155: 
                    156:        struct Pkcs11Session
                    157:        {
                    158:                Pkcs11Session () : UserLoggedIn (false) { }
                    159: 
                    160:                CK_SESSION_HANDLE Handle;
                    161:                bool UserLoggedIn;
                    162:        };
                    163: 
                    164:        struct GetPinFunctor
                    165:        {
                    166:                virtual ~GetPinFunctor () { }
                    167:                virtual void operator() (string &str) = 0;
                    168:        };
                    169: 
                    170:        struct SendExceptionFunctor
                    171:        {
                    172:                virtual ~SendExceptionFunctor () { }
                    173:                virtual void operator() (const Exception &e) = 0;
                    174:        };
                    175: 
                    176:        class SecurityToken
                    177:        {
                    178:        public:
                    179:                static void CloseAllSessions () throw ();
                    180:                static void CloseLibrary ();
                    181:                static void CreateKeyfile (CK_SLOT_ID slotId, vector <byte> &keyfileData, const string &name);
                    182:                static void DeleteKeyfile (const SecurityTokenKeyfile &keyfile);
                    183:                static vector <SecurityTokenKeyfile> GetAvailableKeyfiles (CK_SLOT_ID *slotIdFilter = nullptr, const wstring keyfileIdFilter = wstring());
                    184:                static void GetKeyfileData (const SecurityTokenKeyfile &keyfile, vector <byte> &keyfileData);
                    185:                static list <SecurityTokenInfo> GetAvailableTokens ();
                    186:                static SecurityTokenInfo GetTokenInfo (CK_SLOT_ID slotId);
                    187:                static void InitLibrary (const string &pkcs11LibraryPath, auto_ptr <GetPinFunctor> pinCallback, auto_ptr <SendExceptionFunctor> warningCallback);
                    188:                static bool IsInitialized () { return Initialized; }
                    189:                static bool IsKeyfilePathValid (const wstring &securityTokenKeyfilePath);
                    190:        
                    191:                static const size_t MaxPasswordLength = 128;
                    192: 
                    193:        protected:
                    194:                static void CloseSession (CK_SLOT_ID slotId);
                    195:                static vector <CK_OBJECT_HANDLE> GetObjects (CK_SLOT_ID slotId, CK_ATTRIBUTE_TYPE objectClass);
                    196:                static void GetObjectAttribute (CK_SLOT_ID slotId, CK_OBJECT_HANDLE tokenObject, CK_ATTRIBUTE_TYPE attributeType, vector <byte> &attributeValue);
                    197:                static list <CK_SLOT_ID> GetTokenSlots ();
                    198:                static void Login (CK_SLOT_ID slotId, const string &pin);
                    199:                static void LoginUserIfRequired (CK_SLOT_ID slotId);
                    200:                static void OpenSession (CK_SLOT_ID slotId);
                    201:                static void CheckLibraryStatus ();
                    202: 
                    203:                static bool Initialized;
                    204:                static auto_ptr <GetPinFunctor> PinCallback;
                    205:                static CK_FUNCTION_LIST_PTR Pkcs11Functions;
                    206: #ifdef TC_WINDOWS
                    207:                static HMODULE Pkcs11LibraryHandle;
                    208: #else
                    209:                static void *Pkcs11LibraryHandle;
                    210: #endif
                    211:                static map <CK_SLOT_ID, Pkcs11Session> Sessions;
                    212:                static auto_ptr <SendExceptionFunctor> WarningCallback;
                    213:        };
                    214: }
                    215: 
                    216: #endif // TC_HEADER_Common_SecurityToken

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.