annotate simtool/grcard1.c @ 93:6041c601304d

fcsim1-mkprov: revert OTA key addition It appears that GrcardSIM2 cards (which is what we got for FCSIM1) do not support OTA after all, contrary to what we were previously led to believe by some tech support emails from Grcard - apparently those support emails and OTA descriptions referred to some other card model(s).
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 21 Apr 2021 05:38:39 +0000
parents c8e2a0e89d08
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This module implements a few special commands for those very few
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * incredibly lucky people on Earth who have no-longer-available
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * sysmoSIM-GR1 cards, or any other branded variant of the same card
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
5 * from Grcard. All knowledge of proprietary APDUs that appears in
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
6 * this code comes from this Osmocom wiki page:
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
7 *
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
8 * https://osmocom.org/projects/cellular-infrastructure/wiki/GrcardSIM
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 */
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <sys/types.h>
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdio.h>
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include "simresp.h"
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
15 /*
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
16 * grcard1-set-pin1 command sets PIN1 and PUK1,
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
17 * grcard1-set-pin2 command sets PIN2 and PUK2.
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
18 *
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
19 * The proprietary APDU structure for these commands is naturally
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
20 * intuitive (agrees with common sense), hence they are expected
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
21 * to be correct despite lack of testing.
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
22 */
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
23
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 cmd_grcard1_set_pin(argc, argv)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 char **argv;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 u_char cmd[21];
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 int rc;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 /* Grcard1 proprietary command APDU */
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 cmd[0] = 0x80;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 cmd[1] = 0xD4;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 cmd[2] = 0x00;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 switch (argv[0][15]) {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 case '1':
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 cmd[3] = 0x01;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 break;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 case '2':
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 cmd[3] = 0x02;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 break;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 default:
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 fprintf(stderr, "BUG in grcard1-set-pinN command\n");
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 return(-1);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 cmd[4] = 16;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 rc = encode_pin_entry(argv[1], cmd + 5);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 rc = encode_pin_entry(argv[2], cmd + 13);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 rc = apdu_exchange(cmd, 21);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 if (sim_resp_sw != 0x9000) {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 fprintf(stderr, "bad SW response: %04X\n", sim_resp_sw);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 return(-1);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 return(0);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
62 /*
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
63 * The ADM PIN structure of GrcardSIM1 cards is poorly understood.
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
64 * The Osmocom wiki page describes ADM1 and ADM2 per Grcard's ADMn
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
65 * naming convention (see ../doc/ADM-PIN-numbering), but each of those
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
66 * also has an associated unblock code (called AUK1 and AUK2 in the
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
67 * wiki page), and the command APDUs set ADM+AUK pairs: either
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
68 * ADM1+AUK1 or ADM2+AUK2. The following blind (untested) code is
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
69 * based on this wiki page description.
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
70 *
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
71 * Because these access control codes are proprietary to Grcard
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
72 * (not standard PIN1/PIN2/PUK1/PUK2), they can be arbitrary 64-bit
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
73 * keys, not restricted to the ASCII-decimal subset used for standard
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
74 * PINs and PUKs. According to pySim-prog, the canonical ADM2 key
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
75 * on these cards is hex 4444444444444444, which is outside of the
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
76 * ASCII-decimal range (contrast with the situation on GrcardSIM2,
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
77 * where the canonical SUPER ADM is decimal 88888888) - hence our
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
78 * grcard1-set-admN commands take hex strings for ADMn and AUKn,
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
79 * not decimal ones like grcard1-set-pinN.
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
80 */
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
81
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 cmd_grcard1_set_adm(argc, argv)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 char **argv;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 u_char cmd[23];
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 int rc;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 /* Grcard1 proprietary command APDU */
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 cmd[0] = 0x80;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 cmd[1] = 0xD4;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 cmd[2] = 0x01;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 switch (argv[0][15]) {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 case '1':
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
94 case '4':
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 cmd[3] = 0x04;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 break;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 case '2':
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
98 case '5':
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 cmd[3] = 0x05;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 break;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 default:
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 fprintf(stderr, "BUG in grcard1-set-admN command\n");
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 return(-1);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 cmd[4] = 18;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 cmd[5] = 0x03;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 cmd[6] = 0x00;
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
108 rc = decode_hex_data_from_string(argv[1], cmd + 7, 8, 8);
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 return(rc);
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
111 rc = decode_hex_data_from_string(argv[2], cmd + 15, 8, 8);
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 rc = apdu_exchange(cmd, 23);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 if (sim_resp_sw != 0x9000) {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 fprintf(stderr, "bad SW response: %04X\n", sim_resp_sw);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 return(-1);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 return(0);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123
66
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
124 /*
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
125 * The command for setting Ki has been extensively exercised
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
126 * by Osmocom people, hence it is assumed to be correct.
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
127 */
c8e2a0e89d08 grcard1-set-admN: entry form changed from decimal to hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
128
10
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 cmd_grcard1_set_ki(argc, argv)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 char **argv;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 u_char cmd[21];
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 int rc;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 /* Grcard1 proprietary command APDU */
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 cmd[0] = 0x80;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 cmd[1] = 0xD4;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 cmd[2] = 0x02;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 cmd[3] = 0x00;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 cmd[4] = 16;
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 rc = decode_hex_data_from_string(argv[1], cmd + 5, 16, 16);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 rc = apdu_exchange(cmd, 21);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 if (rc < 0)
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 return(rc);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 if (sim_resp_sw != 0x9000) {
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 fprintf(stderr, "bad SW response: %04X\n", sim_resp_sw);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 return(-1);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 }
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 return(0);
ddd767f6e15b fc-simtool ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 }