|
|
@@ -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;
|
|
|
@@ -576,86 +612,120 @@ namespace cryptoki {
|
|
|
|
/*! @return error text of last cryptoki call */
|
|
|
|
/*! @return error text of last cryptoki call */
|
|
|
|
std::string error() {
|
|
|
|
std::string error() {
|
|
|
|
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),
|
|
|
|
|
|
|
|
CRYPTOKI_FN_LOG("C_Decrypt"));
|
|
|
|
|
|
|
|
res.resize(size);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! @todo Not implemented:
|
|
|
|
std::string decryptdigestupdate(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool decryptdigestupdate() {
|
|
|
|
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),
|
|
|
|
|
|
|
|
CRYPTOKI_FN_LOG("C_DecryptDigestUpdate"));
|
|
|
|
|
|
|
|
res.resize(size);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! @todo Not implemented:
|
|
|
|
std::string decryptfinal(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool decryptfinal() {
|
|
|
|
// res.resize(in.size());
|
|
|
|
//! calls @c C_DecryptFinal
|
|
|
|
// CK_ULONG size(res.size()); //! @todo check if size is ok
|
|
|
|
return check(_slot._init->_fn->C_DecryptFinal(_session, CK_BYTE_PTR, CK_ULONG_PTR),
|
|
|
|
// //! calls @c C_DecryptFinal
|
|
|
|
CRYPTOKI_FN_LOG("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:
|
|
|
|
std::string decryptupdate(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool decryptupdate() {
|
|
|
|
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),
|
|
|
|
|
|
|
|
CRYPTOKI_FN_LOG("C_DecryptUpdate"));
|
|
|
|
|
|
|
|
res.resize(size);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! @todo Not implemented:
|
|
|
|
std::string decryptverifyupdate(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool decryptverifyupdate() {
|
|
|
|
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),
|
|
|
|
|
|
|
|
CRYPTOKI_FN_LOG("C_DecryptVerifyUpdate"));
|
|
|
|
|
|
|
|
res.resize(size);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! @todo Not implemented:
|
|
|
|
std::string digest(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool digest() {
|
|
|
|
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),
|
|
|
|
|
|
|
|
CRYPTOKI_FN_LOG("C_Digest"));
|
|
|
|
|
|
|
|
res.resize(size);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! @todo Not implemented:
|
|
|
|
std::string digestencryptupdate(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool digestencryptupdate() {
|
|
|
|
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),
|
|
|
|
|
|
|
|
CRYPTOKI_FN_LOG("C_Sign"));
|
|
|
|
|
|
|
|
res.resize(size);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! @todo Not implemented:
|
|
|
|
std::string signencryptupdate(std::string in) {
|
|
|
|
@code
|
|
|
|
std::string res;
|
|
|
|
bool signencryptupdate() {
|
|
|
|
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,53 +974,69 @@ 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
|
|
|
|
throw access_error(error());
|
|
|
|
throw access_error(error());
|
|
|
|
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() {
|
|
|
|
return _res==CKR_OK;
|
|
|
|
return _res==CKR_OK;
|
|
|
@@ -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
|
|
|
|
|
|
|
|