Allow to seach a data object by it's application OID
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2457 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
d0f267468e
commit
37cd955055
|
@ -745,6 +745,13 @@ static int compare_obj_id(struct sc_pkcs15_object *obj, const sc_pkcs15_id_t *id
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int sc_obj_app_oid(struct sc_pkcs15_object *obj, const struct sc_object_id *app_oid)
|
||||||
|
{
|
||||||
|
if (obj->type & SC_PKCS15_TYPE_DATA_OBJECT)
|
||||||
|
return sc_compare_oid(&((struct sc_pkcs15_data_info *) obj->data)->app_oid, app_oid);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int compare_obj_usage(sc_pkcs15_object_t *obj, unsigned int mask, unsigned int value)
|
static int compare_obj_usage(sc_pkcs15_object_t *obj, unsigned int mask, unsigned int value)
|
||||||
{
|
{
|
||||||
void *data = obj->data;
|
void *data = obj->data;
|
||||||
|
@ -826,6 +833,8 @@ static int compare_obj_key(struct sc_pkcs15_object *obj, void *arg)
|
||||||
|
|
||||||
if (sk->id && !compare_obj_id(obj, sk->id))
|
if (sk->id && !compare_obj_id(obj, sk->id))
|
||||||
return 0;
|
return 0;
|
||||||
|
if (sk->app_oid && !sc_obj_app_oid(obj, sk->app_oid))
|
||||||
|
return 0;
|
||||||
if (sk->usage_mask && !compare_obj_usage(obj, sk->usage_mask, sk->usage_value))
|
if (sk->usage_mask && !compare_obj_usage(obj, sk->usage_mask, sk->usage_value))
|
||||||
return 0;
|
return 0;
|
||||||
if (sk->flags_mask && !compare_obj_flags(obj, sk->flags_mask, sk->flags_value))
|
if (sk->flags_mask && !compare_obj_flags(obj, sk->flags_mask, sk->flags_value))
|
||||||
|
@ -939,6 +948,26 @@ int sc_pkcs15_find_data_object_by_id(struct sc_pkcs15_card *p15card,
|
||||||
return sc_pkcs15_find_object_by_id(p15card, SC_PKCS15_TYPE_DATA_OBJECT, id, out);
|
return sc_pkcs15_find_object_by_id(p15card, SC_PKCS15_TYPE_DATA_OBJECT, id, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sc_pkcs15_find_data_object_by_app_oid(struct sc_pkcs15_card *p15card,
|
||||||
|
const struct sc_object_id *app_oid,
|
||||||
|
struct sc_pkcs15_object **out)
|
||||||
|
{
|
||||||
|
sc_pkcs15_search_key_t sk;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
memset(&sk, 0, sizeof(sk));
|
||||||
|
sk.app_oid = app_oid;
|
||||||
|
|
||||||
|
r = __sc_pkcs15_search_objects(p15card, 0, SC_PKCS15_TYPE_DATA_OBJECT,
|
||||||
|
compare_obj_key, &sk,
|
||||||
|
out, 1);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
if (r == 0)
|
||||||
|
return SC_ERROR_OBJECT_NOT_FOUND;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int sc_pkcs15_find_prkey_by_id_usage(struct sc_pkcs15_card *p15card,
|
int sc_pkcs15_find_prkey_by_id_usage(struct sc_pkcs15_card *p15card,
|
||||||
const struct sc_pkcs15_id *id,
|
const struct sc_pkcs15_id *id,
|
||||||
unsigned int usage,
|
unsigned int usage,
|
||||||
|
|
|
@ -439,6 +439,9 @@ int sc_pkcs15_read_data_object(struct sc_pkcs15_card *p15card,
|
||||||
int sc_pkcs15_find_data_object_by_id(struct sc_pkcs15_card *p15card,
|
int sc_pkcs15_find_data_object_by_id(struct sc_pkcs15_card *p15card,
|
||||||
const struct sc_pkcs15_id *id,
|
const struct sc_pkcs15_id *id,
|
||||||
struct sc_pkcs15_object **out);
|
struct sc_pkcs15_object **out);
|
||||||
|
int sc_pkcs15_find_data_object_by_app_oid(struct sc_pkcs15_card *p15card,
|
||||||
|
const struct sc_object_id *app_oid,
|
||||||
|
struct sc_pkcs15_object **out);
|
||||||
void sc_pkcs15_free_data_object(struct sc_pkcs15_data *data_object);
|
void sc_pkcs15_free_data_object(struct sc_pkcs15_data *data_object);
|
||||||
|
|
||||||
int sc_pkcs15_read_certificate(struct sc_pkcs15_card *card,
|
int sc_pkcs15_read_certificate(struct sc_pkcs15_card *card,
|
||||||
|
@ -603,6 +606,7 @@ typedef struct sc_pkcs15_search_key {
|
||||||
unsigned int class_mask;
|
unsigned int class_mask;
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
const sc_pkcs15_id_t * id;
|
const sc_pkcs15_id_t * id;
|
||||||
|
const struct sc_object_id *app_oid;
|
||||||
const sc_path_t * path;
|
const sc_path_t * path;
|
||||||
unsigned int usage_mask, usage_value;
|
unsigned int usage_mask, usage_value;
|
||||||
unsigned int flags_mask, flags_value;
|
unsigned int flags_mask, flags_value;
|
||||||
|
|
Loading…
Reference in New Issue