Add a catch-all for (possibly) blank JavaCards. This way known blank JavaCards without a supported applet get recognized by opensc-tool -n.

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@4004 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
martin 2010-02-06 10:56:29 +00:00
parent f636cc1862
commit 4d56ce2b7b
5 changed files with 83 additions and 1 deletions

View File

@ -39,7 +39,8 @@ libopensc_la_SOURCES = \
card-oberthur.c card-belpic.c card-atrust-acos.c card-entersafe.c \
card-incrypto34.c card-piv.c card-muscle.c card-acos5.c \
card-asepcos.c card-akis.c card-gemsafeV1.c card-rutoken.c \
card-rtecp.c card-westcos.c card-myeid.c card-ias.c\
card-rtecp.c card-westcos.c card-myeid.c card-ias.c \
card-javacard.c \
\
pkcs15-openpgp.c pkcs15-infocamere.c pkcs15-starcert.c \
pkcs15-tcos.c pkcs15-esteid.c pkcs15-postecert.c pkcs15-gemsafeGPK.c \

View File

@ -26,6 +26,7 @@ OBJECTS = \
card-incrypto34.obj card-piv.obj card-muscle.obj card-acos5.obj \
card-asepcos.obj card-akis.obj card-gemsafeV1.obj card-rutoken.obj \
card-rtecp.obj card-westcos.obj card-myeid.obj card-ias.obj \
card-javacard.c \
\
p15emu-westcos.obj \
pkcs15-openpgp.obj pkcs15-infocamere.obj pkcs15-starcert.obj \

View File

@ -0,0 +1,74 @@
/*
* card-javacard.c: Recognize known blank JavaCards
*
* Copyright (C) 2010 Martin Paljak <martin@paljak.pri.ee>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "internal.h"
static struct sc_atr_table javacard_atrs[] = {
{"3b:db:18:00:80:b1:fe:45:1f:83:00:31:c0:64:c7:fc:10:00:01:90:00:fa", NULL, "Cosmo v7 64K dual/128K", SC_CARD_TYPE_JAVACARD, 0, NULL},
{"3b:75:94:00:00:62:02:02:02:01", NULL, "Cyberflex 32K", SC_CARD_TYPE_JAVACARD, 0, NULL},
{"3b:95:95:40:ff:ae:01:03:00:00", NULL, "Cyberflex v2 64K", SC_CARD_TYPE_JAVACARD, 0, NULL},
{NULL, NULL, NULL, 0, 0, NULL}
};
static struct sc_card_operations javacard_ops;
static struct sc_card_driver javacard_drv = {
"JavaCard (without supported applet)",
"javacard",
&javacard_ops,
NULL, 0, NULL
};
static int javacard_finish(sc_card_t * card)
{
return SC_SUCCESS;
}
static int javacard_match_card(sc_card_t * card)
{
if (_sc_match_atr(card, javacard_atrs, &card->type) < 0)
return 0;
return 1;
}
static int javacard_init(sc_card_t * card)
{
card->drv_data = NULL;
return SC_SUCCESS;
}
static struct sc_card_driver *sc_get_driver(void)
{
struct sc_card_driver *iso_drv = sc_get_iso7816_driver();
javacard_ops = *iso_drv->ops;
javacard_ops.match_card = javacard_match_card;
javacard_ops.select_file = NULL;
javacard_ops.init = javacard_init;
javacard_ops.finish = javacard_finish;
return &javacard_drv;
}
struct sc_card_driver *sc_get_javacard_driver(void)
{
return sc_get_driver();
}

View File

@ -160,6 +160,10 @@ enum {
/* IAS cards */
SC_CARD_TYPE_IAS_BASE = 22000,
SC_CARD_TYPE_IAS_PTEID,
/* Generic JavaCards without supported applet */
SC_CARD_TYPE_JAVACARD_BASE = 23000,
SC_CARD_TYPE_JAVACARD,
};
extern sc_card_driver_t *sc_get_default_driver(void);
@ -191,6 +195,7 @@ extern sc_card_driver_t *sc_get_rtecp_driver(void);
extern sc_card_driver_t *sc_get_westcos_driver(void);
extern sc_card_driver_t *sc_get_myeid_driver(void);
extern sc_card_driver_t *sc_get_ias_driver(void);
extern sc_card_driver_t *sc_get_javacard_driver(void);
#ifdef __cplusplus
}

View File

@ -86,6 +86,7 @@ static const struct _sc_driver_entry internal_card_drivers[] = {
{ "myeid", (void *(*)(void)) sc_get_myeid_driver },
/* emv is not really implemented */
{ "emv", (void *(*)(void)) sc_get_emv_driver },
{ "javacard", (void *(*)(void)) sc_get_javacard_driver },
/* The default driver should be last, as it handles all the
* unrecognized cards. */
{ "default", (void *(*)(void)) sc_get_default_driver },