mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-07 00:01:49 -04:00
Implemented a generic PKCS#11 object enumerator
This commit is contained in:
parent
cd251d9a21
commit
9baa41c52d
@ -473,6 +473,71 @@ METHOD(pkcs11_library_t, get_name, char*,
|
|||||||
return this->name;
|
return this->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object enumerator
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
/* implements enumerator_t */
|
||||||
|
enumerator_t public;
|
||||||
|
/* session */
|
||||||
|
CK_SESSION_HANDLE session;
|
||||||
|
/* pkcs11 library */
|
||||||
|
pkcs11_library_t *lib;
|
||||||
|
} object_enumerator_t;
|
||||||
|
|
||||||
|
METHOD(enumerator_t, object_enumerate, bool,
|
||||||
|
object_enumerator_t *this, CK_OBJECT_HANDLE *out)
|
||||||
|
{
|
||||||
|
CK_OBJECT_HANDLE object;
|
||||||
|
CK_ULONG found;
|
||||||
|
CK_RV rv;
|
||||||
|
|
||||||
|
rv = this->lib->f->C_FindObjects(this->session, &object, 1, &found);
|
||||||
|
if (rv != CKR_OK)
|
||||||
|
{
|
||||||
|
DBG1(DBG_CFG, "C_FindObjects() failed: %N", ck_rv_names, rv);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
*out = object;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
METHOD(enumerator_t, object_destroy, void,
|
||||||
|
object_enumerator_t *this)
|
||||||
|
{
|
||||||
|
this->lib->f->C_FindObjectsFinal(this->session);
|
||||||
|
free(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
METHOD(pkcs11_library_t, create_object_enumerator, enumerator_t*,
|
||||||
|
private_pkcs11_library_t *this, CK_SESSION_HANDLE session,
|
||||||
|
CK_ATTRIBUTE_PTR tmpl, CK_ULONG count)
|
||||||
|
{
|
||||||
|
object_enumerator_t *enumerator;
|
||||||
|
CK_RV rv;
|
||||||
|
|
||||||
|
rv = this->public.f->C_FindObjectsInit(session, tmpl, count);
|
||||||
|
if (rv != CKR_OK)
|
||||||
|
{
|
||||||
|
DBG1(DBG_CFG, "C_FindObjectsInit() failed: %N", ck_rv_names, rv);
|
||||||
|
return enumerator_create_empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
INIT(enumerator,
|
||||||
|
.public = {
|
||||||
|
.enumerate = (void*)_object_enumerate,
|
||||||
|
.destroy = _object_destroy,
|
||||||
|
},
|
||||||
|
.session = session,
|
||||||
|
.lib = &this->public,
|
||||||
|
);
|
||||||
|
return &enumerator->public;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(pkcs11_library_t, destroy, void,
|
METHOD(pkcs11_library_t, destroy, void,
|
||||||
private_pkcs11_library_t *this)
|
private_pkcs11_library_t *this)
|
||||||
{
|
{
|
||||||
@ -620,6 +685,7 @@ pkcs11_library_t *pkcs11_library_create(char *name, char *file)
|
|||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
.get_name = _get_name,
|
.get_name = _get_name,
|
||||||
|
.create_object_enumerator = _create_object_enumerator,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.name = name,
|
.name = name,
|
||||||
|
@ -26,6 +26,7 @@ typedef struct pkcs11_library_t pkcs11_library_t;
|
|||||||
#include "pkcs11.h"
|
#include "pkcs11.h"
|
||||||
|
|
||||||
#include <enum.h>
|
#include <enum.h>
|
||||||
|
#include <utils/enumerator.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A loaded and initialized PKCS#11 library.
|
* A loaded and initialized PKCS#11 library.
|
||||||
@ -40,10 +41,20 @@ struct pkcs11_library_t {
|
|||||||
/**
|
/**
|
||||||
* Get the name this instance was created with.
|
* Get the name this instance was created with.
|
||||||
*
|
*
|
||||||
* @return name, as passed to constructor
|
* @return name, as passed to constructor
|
||||||
*/
|
*/
|
||||||
char* (*get_name)(pkcs11_library_t *this);
|
char* (*get_name)(pkcs11_library_t *this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an enumerator over CK_OBJECT_HANDLE using a search template.
|
||||||
|
*
|
||||||
|
* @param session session to use
|
||||||
|
* @param tmpl search template
|
||||||
|
* @param count number of attributes in the search template
|
||||||
|
*/
|
||||||
|
enumerator_t* (*create_object_enumerator)(pkcs11_library_t *this,
|
||||||
|
CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR tmpl, CK_ULONG count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy a pkcs11_library_t.
|
* Destroy a pkcs11_library_t.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user