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:
parent
346490b953
commit
c9bf9bc22c
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue