- added sc_pkcs15_find_pin_by_reference
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@1114 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
053b10e2bf
commit
27e105540e
|
@ -33,6 +33,9 @@ struct sc_pkcs15_search_key {
|
||||||
const struct sc_pkcs15_id * id;
|
const struct sc_pkcs15_id * id;
|
||||||
unsigned int usage_mask, usage_value;
|
unsigned int usage_mask, usage_value;
|
||||||
unsigned int flags_mask, flags_value;
|
unsigned int flags_mask, flags_value;
|
||||||
|
|
||||||
|
unsigned int match_reference : 1;
|
||||||
|
int reference;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int sc_pkcs15_bind_synthetic(struct sc_pkcs15_card *);
|
static int sc_pkcs15_bind_synthetic(struct sc_pkcs15_card *);
|
||||||
|
@ -747,6 +750,21 @@ static int compare_obj_flags(sc_pkcs15_object_t *obj, unsigned int mask, unsigne
|
||||||
return !((flags ^ value) & mask);
|
return !((flags ^ value) & mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int compare_obj_reference(sc_pkcs15_object_t *obj, int value)
|
||||||
|
{
|
||||||
|
void *data = obj->data;
|
||||||
|
int reference;
|
||||||
|
|
||||||
|
switch (obj->type) {
|
||||||
|
case SC_PKCS15_TYPE_AUTH_PIN:
|
||||||
|
reference = ((struct sc_pkcs15_pin_info *) data)->reference;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return reference == value;
|
||||||
|
}
|
||||||
|
|
||||||
static int compare_obj_key(struct sc_pkcs15_object *obj, void *arg)
|
static int compare_obj_key(struct sc_pkcs15_object *obj, void *arg)
|
||||||
{
|
{
|
||||||
struct sc_pkcs15_search_key *sk = (struct sc_pkcs15_search_key *) arg;
|
struct sc_pkcs15_search_key *sk = (struct sc_pkcs15_search_key *) arg;
|
||||||
|
@ -757,6 +775,8 @@ static int compare_obj_key(struct sc_pkcs15_object *obj, void *arg)
|
||||||
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))
|
||||||
return 0;
|
return 0;
|
||||||
|
if (sk->match_reference && !compare_obj_reference(obj, sk->reference))
|
||||||
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -814,6 +834,19 @@ int sc_pkcs15_find_pin_by_auth_id(struct sc_pkcs15_card *p15card,
|
||||||
return find_by_id(p15card, SC_PKCS15_TYPE_AUTH_PIN, id, out);
|
return find_by_id(p15card, SC_PKCS15_TYPE_AUTH_PIN, id, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sc_pkcs15_find_pin_by_reference(struct sc_pkcs15_card *p15card,
|
||||||
|
int reference,
|
||||||
|
struct sc_pkcs15_object **out)
|
||||||
|
{
|
||||||
|
struct sc_pkcs15_search_key sk;
|
||||||
|
|
||||||
|
memset(&sk, 0, sizeof(sk));
|
||||||
|
sk.match_reference = 1;
|
||||||
|
sk.reference = reference;
|
||||||
|
|
||||||
|
return find_by_key(p15card, SC_PKCS15_TYPE_AUTH_PIN, &sk, out);
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
|
|
@ -465,6 +465,9 @@ int sc_pkcs15_unblock_pin(struct sc_pkcs15_card *card,
|
||||||
int sc_pkcs15_find_pin_by_auth_id(struct sc_pkcs15_card *card,
|
int sc_pkcs15_find_pin_by_auth_id(struct sc_pkcs15_card *card,
|
||||||
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_pin_by_reference(struct sc_pkcs15_card *card,
|
||||||
|
int reference,
|
||||||
|
struct sc_pkcs15_object **out);
|
||||||
int sc_pkcs15_find_so_pin(struct sc_pkcs15_card *card,
|
int sc_pkcs15_find_so_pin(struct sc_pkcs15_card *card,
|
||||||
struct sc_pkcs15_object **out);
|
struct sc_pkcs15_object **out);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue