FreeCalypso > hg > fc-pcsc-tools
annotate simtool/inval_rehab.c @ 124:d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 20 Feb 2021 19:05:48 +0000 |
parents | |
children | e5d534fa5924 |
rev | line source |
---|---|
124
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This module implements the rarely-used INVALIDATE and REHABILITATE |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * SIM protocol commands. |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/types.h> |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include "simresp.h" |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 current_ef_inval() |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 { |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 u_char cmd[5]; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 int rc; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 /* INVALIDATE command APDU */ |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 cmd[0] = 0xA0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 cmd[1] = 0x04; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 cmd[2] = 0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 cmd[3] = 0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 cmd[4] = 0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 rc = apdu_exchange(cmd, 5); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 if (rc < 0) |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 return(rc); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 if (sim_resp_sw != 0x9000) { |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 fprintf(stderr, "bad SW response to INVALIDATE: %04X\n", |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 sim_resp_sw); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 return(-1); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 } |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 return(0); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 current_ef_rehab() |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 { |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 u_char cmd[5]; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 int rc; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 /* REHABILITATE command APDU */ |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 cmd[0] = 0xA0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 cmd[1] = 0x44; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 cmd[2] = 0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 cmd[3] = 0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 cmd[4] = 0; |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 rc = apdu_exchange(cmd, 5); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 if (rc < 0) |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 return(rc); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 if (sim_resp_sw != 0x9000) { |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 fprintf(stderr, "bad SW response to REHABILITATE: %04X\n", |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 sim_resp_sw); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 return(-1); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 } |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 return(0); |
d0d1c0b35831
fc-simtool: add low-level cur-ef-{inval,rehab} commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |