From 04a5c99f77a1ac17396e592e85f740c05b434142 Mon Sep 17 00:00:00 2001 From: "ludovic.rousseau" Date: Wed, 25 Mar 2009 13:55:25 +0000 Subject: [PATCH] Detect the eToken 72K and activate RSA 2048 and extended APDU for it. Thanks to Joao Poupino for the patch http://www.opensc-project.org/pipermail/opensc-devel/2009-March/011978.html git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3671 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/card-muscle.c | 14 ++++++++++++++ src/libopensc/cards.h | 1 + 2 files changed, 15 insertions(+) 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,