login
This commit is contained in:
		
							
								
								
									
										102
									
								
								src/cryptoki.hxx
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								src/cryptoki.hxx
									
									
									
									
									
								
							| @@ -19,6 +19,7 @@ | ||||
| #include <cstdlib> // malloc/free | ||||
| #include <cstring> // memset | ||||
| #include <iomanip> | ||||
| #include <memory> | ||||
|  | ||||
| #include <iostream> // debug | ||||
|  | ||||
| @@ -217,15 +218,31 @@ namespace cryptoki { | ||||
|   }; | ||||
|   typedef std::map<CK_ATTRIBUTE_TYPE, Attribute> AttributeMap; | ||||
|   typedef std::vector<Attribute> AttributeList; | ||||
|    | ||||
|  | ||||
| //   class Class { | ||||
| //     public: | ||||
| //       CK_OBJECT_CLASS class; | ||||
| //   }; | ||||
|  | ||||
|   //class  | ||||
|  | ||||
| //   //! Map Attribute Class to type | ||||
| //   /*! @todo to be completed ... */ | ||||
| //   #define CRYPTOKI_DECLARE_ATTR(ATTR_ID, TYPE) \ | ||||
| //     template<> class AttributeType<ATTR_ID> { \ | ||||
| //       public: typedef TYPE Type; \ | ||||
| //     } | ||||
| //   template<CK_ATTRIBUTE_TYPE Attribute> class AttributeType {}; | ||||
| //   template<> class AttributeType<CKA_CLASS> { | ||||
| //     public: typedef CK_OBJECT_CLASS Type; | ||||
| //     public: typedef Type Param; | ||||
| //   }; | ||||
| //   CRYPTOKI_DECLARE_ATTR(CKA_CLASS, CK_OBJECT_CLASS); | ||||
| //   CRYPTOKI_DECLARE_ATTR(CKA_HW_FEATURE_TYPE, CK_HW_FEATURE); | ||||
| //   CRYPTOKI_DECLARE_ATTR(CKA_VALUE, FixString<16>); | ||||
| //   CRYPTOKI_DECLARE_ATTR(CKA_RESET_ON_INIT, CK_BBOOL); | ||||
| //   CRYPTOKI_DECLARE_ATTR(CKA_HAS_RESET, CK_BBOOL); | ||||
| // //   CRYPTOKI_DECLARE_ATTR(CKA_VALUE, ); - byte array | ||||
| // //   CRYPTOKI_DECLARE_ATTR(, ); | ||||
| // //   CRYPTOKI_DECLARE_ATTR(, ); | ||||
| // //   CRYPTOKI_DECLARE_ATTR(, ); | ||||
| // //   CRYPTOKI_DECLARE_ATTR(, ); | ||||
| //   template<> class AttributeType<CKA_KEY_TYPE> { | ||||
| //     public: typedef CK_KEY_TYPE Type; | ||||
| //     public: typedef Type Param; | ||||
| @@ -238,10 +255,7 @@ namespace cryptoki { | ||||
| //     public: typedef CKA_BYTE Type; | ||||
| //     public: typedef std::string Param; | ||||
| //   }; | ||||
| //   template<> class AttributeType<> { | ||||
| //     public: typedef  Type; | ||||
| //     public: typedef Type Param; | ||||
| //   }; | ||||
| //   #undef CRYPTOKI_DECLARE_ATTR | ||||
|  | ||||
|   template<std::string::size_type SIZE> | ||||
|       class FixString: public std::string { | ||||
| @@ -582,15 +596,6 @@ namespace cryptoki { | ||||
|           if (!std::uncaught_exception()) throw; | ||||
|         } | ||||
|       } | ||||
|        | ||||
|       /*! @todo Not implemented: | ||||
|           @code | ||||
|       bool finalize() { | ||||
|         //! calls @c C_Finalize | ||||
|         return check(_slot._init->_fn->C_Finalize(CK_VOID_PTR), | ||||
|                      CRYPTOKI_FN_LOG("C_Finalize")); | ||||
|       } | ||||
|  | ||||
|  | ||||
|       /*! @name                                            C Like Error Handling | ||||
|  | ||||
| @@ -785,6 +790,7 @@ namespace cryptoki { | ||||
|   class Session { | ||||
|     private: | ||||
|  | ||||
|       friend class Login; | ||||
|       friend class Object; | ||||
|  | ||||
|       Slot& _slot; | ||||
| @@ -819,6 +825,11 @@ namespace cryptoki { | ||||
|  | ||||
|       //! Closes actual session | ||||
|       ~Session() { | ||||
|         try { | ||||
|           _login.reset(); | ||||
|         } catch (...) { | ||||
|           if (!std::uncaught_exception()) throw; | ||||
|         } | ||||
|         try { | ||||
|           //! calls @c C_CloseSession | ||||
|           check(_slot._init->_fn->C_CloseSession(_session), | ||||
| @@ -1098,25 +1109,46 @@ namespace cryptoki { | ||||
|       } | ||||
|           @endcode */ | ||||
|  | ||||
|       /*! @todo Not implemented: | ||||
|           @code | ||||
|       bool login() { | ||||
|         //! calls @c C_Login | ||||
|         return check(_slot._init->_fn->C_Login(_session, CK_USER_TYPE, CK_CHAR_PTR, CK_ULONG), | ||||
|                      CRYPTOKI_FN_LOG("C_Login")); | ||||
|       class Login { | ||||
|            | ||||
|         public: | ||||
|            | ||||
|           Login(Session& session, | ||||
|                 const std::string& pin, | ||||
|                 CK_USER_TYPE userType=CKU_USER): _session(session) { | ||||
|             //! calls @c C_Login | ||||
|             _session.check(_session._slot._init->_fn->C_Login | ||||
|                            (_session._session, userType, | ||||
|                             (CK_CHAR*)pin.c_str(), | ||||
|                             pin.size()), | ||||
|                            CRYPTOKI_FN_LOG("C_Login")); | ||||
|           } | ||||
|  | ||||
|           ~Login() { | ||||
|             try { | ||||
|               //! calls @c C_Logout | ||||
|               _session.check(_session._slot._init->_fn->C_Logout | ||||
|                              (_session._session), | ||||
|                              CRYPTOKI_FN_LOG("C_Logout")); | ||||
|             } catch (...) { | ||||
|               if (!std::uncaught_exception()) throw; | ||||
|             } | ||||
|           } | ||||
|            | ||||
|         private: | ||||
|  | ||||
|           Session& _session; | ||||
|            | ||||
|       }; | ||||
|  | ||||
|       void login(const std::string& pin, CK_USER_TYPE userType=CKU_USER) { | ||||
|         _login = std::auto_ptr<Login>(new Login(*this, pin, userType)); | ||||
|       } | ||||
|           @endcode */ | ||||
|  | ||||
|       /*! @todo Not implemented: | ||||
|           @code | ||||
|       bool logout() { | ||||
|         //! calls @c C_Logout | ||||
|         return check(_slot._init->_fn->C_Logout(_session), | ||||
|                      CRYPTOKI_FN_LOG("C_Logout")); | ||||
|       void logout() { | ||||
|         _login.reset(); | ||||
|       } | ||||
|           @endcode */ | ||||
|  | ||||
|  | ||||
|       std::auto_ptr<Login> _login; | ||||
|        | ||||
|       /*! @todo Not implemented: | ||||
|           @code | ||||
|       bool seedrandom() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user