diff --git a/src/libopensc/card-muscle.c b/src/libopensc/card-muscle.c index 68442305..c5babf5f 100644 --- a/src/libopensc/card-muscle.c +++ b/src/libopensc/card-muscle.c @@ -36,6 +36,12 @@ static struct sc_card_driver muscle_drv = { NULL, 0, NULL }; +static struct sc_atr_table muscle_atrs[] = { + /* Aladdin eToken PRO USB 72K Java */ + { "3b:d5:18:00:81:31:3a:7d:80:73:c8:21:10:30", NULL, NULL, SC_CARD_TYPE_MUSCLE_ETOKEN_72K, 0, NULL }, + { NULL, NULL, NULL, 0, 0, NULL } +}; + #define MUSCLE_DATA(card) ( (muscle_private_t*)card->drv_data ) #define MUSCLE_FS(card) ( ((muscle_private_t*)card->drv_data)->fs ) typedef struct muscle_private { @@ -465,6 +471,14 @@ static int muscle_init(sc_card_t *card) card->flags |= SC_CARD_FLAG_ONBOARD_KEY_GEN; card->flags |= SC_CARD_FLAG_RNG; card->caps |= SC_CARD_CAP_RNG; + + /* Card type detection */ + _sc_match_atr(card, muscle_atrs, &card->type); + if(card->type == SC_CARD_TYPE_MUSCLE_ETOKEN_72K) { + card->caps |= SC_CARD_CAP_RSA_2048; + card->caps |= SC_CARD_CAP_APDU_EXT; + } + /* FIXME: Card type detection */ if (1) { unsigned long flags; diff --git a/src/libopensc/cards.h b/src/libopensc/cards.h index 749888f9..f9f8cc86 100644 --- a/src/libopensc/cards.h +++ b/src/libopensc/cards.h @@ -126,6 +126,7 @@ enum { /* Muscle cards */ SC_CARD_TYPE_MUSCLE_BASE = 15000, SC_CARD_TYPE_MUSCLE_GENERIC, + SC_CARD_TYPE_MUSCLE_ETOKEN_72K, /* ACOS5 driver */ SC_CARD_TYPE_ACOS5_BASE = 16000,