comparison uicc/select.c @ 131:d0929cb42e1c

fc-uicc-tool: GET RESPONSE after SELECT
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 04 Feb 2021 00:23:33 +0000
parents f691a19f191d
children 5af88fa11b54
comparison
equal deleted inserted replaced
130:f691a19f191d 131:d0929cb42e1c
11 select_op(file_id) 11 select_op(file_id)
12 unsigned file_id; 12 unsigned file_id;
13 { 13 {
14 u_char cmd[7]; 14 u_char cmd[7];
15 int rc; 15 int rc;
16 unsigned expect_resp_len;
16 17
17 /* SELECT command APDU */ 18 /* SELECT command APDU */
18 cmd[0] = 0x00; 19 cmd[0] = 0x00;
19 cmd[1] = 0xA4; 20 cmd[1] = 0xA4;
20 cmd[2] = 0x00; 21 cmd[2] = 0x00;
23 cmd[5] = file_id >> 8; 24 cmd[5] = file_id >> 8;
24 cmd[6] = file_id; 25 cmd[6] = file_id;
25 rc = apdu_exchange(cmd, 7); 26 rc = apdu_exchange(cmd, 7);
26 if (rc < 0) 27 if (rc < 0)
27 return(rc); 28 return(rc);
28 printf("SW response to SELECT: %04X\n", sim_resp_sw); 29 if ((sim_resp_sw & 0xFF00) != 0x6100) {
30 fprintf(stderr,
31 "error or unexpected SW response to SELECT of 0x%04X: %04X\n",
32 file_id, sim_resp_sw);
33 return(-1);
34 }
35 expect_resp_len = sim_resp_sw & 0xFF;
36 /* GET RESPONSE follow-up */
37 cmd[1] = 0xC0;
38 cmd[2] = 0;
39 cmd[3] = 0;
40 cmd[4] = expect_resp_len;
41 rc = apdu_exchange(cmd, 5);
42 if (rc < 0)
43 return(rc);
44 if (sim_resp_sw != 0x9000) {
45 fprintf(stderr,
46 "bad SW resp to GET RESPONSE after SELECT: %04X\n",
47 sim_resp_sw);
48 return(-1);
49 }
50 if (sim_resp_data_len != expect_resp_len) {
51 fprintf(stderr,
52 "error: GET RESPONSE after SELECT returned %u bytes, expected %u\n",
53 sim_resp_data_len, expect_resp_len);
54 return(-1);
55 }
29 return(0); 56 return(0);
30 } 57 }
31 58
32 cmd_select(argc, argv) 59 cmd_select(argc, argv)
33 char **argv; 60 char **argv;