FreeCalypso > hg > fc-sim-tools
annotate simtool/chvext.c @ 83:3055d5c9e7a3
fc-simtool update-rec* commands: check curfile_record_len
and error out if it is not set
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Sun, 11 Apr 2021 02:38:31 +0000 | 
| parents | 10bfdee30a68 | 
| children | 
| 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 some commands for extended (non-standard) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * CHV-like operations which some cards use for ADM access control. | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 */ | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <sys/types.h> | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 #include <stdio.h> | 
| 59 
10bfdee30a68
simtool/chvext.c: missing #include <stdlib.h>
 Mychaela Falconia <falcon@freecalypso.org> parents: 
10diff
changeset | 8 #include <stdlib.h> | 
| 10 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include "simresp.h" | 
| 
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 cmd_verify_ext(argc, argv) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 char **argv; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 { | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 u_char cmd[13]; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 int rc; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 /* VERIFY CHV command APDU */ | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 cmd[0] = 0xA0; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 cmd[1] = 0x20; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 cmd[2] = 0x00; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 cmd[3] = strtoul(argv[1], 0, 0); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 cmd[4] = 8; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 rc = encode_pin_entry(argv[2], cmd + 5); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 if (rc < 0) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 return(rc); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 rc = apdu_exchange(cmd, 13); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 if (rc < 0) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 return(rc); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 if (sim_resp_sw != 0x9000) { | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 fprintf(stderr, "bad SW response: %04X\n", sim_resp_sw); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 return(-1); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 } | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 return(0); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 } | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 cmd_verify_hex(argc, argv) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 char **argv; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 { | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 u_char cmd[13]; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 int rc; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 /* VERIFY CHV command APDU */ | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 cmd[0] = 0xA0; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 cmd[1] = 0x20; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 cmd[2] = 0x00; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 cmd[3] = strtoul(argv[1], 0, 0); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 cmd[4] = 8; | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 rc = decode_hex_data_from_string(argv[2], cmd + 5, 8, 8); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 if (rc < 0) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 return(rc); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 rc = apdu_exchange(cmd, 13); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 if (rc < 0) | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 return(rc); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 if (sim_resp_sw != 0x9000) { | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 fprintf(stderr, "bad SW response: %04X\n", sim_resp_sw); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 return(-1); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 } | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 return(0); | 
| 
ddd767f6e15b
fc-simtool ported over
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 } | 
