annotate utils/fcsim1-program.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 2a24e94400e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
79
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This utility takes an ICCID number on the command line (needs to be
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * read from the plastic with human eyeballs and entered by the operator),
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * reads card provisioning data from fcsim1-prov-db, and generates
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * an fc-simtool command script for programming one FCSIM1 card. The
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * intent is that the output of this program will be piped directly
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 * into fc-simtool.
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <sys/types.h>
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <stdio.h>
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdlib.h>
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <unistd.h>
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "../libutil/dbread.h"
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 static char prov_db_file[] = "/opt/freecalypso/sim-data/fcsim1-prov-db";
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 static char *adm_key = "88888888";
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 static int adm_hex;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 static char *common_script;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 static char iccid_fullstr[20];
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 static struct dbread_state dbs;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 static char *prov_imsi, *prov_acc, *prov_ki, *prov_msisdn;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 static void
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 preen_iccid(arg)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 char *arg;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 {
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 u_char nibbles[19];
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 if (parse_decimal_shorthand(arg, nibbles, 19) < 0)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 exit(1); /* error msg already printed */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 if (nibbles[18] != compute_iccid_luhn(nibbles)) {
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 fprintf(stderr, "error: Luhn check digit mismatch\n");
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 exit(1);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 }
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 nibbles_to_ascii(nibbles, 19, iccid_fullstr);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 }
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 static void
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 parse_cmdline(argc, argv)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 char **argv;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 {
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 extern int optind;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 extern char *optarg;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 int c;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 while ((c = getopt(argc, argv, "a:A:c:")) != EOF) {
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 switch (c) {
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 case 'a':
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 adm_key = optarg;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 continue;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 case 'A':
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 adm_key = optarg;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 adm_hex = 1;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 continue;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 case 'c':
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 common_script = optarg;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 continue;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 case '?':
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 default:
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 usage: fprintf(stderr, "usage: %s [options] iccid\n", argv[0]);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 exit(1);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 }
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 }
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 if (argc - optind != 1)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 goto usage;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 preen_iccid(argv[optind]);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 }
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 main(argc, argv)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 char **argv;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 {
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 int rc;
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 parse_cmdline(argc, argv);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 rc = dbread_find_record(prov_db_file, &dbs, "ICCID", iccid_fullstr);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 if (rc < 0)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 exit(1); /* error msg already printed */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 prov_imsi = dbread_find_key_req(&dbs, "IMSI");
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 if (!prov_imsi)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 exit(1); /* error msg already printed */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 prov_acc = dbread_find_key_req(&dbs, "ACC");
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 if (!prov_acc)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 exit(1); /* error msg already printed */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 prov_ki = dbread_find_key_req(&dbs, "Ki");
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 if (!prov_ki)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 exit(1); /* error msg already printed */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 prov_msisdn = dbread_find_key(&dbs, "MSISDN");
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 /* emit the script! */
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 printf("verify-%s 11 %s\n", adm_hex ? "hex" : "ext", adm_key);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 if (common_script)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 printf("exec %s\n", common_script);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 printf("write-iccid %s\n", iccid_fullstr);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 printf("write-imsi %s\n", prov_imsi);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 printf("write-acc %s\n", prov_acc);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 printf("grcard2-set-ki %s\n", prov_ki);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 if (prov_msisdn)
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 printf("pb-update-imm msisdn 1 %s\n", prov_msisdn);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 exit(0);
2a24e94400e8 fcsim1-program utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 }