annotate simtool/chvfunc.c @ 99:97ba63d9361a

scripts/fcsim1-sst: turn off STK & OTA services In the initial unprogrammed state of the cards from Grcard, SST has services 25 through 29 set to allocated and activated. However, these cards appear to not actually support OTA, ENVELOPE commands do nothing (just return SW 9000), and they were never observed issuing any proactive SIM commands, even after a feature-generous TERMINAL PROFILE. Therefore, let's list these STK & OTA services as allocated, but not activated in our FCSIM1 SST.
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 05 May 2021 04:26:07 +0000
parents c83ec3bd9d67
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This module implements a functional interface to CHV commands,
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * intended for high-level wrappers like sws-*.
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 */
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <sys/types.h>
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdio.h>
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include "simresp.h"
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 verify_chv_func(p2, pin)
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 unsigned p2;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 char *pin;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 {
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 u_char cmd[13];
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 int rc;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 /* VERIFY CHV command APDU */
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 cmd[0] = 0xA0;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 cmd[1] = 0x20;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 cmd[2] = 0x00;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 cmd[3] = p2;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 cmd[4] = 8;
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 rc = encode_pin_entry(pin, cmd + 5);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 if (rc < 0)
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 return(rc);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 rc = apdu_exchange(cmd, 13);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 if (rc < 0)
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 return(rc);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 if (sim_resp_sw != 0x9000) {
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 fprintf(stderr, "bad SW response to VERIFY CHV: %04X\n",
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 sim_resp_sw);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 return(-1);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 }
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 return(0);
cca7d0528f89 fc-simtool sws-auth-adm1 implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 }
33
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
36
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
37 disable_chv_func(p2, pin)
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
38 unsigned p2;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
39 char *pin;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
40 {
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
41 u_char cmd[13];
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
42 int rc;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
43
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
44 /* DISABLE CHV command APDU */
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
45 cmd[0] = 0xA0;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
46 cmd[1] = 0x26;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
47 cmd[2] = 0x00;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
48 cmd[3] = p2;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
49 cmd[4] = 8;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
50 rc = encode_pin_entry(pin, cmd + 5);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
51 if (rc < 0)
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
52 return(rc);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
53 rc = apdu_exchange(cmd, 13);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
54 if (rc < 0)
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
55 return(rc);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
56 if (sim_resp_sw != 0x9000 && sim_resp_sw != 0x9808) {
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
57 fprintf(stderr, "bad SW response to DISABLE CHV: %04X\n",
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
58 sim_resp_sw);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
59 return(-1);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
60 }
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
61 return(0);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
62 }
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
63
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
64 enable_chv_func(p2, pin)
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
65 unsigned p2;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
66 char *pin;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
67 {
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
68 u_char cmd[13];
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
69 int rc;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
70
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
71 /* ENABLE CHV command APDU */
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
72 cmd[0] = 0xA0;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
73 cmd[1] = 0x28;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
74 cmd[2] = 0x00;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
75 cmd[3] = p2;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
76 cmd[4] = 8;
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
77 rc = encode_pin_entry(pin, cmd + 5);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
78 if (rc < 0)
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
79 return(rc);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
80 rc = apdu_exchange(cmd, 13);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
81 if (rc < 0)
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
82 return(rc);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
83 if (sim_resp_sw != 0x9000 && sim_resp_sw != 0x9808) {
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
84 fprintf(stderr, "bad SW response to ENABLE CHV: %04X\n",
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
85 sim_resp_sw);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
86 return(-1);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
87 }
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
88 return(0);
c83ec3bd9d67 fc-simtool sws-pin1-{dis,en}able implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 31
diff changeset
89 }