iasecc: 'DELETE SDO' card ctl ...

to be used by Obertbur's IAS/ECC card.


git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5398 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
vtarasov 2011-04-26 17:29:08 +00:00
parent 346490b953
commit c9bf9bc22c
2 changed files with 38 additions and 0 deletions

View File

@ -2282,6 +2282,40 @@ iasecc_sdo_create(struct sc_card *card, struct iasecc_sdo *sdo)
LOG_FUNC_RETURN(ctx, rv);
}
/* Oberthur's specific */
static int
iasecc_sdo_delete(struct sc_card *card, struct iasecc_sdo *sdo)
{
struct sc_context *ctx = card->ctx;
struct sc_apdu apdu;
unsigned char data[6] = {
0x70, 0x04, 0xBF, 0xFF, 0xFF, 0x00
};
int rv;
LOG_FUNC_CALLED(ctx);
if (sdo->magic != SC_CARDCTL_IASECC_SDO_MAGIC)
LOG_TEST_RET(ctx, SC_ERROR_INVALID_DATA, "Invalid SDO data");
data[2] = IASECC_SDO_TAG_HEADER;
data[3] = sdo->sdo_class | 0x80;
data[4] = sdo->sdo_ref;
sc_log(ctx, "delete SDO %02X%02X%02X", data[2], data[3], data[4]);
sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0xDB, 0x3F, 0xFF);
apdu.data = data;
apdu.datalen = sizeof(data);
apdu.lc = sizeof(data);
apdu.flags |= SC_APDU_FLAGS_CHAINING;
rv = sc_transmit_apdu(card, &apdu);
LOG_TEST_RET(ctx, rv, "APDU transmit failed");
rv = sc_check_sw(card, apdu.sw1, apdu.sw2);
LOG_TEST_RET(ctx, rv, "delete SDO error");
LOG_FUNC_RETURN(ctx, rv);
}
static int
iasecc_sdo_put_data(struct sc_card *card, struct iasecc_sdo_update *update)
@ -2591,6 +2625,9 @@ iasecc_card_ctl(struct sc_card *card, unsigned long cmd, void *ptr)
case SC_CARDCTL_IASECC_SDO_CREATE:
sc_log(ctx, "CMD SC_CARDCTL_IASECC_SDO_CREATE: sdo_class %X", sdo->sdo_class);
return iasecc_sdo_create(card, (struct iasecc_sdo *) ptr);
case SC_CARDCTL_IASECC_SDO_DELETE:
sc_log(ctx, "CMD SC_CARDCTL_IASECC_SDO_DELETE: sdo_class %X", sdo->sdo_class);
return iasecc_sdo_delete(card, (struct iasecc_sdo *) ptr);
case SC_CARDCTL_IASECC_SDO_PUT_DATA:
sc_log(ctx, "CMD SC_CARDCTL_IASECC_SDO_PUT_DATA: sdo_class %X", sdo->sdo_class);
return iasecc_sdo_put_data(card, (struct iasecc_sdo_update *) ptr);

View File

@ -228,6 +228,7 @@ enum {
SC_CARDCTL_IASECC_SDO_GET_DATA,
SC_CARDCTL_IASECC_SDO_GENERATE,
SC_CARDCTL_IASECC_SDO_CREATE,
SC_CARDCTL_IASECC_SDO_DELETE,
};
enum {