Changeset 17
- Timestamp:
- 04/05/09 01:32:46 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-seca.c
r8 r17 110 110 memset(reader[ridx].prid, 0xff, sizeof(reader[ridx].prid)); 111 111 read_cmd(ins0e, NULL); // read unique id 112 memcpy(reader[ridx].hexserial, cta_res+2, 6); 112 reader[ridx].hexserial[0]=0; 113 reader[ridx].hexserial[1]=0; 114 memcpy(reader[ridx].hexserial+2, cta_res+2, 6); 113 115 cs_ri_log("type: seca, caid: %04X, serial: %llu, card: %s v%d.%d", 114 116 reader[ridx].caid[0], b2ll(5, cta_res+3), card, atr[9]&0x0F, atr[9]>>4); … … 170 172 cs_debug("do_ecm:ins3c=%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x.",ins3c[0],ins3c[1],ins3c[2],ins3c[3],ins3c[4],ins3cdata[0],ins3cdata[1],ins3cdata[2],ins3cdata[3],ins3cdata[4],ins3cdata[5],ins3cdata[6],ins3cdata[7],ins3cdata[8],ins3cdata[9]); 171 173 write_cmd(ins3c, ins3cdata); //ecm request 174 cs_debug("do_ecm_answer:%02x%02x",cta_res[0], cta_res[1]); 175 176 static unsigned char ins30[] = { 0xC1, 0x30, 0x00, 0x02, 0x09 }; 177 static unsigned char ins30data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }; 178 /* We need to use a token */ 179 if (cta_res[0] == 0x90 && cta_res[1] == 0x1a) { 180 write_cmd(ins30, ins30data); 181 cs_debug("do_ins30_answer:%02x%02x",cta_res[0], cta_res[1]); 182 write_cmd(ins3c, ins3cdata); //ecm request 183 cs_debug("do_ecm_answer2:%02x%02x",cta_res[0], cta_res[1]); 184 } 185 172 186 if ((cta_res[0] != 0x90) || (cta_res[1] != 0x00)) return (0); 173 187 read_cmd(ins3a, NULL); //get cw's … … 210 224 if (ep->emm[0] == 0x82) { //unique EMM 211 225 //first test if UA matches 212 if ((reader[ridx].hexserial[ 0] != ep->emm[3]) ||213 (reader[ridx].hexserial[ 1] != ep->emm[4]) ||214 (reader[ridx].hexserial[ 2] != ep->emm[5]) ||215 (reader[ridx].hexserial[ 3] != ep->emm[6]) ||216 (reader[ridx].hexserial[ 4] != ep->emm[7]) ||217 (reader[ridx].hexserial[ 5] != ep->emm[8])) {218 cs_log("EMM: Unique update did not match; EMM Serial:%02X%02X%02X%02X , Reader Serial:%02X%02X%02X%02X.",ep->emm[4], ep->emm[5], ep->emm[6], ep->emm[7], ep->emm[8], reader[ridx].hexserial[1], reader[ridx].hexserial[2], reader[ridx].hexserial[3], reader[ridx].hexserial[4], reader[ridx].hexserial[5]);226 if ((reader[ridx].hexserial[2] != ep->emm[3]) || 227 (reader[ridx].hexserial[3] != ep->emm[4]) || 228 (reader[ridx].hexserial[4] != ep->emm[5]) || 229 (reader[ridx].hexserial[5] != ep->emm[6]) || 230 (reader[ridx].hexserial[6] != ep->emm[7]) || 231 (reader[ridx].hexserial[7] != ep->emm[8])) { 232 cs_log("EMM: Unique update did not match; EMM Serial:%02X%02X%02X%02X%02X%02X, Reader Serial:%02X%02X%02X%02X%02X%02X.", ep->emm[3], ep->emm[4], ep->emm[5], ep->emm[6], ep->emm[7], ep->emm[8], reader[ridx].hexserial[2], reader[ridx].hexserial[3], reader[ridx].hexserial[4], reader[ridx].hexserial[5], reader[ridx].hexserial[6], reader[ridx].hexserial[7]); 219 233 return(0); 220 234 } 221 235 else { 222 cs_log("EMM: Unique update matched EMM Serial:%02X%02X%02X%02X .",ep->emm[4], ep->emm[5], ep->emm[6], ep->emm[7], ep->emm[8]);236 cs_log("EMM: Unique update matched EMM Serial:%02X%02X%02X%02X%02X.", ep->emm[3], ep->emm[4], ep->emm[5], ep->emm[6], ep->emm[7], ep->emm[8]); 223 237 //first find out prov id 224 238 // i=get_prov_index(ep->emm[9],ep->emm[10]);
Note:
See TracChangeset
for help on using the changeset viewer.