- Introduce _sc_match_atr_hex / struct sc_atr_table_hex.

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2130 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
aet 2005-02-04 15:57:38 +00:00
parent 10e9bd4e05
commit cbe2904889
2 changed files with 37 additions and 0 deletions

View File

@ -22,6 +22,9 @@
#include "asn1.h"
#include <assert.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <string.h>
int sc_check_sw(struct sc_card *card, int sw1, int sw2)
@ -917,6 +920,32 @@ int _sc_match_atr(struct sc_card *card, struct sc_atr_table *table, int *id_out)
return -1;
}
int _sc_match_atr_hex(struct sc_card *card, struct sc_atr_table_hex *table, int *id_out)
{
const u8 *atr = card->atr;
size_t atr_len = card->atr_len;
int i = 0;
if (table == NULL)
return -1;
for (i = 0; table[i].atr != NULL; i++) {
u8 tatr[SC_MAX_ATR_SIZE];
size_t tlen = sizeof(tatr);
if (sc_hex_to_bin(table[i].atr, tatr, &tlen))
continue;
if (tlen != atr_len)
continue;
if (memcmp(tatr, atr, tlen) != 0)
continue;
if (id_out != NULL)
*id_out = table[i].id;
return i;
}
return -1;
}
int _sc_add_atr(struct sc_card_driver *driver,
const u8 *atr, size_t atrlen, int id)
{

View File

@ -44,6 +44,13 @@ struct sc_atr_table {
int id;
};
struct sc_atr_table_hex {
const char *atr;
const char *name;
int id;
unsigned flags;
};
/* Internal use only */
int sc_check_sw(struct sc_card *card, int sw1, int sw2);
size_t _sc_count_bit_string_size(const void * buf, size_t bufsize);
@ -58,6 +65,7 @@ int _sc_add_atr(struct sc_card_driver *, const u8 *, size_t, int);
/* Returns an index number if a match was found, -1 otherwise. table has to
* be null terminated. */
int _sc_match_atr(struct sc_card *card, struct sc_atr_table *table, int *id_out);
int _sc_match_atr_hex(struct sc_card *card, struct sc_atr_table_hex *table, int *id_out);
int _sc_card_add_algorithm(struct sc_card *card, const struct sc_algorithm_info *info);
int _sc_card_add_rsa_alg(struct sc_card *card, unsigned int key_length,