FreeCalypso > hg > fc-pcsc-tools
comparison simtool/miscadm.c @ 66:3ef90bd13fbe
fc-simtool write-imsi command implemented
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 15 Feb 2021 00:28:10 +0000 | 
| parents | |
| children | 105aa3d1a494 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 65:cc48ac3b151c | 66:3ef90bd13fbe | 
|---|---|
| 1 /* | |
| 2 * This module implements write-iccid and write-imsi commands, | |
| 3 * available only in the admin programming phase after authenticating | |
| 4 * with some card-vendor-dependent ADM key. | |
| 5 */ | |
| 6 | |
| 7 #include <sys/types.h> | |
| 8 #include <stdio.h> | |
| 9 #include "curfile.h" | |
| 10 #include "file_id.h" | |
| 11 | |
| 12 cmd_write_imsi(argc, argv) | |
| 13 char **argv; | |
| 14 { | |
| 15 int rc; | |
| 16 u_char nibbles[16], binrec[9]; | |
| 17 unsigned ndig; | |
| 18 | |
| 19 rc = parse_decimal_string_arg(argv[1], nibbles + 1, 15); | |
| 20 if (rc < 0) | |
| 21 return(rc); | |
| 22 ndig = rc; | |
| 23 if (ndig & 1) | |
| 24 nibbles[0] = 9; | |
| 25 else | |
| 26 nibbles[0] = 1; | |
| 27 binrec[0] = (ndig + 2) >> 1; | |
| 28 pack_reversed_nibbles(nibbles, binrec + 1, 8); | |
| 29 rc = select_op(DF_GSM); | |
| 30 if (rc < 0) | |
| 31 return(rc); | |
| 32 rc = select_op(EF_IMSI); | |
| 33 if (rc < 0) | |
| 34 return(rc); | |
| 35 rc = parse_ef_select_response(); | |
| 36 if (rc < 0) | |
| 37 return(rc); | |
| 38 if (curfile_structure != 0x00 || curfile_total_size != 9) { | |
| 39 fprintf(stderr, | |
| 40 "error: EF_IMSI is not a transparent EF of 9 bytes\n"); | |
| 41 return(-1); | |
| 42 } | |
| 43 return update_bin_op(0, binrec, 9); | |
| 44 } | 
