many new but completely untested methods
This commit is contained in:
400
src/cryptoki.hxx
400
src/cryptoki.hxx
@@ -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
|
||||
|
@@ -7,6 +7,10 @@
|
||||
|
||||
include_HEADERS = pcsc.hxx cryptoki.hxx
|
||||
|
||||
lib_LTLIBRARIES = libcryptoki++.la
|
||||
|
||||
libcryptoki___la_SOURCES = cryptoki.cxx cryptoki.hxx
|
||||
|
||||
if BUILD_WIN
|
||||
else
|
||||
endif
|
||||
|
Reference in New Issue
Block a user