first successful encrypt
This commit is contained in:
		
							
								
								
									
										2
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								COPYING
									
									
									
									
									
								
							| @@ -1 +1 @@ | ||||
| /opt/local/share/automake-1.11/COPYING | ||||
| /usr/share/automake-1.11/COPYING | ||||
							
								
								
									
										2
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								INSTALL
									
									
									
									
									
								
							| @@ -1 +1 @@ | ||||
| /opt/local/share/automake-1.11/INSTALL | ||||
| /usr/share/automake-1.11/INSTALL | ||||
							
								
								
									
										100
									
								
								src/cryptoki.hxx
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								src/cryptoki.hxx
									
									
									
									
									
								
							| @@ -35,6 +35,10 @@ | ||||
| /*! @defgroup cryptokitypes Cryptoki C++ Types and Auxiliary */ | ||||
| /*! @defgroup cryptokiexceptions Cryptoki Exceptions */ | ||||
|  | ||||
| #ifndef CRYPTOKI_LOG | ||||
| #define CRYPTOKI_LOG(X) | ||||
| #endif | ||||
|  | ||||
| #ifndef CRYPTOKI_FN_LOG | ||||
|   #include <iostream> | ||||
|   #if __GNUC__ >= 2 | ||||
| @@ -287,7 +291,7 @@ namespace cryptoki { | ||||
|       operator CK_ATTRIBUTE() const { | ||||
|         CK_ATTRIBUTE a; | ||||
|         a.type = type; | ||||
|         a.pValue = const_cast<char*>(value.begin().operator->()); | ||||
|         a.pValue = const_cast<char*>(&value[0]); | ||||
|         a.ulValueLen = value.size(); | ||||
|         return a; | ||||
|       } | ||||
| @@ -360,7 +364,7 @@ namespace cryptoki { | ||||
|       std::string readableValue() const { | ||||
|         switch (type) { | ||||
|           case CKA_CLASS: | ||||
|             switch (*((CK_OBJECT_CLASS*)value.begin().operator->())) { | ||||
|             switch (*((CK_OBJECT_CLASS*)&value[0])) { | ||||
|               case CKO_DATA: return "DATA"; | ||||
|                 case CKO_CERTIFICATE: return "CERTIFICATE"; | ||||
|               case CKO_PUBLIC_KEY: return "PUBLIC_KEY"; | ||||
| @@ -380,7 +384,7 @@ namespace cryptoki { | ||||
|       } | ||||
|       template<typename TYPE> TYPE to() const { | ||||
|         assert(sizeof(TYPE)==value.size()); | ||||
|         return *reinterpret_cast<const TYPE*>(value.begin().operator->()); | ||||
|         return *reinterpret_cast<const TYPE*>(&value[0]); | ||||
|       } | ||||
|       CK_ATTRIBUTE_TYPE type; | ||||
|       std::string value; | ||||
| @@ -963,8 +967,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_InitToken | ||||
|         return check(_init->_fn->C_InitToken | ||||
|                      (_slot, | ||||
|                       (unsigned char*)pin.begin().operator->(), pin.size(), | ||||
|                       (unsigned char*)label.fix().begin().operator->()) | ||||
|                       (unsigned char*)&pin[0], pin.size(), | ||||
|                       (unsigned char*)label.&fix()[0]) | ||||
|                      CRYPTOKI_FN_LOG("C_InitToken")); | ||||
|       } | ||||
|           @endcode */ | ||||
| @@ -1130,8 +1134,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_Digest | ||||
|         check(_slot._init->_fn->C_Digest | ||||
|               (_session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_Digest")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1145,8 +1149,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_DigestEncryptUpdate | ||||
|         check(_slot._init->_fn->C_DigestEncryptUpdate | ||||
|               (_session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_DigestEncryptUpdate")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1334,8 +1338,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_Sign | ||||
|         check(_slot._init->_fn->C_Sign | ||||
|               (_session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_Sign")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1349,8 +1353,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_SignEncryptUpdate | ||||
|         check(_slot._init->_fn->C_SignEncryptUpdate | ||||
|               (_session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_SignEncryptUpdate")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1374,8 +1378,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_SignRecover | ||||
|         check(_slot._init->_fn->C_SignRecover | ||||
|               (_session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_SignRecover")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1420,8 +1424,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_VerifyRecover | ||||
|         check(_slot._init->_fn->C_VerifyRecover | ||||
|               (_session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_VerifyRecover")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1485,8 +1489,18 @@ namespace cryptoki { | ||||
|           Functions. They provide a higher level simpler access. */ | ||||
|       //@{ | ||||
|  | ||||
|       std::string decrypt(std::string data, CK_MECHANISM_TYPE type, | ||||
|                           std::string param=std::string()) { | ||||
|       std::string encrypt(const std::string& data, CK_MECHANISM_TYPE type, | ||||
|                           const std::string& param=std::string()) { | ||||
|         CRYPTOKI_LOG("log"); | ||||
|         CRYPTOKI_LOG("encryptinit"); | ||||
|         encryptinit(type, param); | ||||
|         CRYPTOKI_LOG("encrypt"); | ||||
|         return encrypt(data); | ||||
|         //! @todo don't call encryptfinal()? | ||||
|       } | ||||
|  | ||||
|       std::string decrypt(const std::string& data, CK_MECHANISM_TYPE type, | ||||
|                           const std::string& param=std::string()) { | ||||
|         CRYPTOKI_LOG("log"); | ||||
|         CRYPTOKI_LOG("decryptinit"); | ||||
|         decryptinit(type, param); | ||||
| @@ -1550,7 +1564,7 @@ namespace cryptoki { | ||||
|       } | ||||
|  | ||||
|       //! requires decryptinit to be called before | ||||
|       std::string decrypt(std::string in) { | ||||
|       std::string decrypt(const std::string& in) { | ||||
|         CRYPTOKI_LOG("log"); | ||||
|         std::string res; | ||||
|         CK_ULONG size(0); // two calls, first to get minimum buffer length | ||||
| @@ -1580,8 +1594,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_DecryptDigestUpdate | ||||
|         check(_session._slot._init->_fn->C_DecryptDigestUpdate | ||||
|               (_session._session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_DecryptDigestUpdate")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1604,8 +1618,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_DecryptUpdate | ||||
|         check(_session._slot._init->_fn->C_DecryptUpdate | ||||
|               (_session._session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_DecryptUpdate")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1619,8 +1633,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_DecryptVerifyUpdate | ||||
|         check(_session._slot._init->_fn->C_DecryptVerifyUpdate | ||||
|               (_session._session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_DecryptVerifyUpdate")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1656,27 +1670,35 @@ namespace cryptoki { | ||||
|       } | ||||
|           @endcode */ | ||||
|  | ||||
|  | ||||
|       /*! @todo Not implemented: | ||||
|           @code | ||||
|       bool encryptinit() { | ||||
|       bool encryptinit(CK_MECHANISM_TYPE type, const std::string& param) { | ||||
|         CRYPTOKI_LOG("log"); | ||||
|         CK_MECHANISM mech = { | ||||
|           type, param.size()?(void*)¶m[0]:0, param.size() | ||||
|         }; | ||||
|         CRYPTOKI_LOG("encryptinit: type="<<type<<"; mech=("<<mech.mechanism | ||||
|                      <<", "<<mech.pParameter<<", "<<mech.ulParameterLen<<')'); | ||||
|         //! calls @c C_EncryptInit | ||||
|         return check(_session._slot._init->_fn->C_EncryptInit(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), | ||||
|         return check(_session._slot._init->_fn->C_EncryptInit | ||||
|                      (_session._session, &mech, _object), | ||||
|                      CRYPTOKI_FN_LOG("C_EncryptInit")); | ||||
|       } | ||||
|           @endcode */ | ||||
|  | ||||
|       std::string encrypt(std::string in) { | ||||
|       std::string encrypt(const std::string& in) { | ||||
|         CRYPTOKI_LOG("log"); | ||||
|         std::string res; | ||||
|         res.resize(in.size()); | ||||
|         CK_ULONG size(res.size()); //! @todo check if size is ok | ||||
|         CK_ULONG size(0); // two calls, first to get minimum buffer length | ||||
|         CRYPTOKI_LOG("get size"); | ||||
|         //! calls @c C_Encrypt | ||||
|         check(_session._slot._init->_fn->C_Encrypt | ||||
|               (_session._session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), 0, &size), | ||||
|               CRYPTOKI_FN_LOG("C_Decrypt")); | ||||
|         CRYPTOKI_LOG("maximum size is "<<size<<"Bytes"); | ||||
|         res.resize(size, 0); | ||||
|         check(_session._slot._init->_fn->C_Encrypt | ||||
|               (_session._session, | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_Encrypt")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
| @@ -1700,8 +1722,8 @@ namespace cryptoki { | ||||
|         //! calls @c C_EncryptUpdate | ||||
|         check(_session._slot._init->_fn->C_EncryptUpdate | ||||
|               (_session._session, | ||||
|                (unsigned char*)in.begin().operator->(), in.size(), | ||||
|                (unsigned char*)res.begin().operator->(), &size), | ||||
|                (unsigned char*)&in[0], in.size(), | ||||
|                (unsigned char*)&res[0], &size), | ||||
|               CRYPTOKI_FN_LOG("C_EncryptUpdate")); | ||||
|         res.resize(size); | ||||
|         return res; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user