opensc-explorer: implemented `pace`
This commit is contained in:
parent
7b630962c1
commit
59b214ec23
|
@ -85,6 +85,7 @@ static int do_create(int argc, char **argv);
|
|||
static int do_mkdir(int argc, char **argv);
|
||||
static int do_delete(int argc, char **argv);
|
||||
static int do_verify(int argc, char **argv);
|
||||
static int do_pace(int argc, char **argv);
|
||||
static int do_change(int argc, char **argv);
|
||||
static int do_unblock(int argc, char **argv);
|
||||
static int do_get(int argc, char **argv);
|
||||
|
@ -140,6 +141,9 @@ static struct command cmds[] = {
|
|||
{ do_verify,
|
||||
"verify", "<key type><key ref> [<pin>]",
|
||||
"present a PIN or key to the card" },
|
||||
{ do_pace,
|
||||
"pace", "{pin|can|puk|mrz} [<secret>]",
|
||||
"Establish a PACE channel" },
|
||||
{ do_change,
|
||||
"change", "CHV<pin ref> [[<old pin>] <new pin>]",
|
||||
"change a PIN" },
|
||||
|
@ -944,6 +948,45 @@ usage:
|
|||
}
|
||||
|
||||
|
||||
static int do_pace(int argc, char **argv)
|
||||
{
|
||||
int r;
|
||||
struct establish_pace_channel_input pace_input;
|
||||
struct establish_pace_channel_output pace_output;
|
||||
memset(&pace_input, 0, sizeof(pace_input));
|
||||
memset(&pace_output, 0, sizeof(pace_output));
|
||||
|
||||
switch (argc) {
|
||||
case 2:
|
||||
pace_input.pin = (unsigned char *) argv[1];
|
||||
/* fall through */
|
||||
case 1:
|
||||
if (strcmp(argv[0], "pin") == 0)
|
||||
pace_input.pin_id = PACE_PIN_ID_PIN;
|
||||
else if (strcmp(argv[0], "puk") == 0)
|
||||
pace_input.pin_id = PACE_PIN_ID_PUK;
|
||||
else if (strcmp(argv[0], "can") == 0)
|
||||
pace_input.pin_id = PACE_PIN_ID_CAN;
|
||||
else if (strcmp(argv[0], "mrz") == 0)
|
||||
pace_input.pin_id = PACE_PIN_ID_MRZ;
|
||||
else
|
||||
return usage(do_pace);
|
||||
break;
|
||||
default:
|
||||
return usage(do_pace);
|
||||
}
|
||||
|
||||
r = sc_perform_pace(card, &pace_input, &pace_output);
|
||||
if (r) {
|
||||
printf("PACE failed: %s\n", sc_strerror(r));
|
||||
return -1;
|
||||
}
|
||||
printf("Established PACE channel.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int do_change(int argc, char **argv)
|
||||
{
|
||||
int ref, r, tries_left = -1;
|
||||
|
|
Loading…
Reference in New Issue