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