add information about cardos 4.2b - latest cardos update.

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3237 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
aj 2007-08-08 20:06:53 +00:00
parent f7636ab5db
commit a7912a2426
4 changed files with 20 additions and 3 deletions

View File

@ -96,6 +96,9 @@ static int cardos_match_card(sc_card_t *card)
} else if (card->atr[11] >= 0x08) {
sc_debug(card->ctx, "found cardos v4.3b or higher");
card->type = SC_CARD_TYPE_CARDOS_M4_3;
} else if (card->atr[11] >= 0x09) {
sc_debug(card->ctx, "found cardos v4.2b or higher");
card->type = SC_CARD_TYPE_CARDOS_M4_2B;
} else {
sc_debug(card->ctx, "found cardos m4.2");
}
@ -163,7 +166,8 @@ static int cardos_init(sc_card_t *card)
if (r == 1)
card->caps |= SC_CARD_CAP_RSA_2048;
card->caps |= SC_CARD_CAP_APDU_EXT;
} else if (card->type == SC_CARD_TYPE_CARDOS_M4_3) {
} else if (card->type == SC_CARD_TYPE_CARDOS_M4_3
|| card->type == SC_CARD_TYPE_CARDOS_M4_2B) {
card->caps |= SC_CARD_CAP_RSA_2048;
card->caps |= SC_CARD_CAP_APDU_EXT;
}
@ -640,7 +644,8 @@ static int cardos_create_file(sc_card_t *card, sc_file_t *file)
return r;
return iso_ops->create_file(card, file);
} else if (card->type == SC_CARD_TYPE_CARDOS_M4_2 ||
card->type == SC_CARD_TYPE_CARDOS_M4_3) {
card->type == SC_CARD_TYPE_CARDOS_M4_3 ||
card->type == SC_CARD_TYPE_CARDOS_M4_2B) {
u8 sbuf[SC_MAX_APDU_BUFFER_SIZE];
size_t len = sizeof(sbuf);
sc_apdu_t apdu;

View File

@ -42,6 +42,7 @@ enum {
SC_CARD_TYPE_CARDOS_M4_01,
SC_CARD_TYPE_CARDOS_M4_2,
SC_CARD_TYPE_CARDOS_M4_3,
SC_CARD_TYPE_CARDOS_M4_2B, /* 4.2b is the latest after 4.3b */
/* flex/cyberflex drivers */
SC_CARD_TYPE_FLEX_BASE = 2000,

View File

@ -622,7 +622,7 @@ static int cardos_put_key(sc_profile_t *profile, sc_card_t *card,
pin_id = 0;
if (key_info->modulus_length > 1024 && (card->type == SC_CARD_TYPE_CARDOS_M4_2 ||
card->type == SC_CARD_TYPE_CARDOS_M4_3)) {
card->type == SC_CARD_TYPE_CARDOS_M4_3 ||card->type == SC_CARD_TYPE_CARDOS_M4_2B)) {
r = cardos_store_key_component(card, algorithm, key_id, pin_id, 0,
key->p.data, key->p.len, 0, 0);
if (r != SC_SUCCESS)

View File

@ -63,6 +63,15 @@ static int cardos_info(void)
u8 rbuf[SC_MAX_APDU_BUFFER_SIZE];
int r;
if (verbose) {
printf("Card ATR:\n");
hex_dump_asc(stdout, card->atr, card->atr_len, -1);
} else {
char tmp[SC_MAX_ATR_SIZE*3];
sc_bin_to_hex(card->atr, card->atr_len, tmp, sizeof(tmp) - 1, ':');
fprintf(stdout,"%s\n",tmp);
}
memset(&apdu, 0, sizeof(apdu));
apdu.cla = 0x00;
apdu.ins = 0xca;
@ -141,6 +150,8 @@ static int cardos_info(void)
printf(" (that's CardOS M4.3)\n");
} else if (apdu.resp[0] == 0xc8 && apdu.resp[1] == 0x08) {
printf(" (that's CardOS M4.3b)\n");
} else if (apdu.resp[0] == 0xc8 && apdu.resp[1] == 0x09) {
printf(" (that's CardOS M4.2b)\n");
} else {
printf(" (unknown Version)\n");
}