FreeCalypso > hg > freecalypso-hwlab
annotate simtool/grcard1.c @ 148:1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 06 Feb 2021 23:52:53 +0000 |
parents | |
children | 451ed3bbfe96 |
rev | line source |
---|---|
148
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This module implements a few special commands for those very few |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * incredibly lucky people on Earth who have no-longer-available |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * sysmoSIM-GR1 cards, or any other branded variant of the same card |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * from Grcard. |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/types.h> |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <ctype.h> |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdio.h> |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdlib.h> |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <pcsclite.h> |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <winscard.h> |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include "globals.h" |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 cmd_grcard1_set_pin(argc, argv) |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 char **argv; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 { |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 u_char cmd[21]; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 int rc; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 /* Grcard1 proprietary command APDU */ |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 cmd[0] = 0x80; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 cmd[1] = 0xD4; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 cmd[2] = 0x00; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 switch (argv[0][15]) { |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 case '1': |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 cmd[3] = 0x01; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 break; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 case '2': |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 cmd[3] = 0x02; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 break; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 default: |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 fprintf(stderr, "BUG in grcard1-set-pinN command\n"); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 return(-1); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 } |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 cmd[4] = 16; |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 rc = encode_pin_entry(argv[1], cmd + 5); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 if (rc < 0) |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 return(rc); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 rc = encode_pin_entry(argv[2], cmd + 13); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 if (rc < 0) |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 return(rc); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 rc = apdu_exchange(cmd, 21); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (rc < 0) |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 return(rc); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 if (sim_resp_sw != 0x9000) { |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 fprintf(stderr, "bad SW response: %04X\n", sim_resp_sw); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 return(-1); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 } |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 return(0); |
1232dea1d66a
fc-simtool: grcard1-set-pin[12] commands implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |