|  |  |  | @@ -366,12 +366,22 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @param exc wether exceptions should be thrown */ | 
		
	
		
			
				|  |  |  |  |       Init(const std::string& library="onepin-opensc-pkcs11.so", bool exc=true); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @name                                            C Like Error Handling | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           You are strongly recommended not to disable exception | 
		
	
		
			
				|  |  |  |  |           handling. If you disable it, you must check after every | 
		
	
		
			
				|  |  |  |  |           operation whether it was successful or not. These methods | 
		
	
		
			
				|  |  |  |  |           provide all you need for that. */ | 
		
	
		
			
				|  |  |  |  |       //@{ | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       /*! @return @c true if last cryptoki on this object call was successful */ | 
		
	
		
			
				|  |  |  |  |       operator bool(); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @return error text of last cryptoki call */ | 
		
	
		
			
				|  |  |  |  |       std::string error(); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       //@} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       Info info() { | 
		
	
		
			
				|  |  |  |  |         Info inf; | 
		
	
		
			
				|  |  |  |  |         CK_INFO cInf; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -397,8 +407,9 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |   class Slot { | 
		
	
		
			
				|  |  |  |  |     private: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       friend class Session; | 
		
	
		
			
				|  |  |  |  |       friend class Init; | 
		
	
		
			
				|  |  |  |  |       friend class Session; | 
		
	
		
			
				|  |  |  |  |       friend class Object; | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       Init* _init; | 
		
	
		
			
				|  |  |  |  |       CK_SLOT_ID _slot; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -420,6 +431,14 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public: | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |       /*! @name                                            C Like Error Handling | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           You are strongly recommended not to disable exception | 
		
	
		
			
				|  |  |  |  |           handling. If you disable it, you must check after every | 
		
	
		
			
				|  |  |  |  |           operation whether it was successful or not. These methods | 
		
	
		
			
				|  |  |  |  |           provide all you need for that. */ | 
		
	
		
			
				|  |  |  |  |       //@{ | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       /*! @return @c true if last cryptoki on this object call was successful */ | 
		
	
		
			
				|  |  |  |  |       operator bool() { | 
		
	
		
			
				|  |  |  |  |         return _res==CKR_OK; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -430,6 +449,8 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |         return _init->error(_res); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       //@} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       MechanismInfo mechanismInfo(Mechanism mechanism) { | 
		
	
		
			
				|  |  |  |  |         MechanismInfo info; | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_GetMechanismInfo | 
		
	
	
		
			
				
					
					|  |  |  | @@ -502,20 +523,27 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |         return info; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool inittoken() { | 
		
	
		
			
				|  |  |  |  |       std::string inittoken(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_InitToken | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_InitToken(_slot, CK_CHAR_PTR, CK_ULONG, CK_CHAR_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_InitToken")); | 
		
	
		
			
				|  |  |  |  |         check(_init->_fn->C_InitToken | 
		
	
		
			
				|  |  |  |  |               (_slot, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->()), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_InitToken")); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool waitforslotevent() { | 
		
	
		
			
				|  |  |  |  |       class SlotEventListener { | 
		
	
		
			
				|  |  |  |  |         public: virtual void slotEvent() = 0; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       bool registerforslotevent(SlotEventListener&) { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_WaitForSlotEvent | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_WaitForSlotEvent(CK_FLAGS, _slot_PTR, CK_VOID_PTR), | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_WaitForSlotEvent(CK_FLAGS, &_slot, CK_VOID_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_WaitForSlotEvent")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -526,6 +554,8 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |   class Session { | 
		
	
		
			
				|  |  |  |  |     private: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       friend class Object; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       Slot& _slot; | 
		
	
		
			
				|  |  |  |  |       CK_SESSION_HANDLE _session; | 
		
	
		
			
				|  |  |  |  |       CK_RV _res; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -549,12 +579,10 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |       //! Opens a new session. | 
		
	
		
			
				|  |  |  |  |       /*! @param slot slot to open a session on */ | 
		
	
		
			
				|  |  |  |  |       Session(Slot& slot): _slot(slot), _session(0), _res(CKR_OK) { | 
		
	
		
			
				|  |  |  |  |         /*! @todo implement | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_OpenSession | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_OpenSession(_slot._slot, CK_FLAGS, CK_VOID_PTR, CK_NOTIFY, | 
		
	
		
			
				|  |  |  |  |                                    &_session), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_OpenSession")); | 
		
	
		
			
				|  |  |  |  |             */ | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_OpenSession(_slot._slot, 0, 0, 0, &_session), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_OpenSession")); | 
		
	
		
			
				|  |  |  |  |         //! @todo pass parameter | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       //! Closes actual session | 
		
	
	
		
			
				
					
					|  |  |  | @@ -568,6 +596,14 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @name                                            C Like Error Handling | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           You are strongly recommended not to disable exception | 
		
	
		
			
				|  |  |  |  |           handling. If you disable it, you must check after every | 
		
	
		
			
				|  |  |  |  |           operation whether it was successful or not. These methods | 
		
	
		
			
				|  |  |  |  |           provide all you need for that. */ | 
		
	
		
			
				|  |  |  |  |       //@{ | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       /*! @return @c true if last cryptoki on this object call was successful */ | 
		
	
		
			
				|  |  |  |  |       operator bool() { | 
		
	
		
			
				|  |  |  |  |         return _res==CKR_OK; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -576,86 +612,120 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |       /*! @return error text of last cryptoki call */ | 
		
	
		
			
				|  |  |  |  |       std::string error() { | 
		
	
		
			
				|  |  |  |  |         return _slot._init->error(_res); | 
		
	
		
			
				|  |  |  |  |       }       | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       void cancel() { | 
		
	
		
			
				|  |  |  |  |       //@} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @name                                     Low Level Cryptoki Functions | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           Direct access to the low level cryptoki API. Better use the | 
		
	
		
			
				|  |  |  |  |           comfort methods. */ | 
		
	
		
			
				|  |  |  |  |       //@{ | 
		
	
		
			
				|  |  |  |  |       bool cancel() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_CancelFunction | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_CancelFunction(_session), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_CancelFunction")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool decrypt() { | 
		
	
		
			
				|  |  |  |  |       std::string decrypt(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Decrypt | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_Decrypt(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Decrypt")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_Decrypt | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_Decrypt")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool decryptdigestupdate() { | 
		
	
		
			
				|  |  |  |  |       std::string decryptdigestupdate(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DecryptDigestUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_DecryptDigestUpdate(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                            CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DecryptDigestUpdate")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_DecryptDigestUpdate | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_DecryptDigestUpdate")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool decryptfinal() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DecryptFinal | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_DecryptFinal(_session, CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DecryptFinal")); | 
		
	
		
			
				|  |  |  |  |       std::string decryptfinal(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  | //         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  | //         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  | //         //! calls @c C_DecryptFinal | 
		
	
		
			
				|  |  |  |  | //         check(_slot._init->_fn->C_DecryptFinal | 
		
	
		
			
				|  |  |  |  | //               (_session, | 
		
	
		
			
				|  |  |  |  | //                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  | //                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  | //               CRYPTOKI_FN_LOG("C_DecryptFinal")); | 
		
	
		
			
				|  |  |  |  | //         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         //! @todo check docu | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool decryptupdate() { | 
		
	
		
			
				|  |  |  |  |       std::string decryptupdate(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DecryptUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_DecryptUpdate(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                      CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DecryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_DecryptUpdate | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_DecryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool decryptverifyupdate() { | 
		
	
		
			
				|  |  |  |  |       std::string decryptverifyupdate(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DecryptVerifyUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_DecryptVerifyUpdate(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                            CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DecryptVerifyUpdate")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_DecryptVerifyUpdate | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_DecryptVerifyUpdate")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool digest() { | 
		
	
		
			
				|  |  |  |  |       std::string digest(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Digest | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_Digest(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                               CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Digest")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_Digest | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_Digest")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool digestencryptupdate() { | 
		
	
		
			
				|  |  |  |  |       std::string digestencryptupdate(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DigestEncryptUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_DigestEncryptUpdate(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                            CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DigestEncryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_DigestEncryptUpdate | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_DigestEncryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
	
		
			
				
					
					|  |  |  | @@ -684,15 +754,19 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool encrypt() { | 
		
	
		
			
				|  |  |  |  |       std::string encrypt(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Encrypt | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_Encrypt(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Encrypt")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_Encrypt | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_Encrypt")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
	
		
			
				
					
					|  |  |  | @@ -703,15 +777,19 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool encryptupdate() { | 
		
	
		
			
				|  |  |  |  |       std::string encryptupdate(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_EncryptUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_EncryptUpdate(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                      CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_EncryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_EncryptUpdate | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_EncryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
	
		
			
				
					
					|  |  |  | @@ -780,7 +858,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool initpin() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_InitPIN | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_InitPIN(_session, CK_CHAR_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_InitPIN(_session, CK_CHAR_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_InitPIN")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -789,7 +867,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool login() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Login | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_Login(_session, CK_USER_TYPE, CK_CHAR_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_Login(_session, CK_USER_TYPE, CK_CHAR_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Login")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -798,7 +876,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool logout() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Logout | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_Logout(_session), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_Logout(_session), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Logout")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -808,7 +886,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool seedrandom() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SeedRandom | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SeedRandom(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_SeedRandom(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SeedRandom")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -817,55 +895,67 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool setpin() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SetPIN | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SetPIN(_session, CK_CHAR_PTR, CK_ULONG, CK_CHAR_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_SetPIN(_session, CK_CHAR_PTR, CK_ULONG, CK_CHAR_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SetPIN")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool sign() { | 
		
	
		
			
				|  |  |  |  |       std::string sign(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Sign | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_Sign(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                             CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Sign")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_Sign | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_Sign")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool signencryptupdate() { | 
		
	
		
			
				|  |  |  |  |       std::string signencryptupdate(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SignEncryptUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SignEncryptUpdate(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                          CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SignEncryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_SignEncryptUpdate | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_SignEncryptUpdate")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool signfinal() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SignFinal | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SignFinal(_session, CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_SignFinal(_session, CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SignFinal")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool signrecover() { | 
		
	
		
			
				|  |  |  |  |       std::string signrecover(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SignRecover | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SignRecover(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                    CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SignRecover")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_SignRecover | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_SignRecover")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool signupdate() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SignUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SignUpdate(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_SignUpdate(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SignUpdate")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -874,7 +964,8 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool verify() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_Verify | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_Verify(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_Verify(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |           CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_Verify")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -883,53 +974,69 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool verifyfinal() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_VerifyFinal | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_VerifyFinal(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_VerifyFinal(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_VerifyFinal")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool verifyrecover() { | 
		
	
		
			
				|  |  |  |  |       std::string verifyrecover(std::string in) { | 
		
	
		
			
				|  |  |  |  |         std::string res; | 
		
	
		
			
				|  |  |  |  |         res.resize(in.size()); | 
		
	
		
			
				|  |  |  |  |         CK_ULONG size(res.size()); //! @todo check if size is ok | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_VerifyRecover | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_VerifyRecover(_session, CK_BYTE_PTR, CK_ULONG, CK_BYTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                      CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_VerifyRecover")); | 
		
	
		
			
				|  |  |  |  |         check(_slot._init->_fn->C_VerifyRecover | 
		
	
		
			
				|  |  |  |  |               (_session, | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)in.begin().operator->(), in.size(), | 
		
	
		
			
				|  |  |  |  |                (unsigned char*)res.begin().operator->(), &size), | 
		
	
		
			
				|  |  |  |  |               CRYPTOKI_FN_LOG("C_VerifyRecover")); | 
		
	
		
			
				|  |  |  |  |         res.resize(size); | 
		
	
		
			
				|  |  |  |  |         return res; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool verifyupdate() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_VerifyUpdate | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_VerifyUpdate(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |         return check(_slot._init->_fn->C_VerifyUpdate(_session, CK_BYTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_VerifyUpdate")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       //@} | 
		
	
		
			
				|  |  |  |  |   }; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #ifdef NO_OBJECTS_YET //! @todo | 
		
	
		
			
				|  |  |  |  |   class Object { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     private: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       friend class Session; | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       Session& _session; | 
		
	
		
			
				|  |  |  |  |       CK_RV _res; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       bool check(CK_RV result, const std::string& context="") { | 
		
	
		
			
				|  |  |  |  |         _res = result; | 
		
	
		
			
				|  |  |  |  |         if (_exc && !*this) | 
		
	
		
			
				|  |  |  |  |         if (_session._slot._init->_exc && !*this) | 
		
	
		
			
				|  |  |  |  |           if (context.size()) | 
		
	
		
			
				|  |  |  |  |             throw access_error(context+": "+error()); | 
		
	
		
			
				|  |  |  |  |           else | 
		
	
		
			
				|  |  |  |  |             throw access_error(error()); | 
		
	
		
			
				|  |  |  |  |         return _res==CKR_OK; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       Object(); //! forbidden | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       Object(Session& session): _session(session), _res(CKR_OK) {} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       Object(): _res(CKR_OK) {} | 
		
	
		
			
				|  |  |  |  |       /*! @name                                            C Like Error Handling | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           You are strongly recommended not to disable exception | 
		
	
		
			
				|  |  |  |  |           handling. If you disable it, you must check after every | 
		
	
		
			
				|  |  |  |  |           operation whether it was successful or not. These methods | 
		
	
		
			
				|  |  |  |  |           provide all you need for that. */ | 
		
	
		
			
				|  |  |  |  |       //@{ | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       /*! @return @c true if last cryptoki on this object call was successful */ | 
		
	
		
			
				|  |  |  |  |       operator bool() { | 
		
	
		
			
				|  |  |  |  |         return _res==CKR_OK; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -937,14 +1044,16 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       /*! @return error text of last cryptoki call */ | 
		
	
		
			
				|  |  |  |  |       std::string error() { | 
		
	
		
			
				|  |  |  |  |         return error(_res); | 
		
	
		
			
				|  |  |  |  |         return _session._slot._init->error(_res); | 
		
	
		
			
				|  |  |  |  |       }       | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       //@} | 
		
	
		
			
				|  |  |  |  |        | 
		
	
		
			
				|  |  |  |  |       /*! @todo Not implemented: | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool copyobject() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_CopyObject | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_CopyObject(_session, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_CopyObject(_session, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |                                   CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_CopyObject")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -954,7 +1063,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool createobject() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_CreateObject | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_CreateObject(_session, CK_ATTRIBUTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_CreateObject(_session, CK_ATTRIBUTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                     CK_OBJECT_HANDLE_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_CreateObject")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -964,7 +1073,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool decryptinit() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DecryptInit | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_DecryptInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_DecryptInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DecryptInit")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -974,7 +1083,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool derivekey() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DeriveKey | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_DeriveKey(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_DeriveKey(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |                                  CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DeriveKey")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -984,7 +1093,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool destroyobject() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DestroyObject | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_DestroyObject(_session, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_DestroyObject(_session, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DestroyObject")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -994,7 +1103,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool digestkey() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_DigestKey | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_DigestKey(_session, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_DigestKey(_session, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_DigestKey")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1004,7 +1113,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool encryptinit() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_EncryptInit | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_EncryptInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_EncryptInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_EncryptInit")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1014,7 +1123,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool findobjects() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_FindObjects | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_FindObjects(_session, CK_OBJECT_HANDLE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_FindObjects(_session, CK_OBJECT_HANDLE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                    CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_FindObjects")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1024,7 +1133,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool generatekey() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_GenerateKey | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_GenerateKey(_session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_GenerateKey(_session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                    CK_ULONG, CK_OBJECT_HANDLE_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_GenerateKey")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1035,7 +1144,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool generatekeypair() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_GenerateKeyPair | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_GenerateKeyPair(_session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_GenerateKeyPair(_session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, | 
		
	
		
			
				|  |  |  |  |                                        CK_ULONG, CK_ATTRIBUTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                        CK_OBJECT_HANDLE_PTR, CK_OBJECT_HANDLE_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_GenerateKeyPair")); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1046,7 +1155,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool getattributevalue() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_GetAttributeValue | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_GetAttributeValue(_session, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_GetAttributeValue(_session, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |                                          CK_ATTRIBUTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_GetAttributeValue")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1056,7 +1165,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool getobjectsize() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_GetObjectSize | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_GetObjectSize(_session, CK_OBJECT_HANDLE, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_GetObjectSize(_session, CK_OBJECT_HANDLE, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_GetObjectSize")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1066,7 +1175,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool setattributevalue() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SetAttributeValue | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SetAttributeValue(_session, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_SetAttributeValue(_session, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |                                          CK_ATTRIBUTE_PTR, CK_ULONG), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SetAttributeValue")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1076,7 +1185,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool setoperationstate() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SetOperationState | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SetOperationState(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_SetOperationState(_session, CK_BYTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                          CK_OBJECT_HANDLE, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SetOperationState")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1086,7 +1195,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool signinit() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SignInit | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SignInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_SignInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SignInit")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1096,7 +1205,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool signrecoverinit() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_SignRecoverInit | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_SignRecoverInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_SignRecoverInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_SignRecoverInit")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1105,7 +1214,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool unwrapkey() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_UnwrapKey | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_UnwrapKey(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_UnwrapKey(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |                                  CK_BYTE_PTR, CK_ULONG, CK_ATTRIBUTE_PTR, CK_ULONG, | 
		
	
		
			
				|  |  |  |  |                                  CK_OBJECT_HANDLE_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_UnwrapKey")); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1116,7 +1225,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool verifyinit() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_VerifyInit | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_VerifyInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_VerifyInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_VerifyInit")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1126,7 +1235,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool verifyrecoverinit() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_VerifyRecoverInit | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_VerifyRecoverInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_VerifyRecoverInit(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_VerifyRecoverInit")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           @endcode */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1136,7 +1245,7 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |           @code | 
		
	
		
			
				|  |  |  |  |       bool wrapkey() { | 
		
	
		
			
				|  |  |  |  |         //! calls @c C_WrapKey | 
		
	
		
			
				|  |  |  |  |         return check(_init->_fn->C_WrapKey(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |         return check(_session._slot._init->_fn->C_WrapKey(_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, | 
		
	
		
			
				|  |  |  |  |                                CK_OBJECT_HANDLE, CK_BYTE_PTR, CK_ULONG_PTR), | 
		
	
		
			
				|  |  |  |  |                      CRYPTOKI_FN_LOG("C_WrapKey")); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1151,4 +1260,3 @@ namespace cryptoki { | 
		
	
		
			
				|  |  |  |  |   #endif | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  |   |